summaryrefslogtreecommitdiffstats
path: root/yamn/encoder/encoder.go
diff options
context:
space:
mode:
Diffstat (limited to 'yamn/encoder/encoder.go')
-rw-r--r--yamn/encoder/encoder.go11
1 files changed, 6 insertions, 5 deletions
diff --git a/yamn/encoder/encoder.go b/yamn/encoder/encoder.go
index 5eacdf3..3b595b1 100644
--- a/yamn/encoder/encoder.go
+++ b/yamn/encoder/encoder.go
@@ -304,19 +304,20 @@ func slotData(kind byte, packetID, aesKey, info, tag []byte) []byte {
}
func encryptedHeader(key remailerKey, data []byte) []byte {
- var recipient, sender [32]byte
+ var recipient [32]byte
copy(recipient[:], key.publicKey)
- if _, err := io.ReadFull(rand.Reader, sender[:]); err != nil {
+ senderPublic, senderSecret, err := box.GenerateKey(rand.Reader)
+ if err != nil {
panic(err)
}
var nonce [24]byte
if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil {
panic(err)
}
- sealed := box.Seal(nil, data, &nonce, &recipient, &sender)
+ sealed := box.Seal(nil, data, &nonce, &recipient, senderSecret)
b := make([]byte, headerBytes)
copy(b, key.keyID)
- copy(b[16:], sender[:])
+ copy(b[16:], senderPublic[:])
copy(b[48:], nonce[:])
copy(b[72:], sealed)
return b
@@ -370,7 +371,7 @@ func deterministic(p []byte, keys, ivs [][]byte, chainLen, hop int) {
for slot := top; slot <= bottom; slot++ {
fake := make([]byte, headerBytes)
use := bottom
- for i := bottom - slot + hop; i >= 0; i-- {
+ for i := bottom - slot + hop; i >= hop; i-- {
copy(fake, aesCTR(fake, keys[i], seqIV(ivs[i], use)))
use--
}