katwalk

Crates.iokatwalk
lib.rskatwalk
version0.0.13
sourcesrc
created_at2020-11-17 00:50:48.990861
updated_at2024-09-23 08:06:45.705743
descriptionUtility 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
id313128
size201,219
Kris Kwiatkowski (kriskwiatkowski)

documentation

README

katwalk

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.

Supported schemes:

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

Example

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);

Used by

It is used by PQC library (here) for functional testing.

Status

Algorithms are added on "as needed" bases. Don't judge implementation, it needs major rewrite.

Commit count: 0

cargo fmt