// Encrypt encryptes the given UID message. func (msg *Message) Encrypt() (UIDHash, UIDIndex []byte, UIDMessageEncrypted string) { Message := msg.JSON() // Calculate hash: UIDHash = sha256(UIDMessage) UIDHash = cipher.SHA256(Message) // Calculate hash: UIDIndex = sha256(UIDHash) UIDIndex = cipher.SHA256(UIDHash) // Encrypt UIDMessage: UIDMessageEncrypted = UIDIndex | nonce | aes_ctr(nonce, key=UIDHash, UIDMessage) enc := cipher.AES256CTREncrypt(UIDHash, Message, cipher.RandReader) uidEnc := make([]byte, sha256.Size+len(enc)) copy(uidEnc, UIDIndex) copy(uidEnc[sha256.Size:], enc) UIDMessageEncrypted = base64.Encode(uidEnc) return }
func (msg *Message) sessionAnchor( key []byte, mixaddress, nymaddress string, rand io.Reader, ) (sessionAnchor, sessionAnchorHash, pubKeyHash, privateKey string, err error) { var sa SessionAnchor sa.MIXADDRESS = mixaddress sa.NYMADDRESS = nymaddress sa.PFKEYS = make([]KeyEntry, 1) if err := sa.PFKEYS[0].InitDHKey(rand); err != nil { return "", "", "", "", err } jsn := sa.json() hash := cipher.SHA512(jsn) // SESSIONANCHOR = AES256_CTR(key=UIDMessage.UIDContent.SIGKEY.HASH, SessionAnchor) enc := base64.Encode(cipher.AES256CTREncrypt(key[:32], jsn, rand)) return enc, base64.Encode(hash), sa.PFKEYS[0].HASH, base64.Encode(sa.PFKEYS[0].PrivateKey32()[:]), nil }