Files
sm4-gcm/src/lib.rs
2023-09-03 23:21:10 +08:00

30 lines
1.4 KiB
Rust

pub use encryptor::Sm4GcmStreamEncryptor;
pub use crate::encryptor::sm4_gcm_aad_encrypt;
pub use crate::encryptor::sm4_gcm_encrypt;
mod util;
mod encryptor;
mod decryptor;
// Test vectors are all from BC
#[test]
fn test_encrypt() {
let data = vec![
([0u8; 16], [0u8; 12], &[][..], &b"A"[..], "3c0a0922976fa15e835bc96750e730d967"),
([0u8; 16], [0u8; 12], &[][..], &b"hello world"[..], "1587c6137e306fed6a6a5f49539b6dd6fe2b7872c3279636db07c2"),
([0u8; 16], [0xffu8; 12], &[][..], &b"Hello World!"[..], "cba3523bdf74096f3de1f9160a5adb7bf385dea4d50c910e663ec75a"),
([0xffu8; 16], [0xffu8; 12], &[][..], &b"Hello World!"[..], "99eb1206b5b2a9f9c7d7ec4a81de507f5d79938a10ccd91da68d2fb1"),
([0xffu8; 16], [0xffu8; 12], &[0xaau8, 0xbbu8, 0xccu8][..], &b"Hello World!"[..], "99eb1206b5b2a9f9c7d7ec4a7be091388b3049363189e64a47d20c19"),
([0u8; 16], [0u8; 12], &[][..],
&b"Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!"[..],
"3587c6137e304fed6a6a5fc0f78e01e5ea4b604843929848601d4b1600e35c1\
987a30fd521f6b8f66e950cfb735ca19ab45bd8d050a06b2d560a5927a5611f76\
82cd8c6db56ab52dae82a6db190c54ff8299ac7d339f92db"),
];
for (key, nonce, aad, message, expected) in data {
let encrypted = hex::encode(sm4_gcm_aad_encrypt(key, &nonce, aad, message));
assert_eq!(expected, &encrypted);
}
}