Crates.io | katwalk |
lib.rs | katwalk |
version | 0.0.13 |
source | src |
created_at | 2020-11-17 00:50:48.990861 |
updated_at | 2024-09-23 08:06:45.705743 |
description | Utility to iterate over NIST KAT vectors. It allows to bind an action for each test vector supplied by calling code. Hence, making it possible to run KAT testing. This is work in prograess version!!! |
homepage | |
repository | |
max_upload_size | |
id | 313128 |
size | 201,219 |
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.