implement sealing for NullAEAD

This commit is contained in:
Lucas Clemente
2016-04-10 20:23:51 +02:00
parent ab14684299
commit 893704e38f
3 changed files with 26 additions and 0 deletions

View File

@@ -8,4 +8,5 @@ import (
// An AEAD implements QUIC's authenticated encryption and associated data
type AEAD interface {
Open(associatedData []byte, ciphertext io.Reader) (*bytes.Reader, error)
Seal(b *bytes.Buffer, associatedData []byte, r *bytes.Reader)
}

View File

@@ -6,6 +6,8 @@ import (
"errors"
"io"
"io/ioutil"
"github.com/lucas-clemente/quic-go/utils"
)
// NullAEAD handles not-yet encrypted packets
@@ -36,3 +38,17 @@ func (*NullAEAD) Open(associatedData []byte, r io.Reader) (*bytes.Reader, error)
}
return bytes.NewReader(ciphertext[12:]), nil
}
// Seal writes hash and ciphertext to the buffer
func (*NullAEAD) Seal(b *bytes.Buffer, associatedData []byte, r *bytes.Reader) {
plaintext, _ := ioutil.ReadAll(r)
hash := New128a()
hash.Write(associatedData)
hash.Write(plaintext)
high, low := hash.Sum128()
utils.WriteUint64(b, low)
utils.WriteUint32(b, uint32(high))
b.Write(plaintext)
}

View File

@@ -32,4 +32,13 @@ var _ = Describe("Crypto/NullAEAD", func() {
_, err := aead.Open(aad, bytes.NewReader(cipherText))
Expect(err).To(HaveOccurred())
})
It("seals", func() {
aad := []byte("All human beings are born free and equal in dignity and rights.")
plainText := []byte("They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.")
b := &bytes.Buffer{}
aead := &crypto.NullAEAD{}
aead.Seal(b, aad, bytes.NewReader(plainText))
Expect(b.Bytes()).To(Equal(append([]byte{0x98, 0x9b, 0x33, 0x3f, 0xe8, 0xde, 0x32, 0x5c, 0xa6, 0x7f, 0x9c, 0xf7}, []byte("They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.")...)))
})
})