boring_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. //go:build boringcrypto
  2. // +build boringcrypto
  3. package noiseutil
  4. import (
  5. "encoding/hex"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. // Ensure NewGCMTLS validates the nonce is non-repeating
  10. func TestNewGCMTLS(t *testing.T) {
  11. // Test Case 16 from GCM Spec:
  12. // - (now dead link): http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
  13. // - as listed in boringssl tests: https://github.com/google/boringssl/blob/fips-20220613/crypto/cipher_extra/test/cipher_tests.txt#L412-L418
  14. key, _ := hex.DecodeString("feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308")
  15. iv, _ := hex.DecodeString("cafebabefacedbaddecaf888")
  16. plaintext, _ := hex.DecodeString("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39")
  17. aad, _ := hex.DecodeString("feedfacedeadbeeffeedfacedeadbeefabaddad2")
  18. expected, _ := hex.DecodeString("522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662")
  19. expectedTag, _ := hex.DecodeString("76fc6ece0f4e1768cddf8853bb2d551b")
  20. expected = append(expected, expectedTag...)
  21. var keyArray [32]byte
  22. copy(keyArray[:], key)
  23. c := CipherAESGCM.Cipher(keyArray)
  24. aead := c.(aeadCipher).AEAD
  25. dst := aead.Seal([]byte{}, iv, plaintext, aad)
  26. assert.Equal(t, expected, dst)
  27. // We expect this to fail since we are re-encrypting with a repeat IV
  28. assert.PanicsWithError(t, "boringcrypto: EVP_AEAD_CTX_seal failed", func() {
  29. dst = aead.Seal([]byte{}, iv, plaintext, aad)
  30. })
  31. }