Cybersecurity-Projects/PROJECTS/intermediate/credential-rotation-enforcer/spec/unit/crypto/aead_spec.cr

51 lines
1.4 KiB
Crystal

# ===================
# ©AngelaMos | 2026
# aead_spec.cr
# ===================
require "../../spec_helper"
require "../../../src/cre/crypto/aead"
require "../../../src/cre/crypto/random"
describe CRE::Crypto::Aead do
it "round-trips AES-256-GCM with AAD" do
key = CRE::Crypto::Random.bytes(32)
plaintext = "secret value 123".to_slice
aad = "tenant=t1|cred=c1|ver=v1".to_slice
ct, nonce, tag = CRE::Crypto::Aead.encrypt(plaintext, key, aad)
decrypted = CRE::Crypto::Aead.decrypt(ct, key, aad, nonce, tag)
decrypted.should eq plaintext
end
it "fails to decrypt with wrong AAD" do
key = CRE::Crypto::Random.bytes(32)
plaintext = "secret".to_slice
aad = "right".to_slice
ct, nonce, tag = CRE::Crypto::Aead.encrypt(plaintext, key, aad)
expect_raises(CRE::Crypto::Aead::Error) do
CRE::Crypto::Aead.decrypt(ct, key, "wrong".to_slice, nonce, tag)
end
end
it "fails to decrypt with tampered ciphertext" do
key = CRE::Crypto::Random.bytes(32)
plaintext = "abc-def".to_slice
aad = "x".to_slice
ct, nonce, tag = CRE::Crypto::Aead.encrypt(plaintext, key, aad)
ct[0] ^= 0x01_u8
expect_raises(CRE::Crypto::Aead::Error) do
CRE::Crypto::Aead.decrypt(ct, key, aad, nonce, tag)
end
end
it "rejects keys of incorrect size" do
bad_key = Bytes.new(16)
expect_raises(ArgumentError) do
CRE::Crypto::Aead.encrypt("x".to_slice, bad_key, "a".to_slice)
end
end
end