|
|
@ -320,16 +320,17 @@ func oxGenPrivKey(jid string, client *xmpp.Client, passphrase string) error {
|
|
|
|
|
|
|
|
|
|
|
|
func oxRecvPublicKeys(client *xmpp.Client, recipient string,
|
|
|
|
func oxRecvPublicKeys(client *xmpp.Client, recipient string,
|
|
|
|
fingerprint string) (*crypto.KeyRing, error) {
|
|
|
|
fingerprint string) (*crypto.KeyRing, error) {
|
|
|
|
var oxPublicKeyRequest IQPubsubRequest
|
|
|
|
opkr := etree.NewDocument()
|
|
|
|
var oxPublicKeyXML OxPublicKey
|
|
|
|
opkrPs := opkr.CreateElement("pubsub")
|
|
|
|
oxPublicKeyRequest.Xmlns = nsPubsub
|
|
|
|
opkrPs.CreateAttr("xmlns", nsPubsub)
|
|
|
|
oxPublicKeyRequest.Items.Node = nsOxPubKeys + ":" + fingerprint
|
|
|
|
opkrPsItems := opkrPs.CreateElement("items")
|
|
|
|
oxPublicKeyRequest.Items.MaxItems = "1"
|
|
|
|
opkrPsItems.CreateAttr("node", nsOxPubKeys+":"+fingerprint)
|
|
|
|
opk, err := xml.Marshal(oxPublicKeyRequest)
|
|
|
|
opkrPsItems.CreateAttr("max_items", "1")
|
|
|
|
|
|
|
|
opkrString, err := opkr.WriteToString()
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
oxPublicKey, err := sendIQ(client, recipient, "get", string(opk))
|
|
|
|
oxPublicKey, err := sendIQ(client, recipient, "get", opkrString)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -337,7 +338,8 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string,
|
|
|
|
return nil, errors.New("Error while requesting public key for " +
|
|
|
|
return nil, errors.New("Error while requesting public key for " +
|
|
|
|
recipient)
|
|
|
|
recipient)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
err = xml.Unmarshal(oxPublicKey.Query, &oxPublicKeyXML)
|
|
|
|
oxPublicKeyXML := etree.NewDocument()
|
|
|
|
|
|
|
|
err = oxPublicKeyXML.ReadFromBytes(oxPublicKey.Query)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -345,8 +347,13 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string,
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for _, r := range oxPublicKeyXML.Items.Item.Pubkey {
|
|
|
|
oxPublicKeyXMLPubsub := oxPublicKeyXML.SelectElement("pubsub")
|
|
|
|
decodedPubKey, err := base64.StdEncoding.DecodeString(r.Data)
|
|
|
|
oxPublicKeyXMLItems := oxPublicKeyXMLPubsub.SelectElement("items")
|
|
|
|
|
|
|
|
oxPublicKeyXMLItem := oxPublicKeyXMLItems.SelectElement("item")
|
|
|
|
|
|
|
|
oxPublicKeyXMLPubkeys := oxPublicKeyXMLItem.SelectElements("pubkey")
|
|
|
|
|
|
|
|
for _, r := range oxPublicKeyXMLPubkeys {
|
|
|
|
|
|
|
|
data := r.SelectElement("data")
|
|
|
|
|
|
|
|
decodedPubKey, err := base64.StdEncoding.DecodeString(data.Text())
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|