keygen.c revision 1.1 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