Skip to content

kriskwiatkowski/katwalk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages