From 644b1f809d8b1d3b9e99563533c186591ce0f5cf Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sat, 23 Apr 2022 23:40:15 +0200 Subject: [PATCH 1/3] Use shorter random string for resource. --- CHANGELOG.md | 3 +++ helpers.go | 10 ++++++++++ main.go | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 465079d..e525bc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ ### Added - Experimental support for Ox (OpenPGP for XMPP) encryption. +### Changed +- Use shorter random ID for resource. + ## [v0.3.0] 2022-03-21 ### Added - Added support for joining password protected MUCs. diff --git a/helpers.go b/helpers.go index f97c17c..62ea665 100644 --- a/helpers.go +++ b/helpers.go @@ -49,3 +49,13 @@ func getID() string { id := fmt.Sprintf("%x-%x-%x", b[0:4], b[4:8], b[8:]) return id } + +func getShortID() string { + b := make([]byte, 4) + _, err := rand.Read(b) + if err != nil { + log.Fatal(err) + } + id := fmt.Sprintf("%x", b[0:4]) + return id +} diff --git a/main.go b/main.go index 6c83f2e..ef2854e 100644 --- a/main.go +++ b/main.go @@ -189,7 +189,7 @@ func main() { resource = *flagResource } else if resource == "" { // Use "go-sendxmpp" plus a random string if no other resource is specified - resource = "go-sendxmpp." + getID() + resource = "go-sendxmpp." + getShortID() } if (*flagHttpUpload != "") && (*flagInteractive || (*flagMessageFile != "")) { From 28c5884044813ae0ed3df467287121ae77acc76f Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sat, 23 Apr 2022 23:59:19 +0200 Subject: [PATCH 2/3] Change from encoding/xml to etree. --- iqstructs.go | 34 ---------------------------------- ox.go | 36 ++++++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 48 deletions(-) diff --git a/iqstructs.go b/iqstructs.go index 5276655..c9196dd 100644 --- a/iqstructs.go +++ b/iqstructs.go @@ -30,28 +30,6 @@ type OxMessageElement struct { } // Created with https://github.com/miku/zek -type OxCryptElement struct { - XMLName xml.Name `xml:"signcrypt"` - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - To struct { - Text string `xml:",chardata"` - Jid string `xml:"jid,attr"` - } `xml:"to"` - Time struct { - Text string `xml:",chardata"` - Stamp string `xml:"stamp,attr"` - } `xml:"time"` - Rpad string `xml:"rpad"` - Payload struct { - Text string `xml:",chardata"` - Body struct { - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - } `xml:"body"` - } `xml:"payload"` -} - // Created with https://github.com/miku/zek type OxPublicKeysList struct { XMLName xml.Name `xml:"pubsub"` @@ -76,18 +54,6 @@ type OxPublicKeysList struct { } `xml:"items"` } -// Created with https://github.com/miku/zek -type IQPubsubRequest struct { - XMLName xml.Name `xml:"pubsub"` - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - Items struct { - Text string `xml:",chardata"` - Node string `xml:"node,attr"` - MaxItems string `xml:"max_items,attr"` - } `xml:"items"` -} - // Created with https://github.com/miku/zek type IQDiscoItemsType struct { XMLName xml.Name `xml:"query"` diff --git a/ox.go b/ox.go index fcf0908..b6e25ea 100644 --- a/ox.go +++ b/ox.go @@ -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() + oxCryptMessagePs := oxCryptMessage.CreateElement("pubsub") + oxCryptMessagePs.CreateAttr("xmlns", nsOx) + oxCryptMessagePsTo := oxCryptMessagePs.CreateElement("to") + oxCryptMessagePsTo.CreateAttr("jid", recipient) + oxCryptMessagePsTime := oxCryptMessagePs.CreateElement("time") + oxCryptMessagePsTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z")) + oxCryptMessagePsRpad := oxCryptMessagePs.CreateElement("rpad") + oxCryptMessagePsRpad.CreateText(getRpad()) + oxCryptMessagePsPayload := oxCryptMessagePs.CreateElement("payload") + oxCryptMessagePsPayloadBody := oxCryptMessagePsPayload.CreateElement("body") + oxCryptMessagePsPayloadBody.CreateAttr("xmlns", nsJabberClient) + oxCryptMessagePsPayloadBody.CreateText(message) + ocm, err := oxCryptMessage.WriteToString() if err != nil { return "error", err } From dd4a9c9bede7f87dc89fc0ed3be441743f0bf2e5 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sun, 24 Apr 2022 00:33:17 +0200 Subject: [PATCH 3/3] Fix Ox encryption. --- ox.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ox.go b/ox.go index b6e25ea..88dbcc8 100644 --- a/ox.go +++ b/ox.go @@ -503,18 +503,18 @@ func oxEncrypt(client *xmpp.Client, oxPrivKey *crypto.Key, recipient string, } } oxCryptMessage := etree.NewDocument() - oxCryptMessagePs := oxCryptMessage.CreateElement("pubsub") - oxCryptMessagePs.CreateAttr("xmlns", nsOx) - oxCryptMessagePsTo := oxCryptMessagePs.CreateElement("to") - oxCryptMessagePsTo.CreateAttr("jid", recipient) - oxCryptMessagePsTime := oxCryptMessagePs.CreateElement("time") - oxCryptMessagePsTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z")) - oxCryptMessagePsRpad := oxCryptMessagePs.CreateElement("rpad") - oxCryptMessagePsRpad.CreateText(getRpad()) - oxCryptMessagePsPayload := oxCryptMessagePs.CreateElement("payload") - oxCryptMessagePsPayloadBody := oxCryptMessagePsPayload.CreateElement("body") - oxCryptMessagePsPayloadBody.CreateAttr("xmlns", nsJabberClient) - oxCryptMessagePsPayloadBody.CreateText(message) + 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