forked from quic-go/quic-go
implement sealing for NullAEAD
This commit is contained in:
@@ -8,4 +8,5 @@ import (
|
|||||||
// An AEAD implements QUIC's authenticated encryption and associated data
|
// An AEAD implements QUIC's authenticated encryption and associated data
|
||||||
type AEAD interface {
|
type AEAD interface {
|
||||||
Open(associatedData []byte, ciphertext io.Reader) (*bytes.Reader, error)
|
Open(associatedData []byte, ciphertext io.Reader) (*bytes.Reader, error)
|
||||||
|
Seal(b *bytes.Buffer, associatedData []byte, r *bytes.Reader)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
|
"github.com/lucas-clemente/quic-go/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NullAEAD handles not-yet encrypted packets
|
// 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
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,4 +32,13 @@ var _ = Describe("Crypto/NullAEAD", func() {
|
|||||||
_, err := aead.Open(aad, bytes.NewReader(cipherText))
|
_, err := aead.Open(aad, bytes.NewReader(cipherText))
|
||||||
Expect(err).To(HaveOccurred())
|
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.")...)))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user