1 1.1 riastrad 2 1.1 riastrad #define TEST_NAME "keygen" 3 1.1 riastrad #include "cmptest.h" 4 1.1 riastrad 5 1.1 riastrad typedef struct KeygenTV_ { 6 1.1 riastrad void (*fn)(unsigned char *k); 7 1.1 riastrad size_t key_len; 8 1.1 riastrad } KeygenTV; 9 1.1 riastrad 10 1.1 riastrad static void 11 1.1 riastrad tv_keygen(void) 12 1.1 riastrad { 13 1.1 riastrad static const KeygenTV tvs[] = { 14 1.1 riastrad { crypto_auth_keygen, crypto_auth_KEYBYTES }, 15 1.1 riastrad { crypto_auth_hmacsha256_keygen, crypto_auth_hmacsha256_KEYBYTES }, 16 1.1 riastrad { crypto_aead_aes256gcm_keygen, crypto_aead_aes256gcm_KEYBYTES }, 17 1.1 riastrad { crypto_auth_hmacsha512_keygen, crypto_auth_hmacsha512_KEYBYTES }, 18 1.1 riastrad { crypto_auth_hmacsha512256_keygen, crypto_auth_hmacsha512256_KEYBYTES }, 19 1.1 riastrad { crypto_generichash_keygen, crypto_generichash_KEYBYTES }, 20 1.1 riastrad { crypto_generichash_blake2b_keygen, crypto_generichash_blake2b_KEYBYTES }, 21 1.1 riastrad { crypto_kdf_keygen, crypto_kdf_KEYBYTES }, 22 1.1 riastrad { crypto_onetimeauth_keygen, crypto_onetimeauth_KEYBYTES }, 23 1.1 riastrad { crypto_onetimeauth_poly1305_keygen, crypto_onetimeauth_poly1305_KEYBYTES }, 24 1.1 riastrad { crypto_aead_chacha20poly1305_ietf_keygen, crypto_aead_chacha20poly1305_ietf_KEYBYTES }, 25 1.1 riastrad { crypto_aead_chacha20poly1305_keygen, crypto_aead_chacha20poly1305_KEYBYTES }, 26 1.1 riastrad { crypto_aead_chacha20poly1305_ietf_keygen, crypto_aead_chacha20poly1305_ietf_KEYBYTES }, 27 1.1 riastrad { crypto_aead_xchacha20poly1305_ietf_keygen, crypto_aead_xchacha20poly1305_ietf_KEYBYTES }, 28 1.1 riastrad { crypto_secretbox_xsalsa20poly1305_keygen, crypto_secretbox_xsalsa20poly1305_KEYBYTES }, 29 1.1 riastrad { crypto_secretbox_keygen, crypto_secretbox_KEYBYTES }, 30 1.1 riastrad { crypto_secretstream_xchacha20poly1305_keygen, crypto_secretstream_xchacha20poly1305_KEYBYTES }, 31 1.1 riastrad { crypto_shorthash_keygen, crypto_shorthash_KEYBYTES }, 32 1.1 riastrad { crypto_stream_keygen, crypto_stream_KEYBYTES }, 33 1.1 riastrad { crypto_stream_chacha20_keygen, crypto_stream_chacha20_KEYBYTES }, 34 1.1 riastrad { crypto_stream_chacha20_ietf_keygen, crypto_stream_chacha20_ietf_KEYBYTES }, 35 1.1 riastrad { crypto_stream_salsa20_keygen, crypto_stream_salsa20_KEYBYTES }, 36 1.1 riastrad { crypto_stream_xsalsa20_keygen, crypto_stream_xsalsa20_KEYBYTES } 37 1.1 riastrad }; 38 1.1 riastrad const KeygenTV *tv; 39 1.1 riastrad unsigned char *key; 40 1.1 riastrad size_t i; 41 1.1 riastrad int j; 42 1.1 riastrad 43 1.1 riastrad for (i = 0; i < (sizeof tvs) / (sizeof tvs[0]); i++) { 44 1.1 riastrad tv = &tvs[i]; 45 1.1 riastrad key = (unsigned char *) sodium_malloc(tv->key_len); 46 1.1 riastrad key[tv->key_len - 1U] = 0; 47 1.1 riastrad for (j = 0; j < 10000; j++) { 48 1.1 riastrad tv->fn(key); 49 1.1 riastrad if (key[tv->key_len - 1U] != 0) { 50 1.1 riastrad break; 51 1.1 riastrad } 52 1.1 riastrad } 53 1.1 riastrad sodium_free(key); 54 1.1 riastrad if (j >= 10000) { 55 1.1 riastrad printf("Buffer underflow with test vector %u\n", (unsigned int) i); 56 1.1 riastrad } 57 1.1 riastrad } 58 1.1 riastrad printf("tv_keygen: ok\n"); 59 1.1 riastrad } 60 1.1 riastrad 61 1.1 riastrad int 62 1.1 riastrad main(void) 63 1.1 riastrad { 64 1.1 riastrad tv_keygen(); 65 1.1 riastrad 66 1.1 riastrad return 0; 67 1.1 riastrad } 68