keygen.c 2.6 KB

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