mirror of
https://github.com/refraction-networking/uquic.git
synced 2025-04-02 19:57:35 +03:00
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package handshake
|
|
|
|
import (
|
|
"crypto/rand"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
type zeroReader struct{}
|
|
|
|
func (r *zeroReader) Read(b []byte) (int, error) {
|
|
for i := range b {
|
|
b[i] = 0
|
|
}
|
|
return len(b), nil
|
|
}
|
|
|
|
var _ = Describe("Token Protector", func() {
|
|
var tp tokenProtector
|
|
|
|
BeforeEach(func() {
|
|
var err error
|
|
tp, err = newTokenProtector(rand.Reader)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
|
|
It("uses the random source", func() {
|
|
tp1, err := newTokenProtector(&zeroReader{})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
tp2, err := newTokenProtector(&zeroReader{})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
t1, err := tp1.NewToken([]byte("foo"))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
t2, err := tp2.NewToken([]byte("foo"))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(t1).To(Equal(t2))
|
|
tp3, err := newTokenProtector(rand.Reader)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
t3, err := tp3.NewToken([]byte("foo"))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(t3).ToNot(Equal(t1))
|
|
})
|
|
|
|
It("encodes and decodes tokens", func() {
|
|
token, err := tp.NewToken([]byte("foobar"))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(token).ToNot(ContainSubstring("foobar"))
|
|
decoded, err := tp.DecodeToken(token)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(decoded).To(Equal([]byte("foobar")))
|
|
})
|
|
|
|
It("fails deconding invalid tokens", func() {
|
|
token, err := tp.NewToken([]byte("foobar"))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
token = token[1:] // remove the first byte
|
|
_, err = tp.DecodeToken(token)
|
|
Expect(err).To(HaveOccurred())
|
|
Expect(err.Error()).To(ContainSubstring("message authentication failed"))
|
|
})
|
|
|
|
It("errors when decoding too short tokens", func() {
|
|
_, err := tp.DecodeToken([]byte("foobar"))
|
|
Expect(err).To(MatchError("token too short: 6"))
|
|
})
|
|
})
|