|
|
|
@ -373,21 +373,23 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func oxGetPublicKeyRing(client *xmpp.Client, recipient string) (*crypto.KeyRing, error) {
|
|
|
|
|
var oxPublicKeyListRequest IQPubsubRequest
|
|
|
|
|
var oxPublicKeyListXML OxPublicKeysList
|
|
|
|
|
publicKeyRing, err := crypto.NewKeyRing(nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
oxPublicKeyListRequest.Xmlns = nsPubsub
|
|
|
|
|
oxPublicKeyListRequest.Items.Node = nsOxPubKeys
|
|
|
|
|
oxPublicKeyListRequest.Items.MaxItems = "1"
|
|
|
|
|
opkl, err := xml.Marshal(oxPublicKeyListRequest)
|
|
|
|
|
oxPubKeyListReq := etree.NewDocument()
|
|
|
|
|
oxPubKeyListReqPs := oxPubKeyListReq.CreateElement("pubsub")
|
|
|
|
|
oxPubKeyListReqPs.CreateAttr("xmlns", nsPubsub)
|
|
|
|
|
oxPubKeyListReqPsItems := oxPubKeyListReqPs.CreateElement("items")
|
|
|
|
|
oxPubKeyListReqPsItems.CreateAttr("node", nsOxPubKeys)
|
|
|
|
|
oxPubKeyListReqPsItems.CreateAttr("max_items", "1")
|
|
|
|
|
opkl, err := oxPubKeyListReq.WriteToString()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
oxPublicKeyList, err := sendIQ(client, recipient, "get", string(opkl))
|
|
|
|
|
oxPublicKeyList, err := sendIQ(client, recipient, "get", opkl)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
@ -487,7 +489,6 @@ func oxGetPublicKeyRing(client *xmpp.Client, recipient string) (*crypto.KeyRing,
|
|
|
|
|
|
|
|
|
|
func oxEncrypt(client *xmpp.Client, oxPrivKey *crypto.Key, recipient string,
|
|
|
|
|
keyRing *crypto.KeyRing, message string) (string, error) {
|
|
|
|
|
var oxCryptMessage OxCryptElement
|
|
|
|
|
var oxMessage OxMessageElement
|
|
|
|
|
privKeyRing, err := crypto.NewKeyRing(oxPrivKey)
|
|
|
|
|
if err != nil {
|
|
|
|
@ -501,13 +502,20 @@ func oxEncrypt(client *xmpp.Client, oxPrivKey *crypto.Key, recipient string,
|
|
|
|
|
_ = keyRing.AddKey(ownKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
oxCryptMessage.Xmlns = nsOx
|
|
|
|
|
oxCryptMessage.To.Jid = recipient
|
|
|
|
|
oxCryptMessage.Time.Stamp = time.Now().UTC().Format("2006-01-02T15:04:05Z")
|
|
|
|
|
oxCryptMessage.Rpad = getRpad()
|
|
|
|
|
oxCryptMessage.Payload.Body.Xmlns = nsJabberClient
|
|
|
|
|
oxCryptMessage.Payload.Body.Text = message
|
|
|
|
|
ocm, err := xml.Marshal(oxCryptMessage)
|
|
|
|
|
oxCryptMessage := etree.NewDocument()
|
|
|
|
|
oxCryptMessageSc := oxCryptMessage.CreateElement("signcrypt")
|
|
|
|
|
oxCryptMessageSc.CreateAttr("xmlns", nsOx)
|
|
|
|
|
oxCryptMessageScTo := oxCryptMessageSc.CreateElement("to")
|
|
|
|
|
oxCryptMessageScTo.CreateAttr("jid", recipient)
|
|
|
|
|
oxCryptMessageScTime := oxCryptMessageSc.CreateElement("time")
|
|
|
|
|
oxCryptMessageScTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z"))
|
|
|
|
|
oxCryptMessageScRpad := oxCryptMessageSc.CreateElement("rpad")
|
|
|
|
|
oxCryptMessageScRpad.CreateText(getRpad())
|
|
|
|
|
oxCryptMessageScPayload := oxCryptMessageSc.CreateElement("payload")
|
|
|
|
|
oxCryptMessageScPayloadBody := oxCryptMessageScPayload.CreateElement("body")
|
|
|
|
|
oxCryptMessageScPayloadBody.CreateAttr("xmlns", nsJabberClient)
|
|
|
|
|
oxCryptMessageScPayloadBody.CreateText(message)
|
|
|
|
|
ocm, err := oxCryptMessage.WriteToString()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "error", err
|
|
|
|
|
}
|
|
|
|
|