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