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