Utility to iterate over NIST Known Answer Tests vectors from CAVP. It allows to bind an action for each test vector supplied by calling code.
Algorithm | NIST Specification name |
---|---|
SHA2 | FIPS-180-4 |
SHA3 | FIPS-202 |
SHAKE | FIPS-202 |
HMAC | FIPS-198 |
Diffie-Hellman | SP 800-56A |
KDF | SP 800-108 |
DRBG | SP 800-90A (without Prediction Resistance) |
NIST PQC | All KEM & Signature schemes |
Here below an example of usage for one vector for SHA3 KAT (FIPS 202).
// Vector copy pasted from NIST specs
let ex = "
Len = 0
Msg = 00
MD = 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7";
// Some variables
let mut count = 0;
// Create an iterator for HASH algorithm
let r = KatReader::new(
std::io::BufReader::new(Cursor::new(ex)),
AlgType::AlgHash, 1);
// Iterate over all KATS. The ``el`` will contain fields
// parsed from KAT files. Those fields are used as input
// to cryptographic implementation and expected output.
for el in r {
assert_eq!(el.hash.md.len(), 28);
assert_eq!(el.hash.len, 0);
assert_eq!(el.hash.msg, [0x00]);
assert_eq!(el.hash.md[0..5], [0x6B, 0x4E, 0x03, 0x42, 0x36]);
count+=1;
}
assert_eq!(count, 1);
It is used by PQC library (here) for functional testing.
Algorithms are added on "as needed" bases. Don't judge implementation, it needs major rewrite.