verify1.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #define TEST_NAME "verify1"
  2. #include "cmptest.h"
  3. int
  4. main(void)
  5. {
  6. unsigned char *v16, *v16x;
  7. unsigned char *v32, *v32x;
  8. unsigned char *v64, *v64x;
  9. uint32_t r;
  10. uint8_t o;
  11. int i;
  12. v16 = (unsigned char *) sodium_malloc(16);
  13. v16x = (unsigned char *) sodium_malloc(16);
  14. v32 = (unsigned char *) sodium_malloc(32);
  15. v32x = (unsigned char *) sodium_malloc(32);
  16. v64 = (unsigned char *) sodium_malloc(64);
  17. v64x = (unsigned char *) sodium_malloc(64);
  18. for (i = 0; i < 10000; i++) {
  19. randombytes_buf(v16, 16);
  20. randombytes_buf(v32, 32);
  21. randombytes_buf(v64, 64);
  22. memcpy(v16x, v16, 16);
  23. memcpy(v32x, v32, 32);
  24. memcpy(v64x, v64, 64);
  25. if (crypto_verify_16(v16, v16x) != 0 ||
  26. crypto_verify_32(v32, v32x) != 0 ||
  27. crypto_verify_64(v64, v64x) != 0 ||
  28. sodium_memcmp(v16, v16x, 16) != 0 ||
  29. sodium_memcmp(v32, v32x, 32) != 0 ||
  30. sodium_memcmp(v64, v64x, 64) != 0) {
  31. printf("Failed\n");
  32. }
  33. }
  34. printf("OK\n");
  35. for (i = 0; i < 100000; i++) {
  36. r = randombytes_random();
  37. o = (uint8_t) randombytes_random();
  38. if (o == 0) {
  39. continue;
  40. }
  41. v16x[r & 15U] ^= o;
  42. v32x[r & 31U] ^= o;
  43. v64x[r & 63U] ^= o;
  44. if (crypto_verify_16(v16, v16x) != -1 ||
  45. crypto_verify_32(v32, v32x) != -1 ||
  46. crypto_verify_64(v64, v64x) != -1 ||
  47. sodium_memcmp(v16, v16x, 16) != -1 ||
  48. sodium_memcmp(v32, v32x, 32) != -1 ||
  49. sodium_memcmp(v64, v64x, 64) != -1) {
  50. printf("Failed\n");
  51. }
  52. v16x[r & 15U] ^= o;
  53. v32x[r & 31U] ^= o;
  54. v64x[r & 63U] ^= o;
  55. }
  56. printf("OK\n");
  57. assert(crypto_verify_16_bytes() == 16U);
  58. assert(crypto_verify_32_bytes() == 32U);
  59. assert(crypto_verify_64_bytes() == 64U);
  60. sodium_free(v16);
  61. sodium_free(v16x);
  62. sodium_free(v32);
  63. sodium_free(v32x);
  64. sodium_free(v64);
  65. sodium_free(v64x);
  66. return 0;
  67. }