···2828 // The hash used for HKDF.
2929 hash = sha256.New
3030 // The AEAD used for encryption/decryption.
3131- aead = chacha20poly1305.NewX
3131+ aead = chacha20poly1305.NewX
3232+ // The pseudorandom key generated by HKDF-Extract.
3333+ prk []byte
3434+)
3535+3636+const (
3237 aeadKeySize = chacha20poly1305.KeySize
3338 aeadNonceSize = chacha20poly1305.NonceSizeX
3434- // The pseudorandom key generated by HKDF-Extract.
3535- prk []byte
3639)
37403841// Set the main IKM for this module.
···5558// Derive *the* key for a given context, this is a deterministic function.
5659// The same key will be provided for the same context.
5760func DeriveKey(context Context) *Key {
5858- if len(prk) == 0 {
6161+ if len(prk) != sha256.Size {
5962 panic("keying: not initialized")
6063 }
6164···63666467 key := make([]byte, aeadKeySize)
6568 // This should never return an error, but if it does, panic.
6666- if _, err := r.Read(key); err != nil {
6969+ if n, err := r.Read(key); err != nil || n != aeadKeySize {
6770 panic(err)
6871 }
6972···92959396 // Generate a random nonce.
9497 nonce := make([]byte, aeadNonceSize)
9595- if _, err := rand.Read(nonce); err != nil {
9898+ if n, err := rand.Read(nonce); err != nil || n != aeadNonceSize {
9699 panic(err)
97100 }
98101