Home | History | Annotate | Line # | Download | only in default
      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