#testing #vector #nist #algorithm #kat #iterate #action

katwalk

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!!!

13 releases

0.0.13 Sep 23, 2024
0.0.12 Nov 14, 2023
0.0.11 Oct 14, 2023
0.0.10 Jul 19, 2022
0.0.1 Nov 17, 2020

#520 in Cryptography

Download history 52/week @ 2024-07-28 111/week @ 2024-08-04 161/week @ 2024-08-25 118/week @ 2024-09-01 47/week @ 2024-09-08 6/week @ 2024-09-15 323/week @ 2024-09-22 135/week @ 2024-09-29 67/week @ 2024-10-06 71/week @ 2024-10-13 78/week @ 2024-10-20 172/week @ 2024-10-27 91/week @ 2024-11-03 52/week @ 2024-11-10

400 downloads per month

MIT license

96KB
834 lines

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.

Dependencies