X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ffips-186-rng-test.cpp;h=08a166597afad49bf32f4d54cb6ab29629b59520;hb=b34e3f4d38b640d7d542c293718c9b146cdcce0a;hp=b0a677b27e2f8a820191d5dbd6df83b70d032540;hpb=3e9e9af1e0688f1ec71f5a0489f7be8202094f39;p=asdcplib.git diff --git a/src/fips-186-rng-test.cpp b/src/fips-186-rng-test.cpp index b0a677b..08a1665 100755 --- a/src/fips-186-rng-test.cpp +++ b/src/fips-186-rng-test.cpp @@ -39,47 +39,52 @@ using namespace Kumu; int main(int argc, const char** argv) { - if ( argc != 3 ) + if ( argc != 5 ) { - fprintf(stderr, "USAGE: fips-186-test \n"); + fprintf(stderr, "USAGE: fips-186-test \n"); return 2; } - byte_t XKey_buf[SHA_DIGEST_LENGTH]; - byte_t X_test_buf[SHA_DIGEST_LENGTH*2]; - byte_t X_buf[SHA_DIGEST_LENGTH*2]; + ui32_t const X_buf_len = 1024; + byte_t XKey_buf[X_buf_len]; + byte_t X_test_buf[X_buf_len]; ui32_t char_count; - if ( hex2bin(argv[1], XKey_buf, SHA_DIGEST_LENGTH, &char_count) != 0 ) + char* end = 0; + ui32_t rounds = strtol(argv[1], &end, 10); + ui32_t B = strtol(argv[2], &end, 10) / 8; + + if ( hex2bin(argv[3], XKey_buf, X_buf_len, &char_count) != 0 ) { fprintf(stderr, "Error parsing value\n"); return 3; } - if ( char_count != SHA_DIGEST_LENGTH ) + if ( char_count != B ) { - fprintf(stderr, "Incorrect length for value (expecting 40 hexadecimal characters)\n"); + fprintf(stderr, "Incorrect length for value (expecting %d decoded bytes)\n", B); return 3; } - if ( hex2bin(argv[2], X_test_buf, SHA_DIGEST_LENGTH*2, &char_count) != 0 ) + if ( hex2bin(argv[4], X_test_buf, X_buf_len, &char_count) != 0 ) { - fprintf(stderr, "Error parsing value\n"); + fprintf(stderr, "Error parsing value\n"); return 3; } - if ( char_count != (SHA_DIGEST_LENGTH * 2) ) - { - fprintf(stderr, "Incorrect length for value (expecting 80 hexadecimal characters)\n"); - return 3; - } + ui32_t const meg = 1024*1024; + ui32_t out_size = char_count; + byte_t X_buf[meg]; + ui32_t fill_size = rounds * 20; + assert(fill_size < meg); + Gen_FIPS_186_Value(XKey_buf, B, X_buf, fill_size); - Gen_FIPS_186_Value(XKey_buf, SHA_DIGEST_LENGTH, X_buf, SHA_DIGEST_LENGTH*2); + byte_t* test_key = &X_buf[fill_size - out_size]; - if ( memcmp(X_buf, X_test_buf, SHA_DIGEST_LENGTH*2) != 0 ) + if ( memcmp(test_key, X_test_buf, char_count) != 0 ) { fprintf(stderr, "Test vector value does not match:\n"); - hexdump(X_buf, SHA_DIGEST_LENGTH*2); + hexdump(test_key, char_count); return 4; }