route/vendor/github.com/lucas-clemente/quic-go/internal/crypto/aesgcm_aead_test.go

85 lines
2.3 KiB
Go

package crypto
import (
"crypto/rand"
"fmt"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("AES-GCM", func() {
var (
alice, bob AEAD
keyAlice, keyBob, ivAlice, ivBob []byte
)
BeforeEach(func() {
ivAlice = make([]byte, 12)
ivBob = make([]byte, 12)
})
// 16 bytes for TLS_AES_128_GCM_SHA256
// 32 bytes for TLS_AES_256_GCM_SHA384
for _, ks := range []int{16, 32} {
keySize := ks
Context(fmt.Sprintf("with %d byte keys", keySize), func() {
BeforeEach(func() {
keyAlice = make([]byte, keySize)
keyBob = make([]byte, keySize)
rand.Reader.Read(keyAlice)
rand.Reader.Read(keyBob)
rand.Reader.Read(ivAlice)
rand.Reader.Read(ivBob)
var err error
alice, err = NewAEADAESGCM(keyBob, keyAlice, ivBob, ivAlice)
Expect(err).ToNot(HaveOccurred())
bob, err = NewAEADAESGCM(keyAlice, keyBob, ivAlice, ivBob)
Expect(err).ToNot(HaveOccurred())
})
It("seals and opens", func() {
b := alice.Seal(nil, []byte("foobar"), 42, []byte("aad"))
text, err := bob.Open(nil, b, 42, []byte("aad"))
Expect(err).ToNot(HaveOccurred())
Expect(text).To(Equal([]byte("foobar")))
})
It("seals and opens reverse", func() {
b := bob.Seal(nil, []byte("foobar"), 42, []byte("aad"))
text, err := alice.Open(nil, b, 42, []byte("aad"))
Expect(err).ToNot(HaveOccurred())
Expect(text).To(Equal([]byte("foobar")))
})
It("has the proper length", func() {
b := bob.Seal(nil, []byte("foobar"), 42, []byte("aad"))
Expect(b).To(HaveLen(6 + bob.Overhead()))
})
It("fails with wrong aad", func() {
b := alice.Seal(nil, []byte("foobar"), 42, []byte("aad"))
_, err := bob.Open(nil, b, 42, []byte("aad2"))
Expect(err).To(HaveOccurred())
})
It("rejects wrong key and iv sizes", func() {
e := "AES-GCM: expected 12 byte IVs"
var err error
_, err = NewAEADAESGCM(keyBob, keyAlice, ivBob[1:], ivAlice)
Expect(err).To(MatchError(e))
_, err = NewAEADAESGCM(keyBob, keyAlice, ivBob, ivAlice[1:])
Expect(err).To(MatchError(e))
})
})
}
It("errors when an invalid key size is used", func() {
keyAlice = make([]byte, 17)
keyBob = make([]byte, 17)
_, err := NewAEADAESGCM(keyBob, keyAlice, ivBob, ivAlice)
Expect(err).To(MatchError("crypto/aes: invalid key size 17"))
})
})