generichash3.c 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #define TEST_NAME "generichash3"
  2. #include "cmptest.h"
  3. int
  4. main(void)
  5. {
  6. #define MAXLEN 64
  7. crypto_generichash_blake2b_state st;
  8. unsigned char salt[crypto_generichash_blake2b_SALTBYTES]
  9. = { '5', 'b', '6', 'b', '4', '1', 'e', 'd',
  10. '9', 'b', '3', '4', '3', 'f', 'e', '0' };
  11. unsigned char personal[crypto_generichash_blake2b_PERSONALBYTES]
  12. = { '5', '1', '2', '6', 'f', 'b', '2', 'a',
  13. '3', '7', '4', '0', '0', 'd', '2', 'a' };
  14. unsigned char in[MAXLEN];
  15. unsigned char out[crypto_generichash_blake2b_BYTES_MAX];
  16. unsigned char k[crypto_generichash_blake2b_KEYBYTES_MAX];
  17. size_t h;
  18. size_t i;
  19. size_t j;
  20. assert(crypto_generichash_blake2b_statebytes() >= sizeof st);
  21. for (h = 0; h < crypto_generichash_blake2b_KEYBYTES_MAX; ++h) {
  22. k[h] = (unsigned char) h;
  23. }
  24. for (i = 0; i < MAXLEN; ++i) {
  25. in[i] = (unsigned char) i;
  26. crypto_generichash_blake2b_init_salt_personal(
  27. &st, k, 1 + i % crypto_generichash_blake2b_KEYBYTES_MAX,
  28. 1 + i % crypto_generichash_blake2b_BYTES_MAX, salt, personal);
  29. crypto_generichash_blake2b_update(&st, in, (unsigned long long) i);
  30. crypto_generichash_blake2b_final(
  31. &st, out, 1 + i % crypto_generichash_blake2b_BYTES_MAX);
  32. for (j = 0; j < 1 + i % crypto_generichash_blake2b_BYTES_MAX; ++j) {
  33. printf("%02x", (unsigned int) out[j]);
  34. }
  35. printf("\n");
  36. }
  37. memset(out, 0, sizeof out);
  38. crypto_generichash_blake2b_init_salt_personal(
  39. &st, k, 0U, crypto_generichash_blake2b_BYTES_MAX, salt, personal);
  40. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  41. crypto_generichash_blake2b_final(&st, out,
  42. crypto_generichash_blake2b_BYTES_MAX);
  43. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  44. printf("%02x", (unsigned int) out[j]);
  45. }
  46. printf("\n");
  47. memset(out, 0, sizeof out);
  48. crypto_generichash_blake2b_init_salt_personal(
  49. &st, NULL, 1U, crypto_generichash_blake2b_BYTES_MAX, salt, personal);
  50. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  51. crypto_generichash_blake2b_final(&st, out,
  52. crypto_generichash_blake2b_BYTES_MAX);
  53. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  54. printf("%02x", (unsigned int) out[j]);
  55. }
  56. printf("\n");
  57. memset(out, 0, sizeof out);
  58. crypto_generichash_blake2b_init_salt_personal(
  59. &st, k, crypto_generichash_blake2b_KEYBYTES_MAX,
  60. crypto_generichash_blake2b_BYTES_MAX, NULL, personal);
  61. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  62. crypto_generichash_blake2b_final(&st, out,
  63. crypto_generichash_blake2b_BYTES_MAX);
  64. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  65. printf("%02x", (unsigned int) out[j]);
  66. }
  67. printf("\n");
  68. memset(out, 0, sizeof out);
  69. crypto_generichash_blake2b_init_salt_personal(
  70. &st, k, crypto_generichash_blake2b_KEYBYTES_MAX,
  71. crypto_generichash_blake2b_BYTES_MAX, salt, NULL);
  72. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  73. crypto_generichash_blake2b_final(
  74. &st, out, crypto_generichash_blake2b_BYTES_MAX);
  75. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  76. printf("%02x", (unsigned int) out[j]);
  77. }
  78. printf("\n");
  79. memset(out, 0, sizeof out);
  80. crypto_generichash_blake2b_salt_personal(
  81. out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN,
  82. k, 0U, salt, personal);
  83. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  84. printf("%02x", (unsigned int) out[j]);
  85. }
  86. printf("\n");
  87. memset(out, 0, sizeof out);
  88. crypto_generichash_blake2b_salt_personal(
  89. out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN,
  90. NULL, 0U, salt, personal);
  91. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  92. printf("%02x", (unsigned int) out[j]);
  93. }
  94. printf("\n");
  95. memset(out, 0, sizeof out);
  96. crypto_generichash_blake2b_salt_personal(
  97. out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN,
  98. k, crypto_generichash_blake2b_KEYBYTES_MAX, salt, personal);
  99. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  100. printf("%02x", (unsigned int) out[j]);
  101. }
  102. printf("\n");
  103. memset(out, 0, sizeof out);
  104. crypto_generichash_blake2b_salt_personal(
  105. out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN,
  106. k, crypto_generichash_blake2b_KEYBYTES_MAX, NULL, personal);
  107. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  108. printf("%02x", (unsigned int) out[j]);
  109. }
  110. printf("\n");
  111. memset(out, 0, sizeof out);
  112. crypto_generichash_blake2b_salt_personal(
  113. out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN,
  114. k, crypto_generichash_blake2b_KEYBYTES_MAX, salt, NULL);
  115. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  116. printf("%02x", (unsigned int) out[j]);
  117. }
  118. printf("\n");
  119. assert(crypto_generichash_blake2b_salt_personal
  120. (NULL, 0,
  121. in, (unsigned long long) sizeof in,
  122. k, sizeof k, NULL, NULL) == -1);
  123. assert(crypto_generichash_blake2b_salt_personal
  124. (NULL, crypto_generichash_BYTES_MAX + 1,
  125. in, (unsigned long long) sizeof in,
  126. k, sizeof k, NULL, NULL) == -1);
  127. assert(crypto_generichash_blake2b_salt_personal
  128. (NULL, (unsigned long long) sizeof in,
  129. in, (unsigned long long) sizeof in,
  130. k, crypto_generichash_KEYBYTES_MAX + 1, NULL, NULL) == -1);
  131. crypto_generichash_blake2b_init_salt_personal(&st, NULL, 0U, crypto_generichash_BYTES,
  132. NULL, personal);
  133. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  134. crypto_generichash_blake2b_final(&st, out, crypto_generichash_blake2b_BYTES_MAX);
  135. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  136. printf("%02x", (unsigned int) out[j]);
  137. }
  138. printf("\n");
  139. crypto_generichash_blake2b_init_salt_personal(&st, NULL, 0U, crypto_generichash_BYTES,
  140. salt, NULL);
  141. crypto_generichash_blake2b_update(&st, in, MAXLEN);
  142. crypto_generichash_blake2b_final(&st, out, crypto_generichash_blake2b_BYTES_MAX);
  143. for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) {
  144. printf("%02x", (unsigned int) out[j]);
  145. }
  146. printf("\n");
  147. assert(crypto_generichash_blake2b_init_salt_personal
  148. (&st, k, sizeof k, 0, NULL, NULL) == -1);
  149. assert(crypto_generichash_blake2b_init_salt_personal
  150. (&st, k, sizeof k, crypto_generichash_blake2b_BYTES_MAX + 1, NULL, NULL) == -1);
  151. assert(crypto_generichash_blake2b_init_salt_personal
  152. (&st, k, crypto_generichash_blake2b_KEYBYTES_MAX + 1, sizeof out, NULL, NULL) == -1);
  153. assert(crypto_generichash_blake2b_init_salt_personal(&st, k, sizeof k, crypto_generichash_BYTES,
  154. NULL, personal) == 0);
  155. assert(crypto_generichash_blake2b_init_salt_personal(&st, k, sizeof k, crypto_generichash_BYTES,
  156. salt, NULL) == 0);
  157. return 0;
  158. }