libsodium 1.0.8
[tomato.git] / release / src / router / libsodium / test / default / verify1.c
blob5cba6d6a4c7612a878405c2546ab90b3a5b63b52
2 #define TEST_NAME "verify1"
3 #include "cmptest.h"
5 static unsigned char v16[16], v16x[16];
6 static unsigned char v32[32], v32x[32];
7 static unsigned char v64[64], v64x[64];
9 int main(void)
11 unsigned char *v16, *v16x;
12 unsigned char *v32, *v32x;
13 unsigned char *v64, *v64x;
14 uint32_t r;
15 uint8_t o;
16 int i;
18 v16 = (unsigned char *) sodium_malloc(16);
19 v16x = (unsigned char *) sodium_malloc(16);
20 v32 = (unsigned char *) sodium_malloc(32);
21 v32x = (unsigned char *) sodium_malloc(32);
22 v64 = (unsigned char *) sodium_malloc(64);
23 v64x = (unsigned char *) sodium_malloc(64);
24 for (i = 0; i < 10000; i++) {
25 randombytes_buf(v16, 16);
26 randombytes_buf(v32, 32);
27 randombytes_buf(v64, 64);
29 memcpy(v16x, v16, 16);
30 memcpy(v32x, v32, 32);
31 memcpy(v64x, v64, 64);
33 if (crypto_verify_16(v16, v16x) != 0 ||
34 crypto_verify_32(v32, v32x) != 0 ||
35 crypto_verify_64(v64, v64x) != 0 ||
36 sodium_memcmp(v16, v16x, 16) != 0 ||
37 sodium_memcmp(v32, v32x, 32) != 0 ||
38 sodium_memcmp(v64, v64x, 64) != 0) {
39 printf("Failed\n");
42 printf("OK\n");
44 for (i = 0; i < 100000; i++) {
45 r = randombytes_random();
46 o = (uint8_t) randombytes_random();
47 if (o == 0) {
48 continue;
50 v16x[r & 15U] ^= o;
51 v32x[r & 31U] ^= o;
52 v64x[r & 63U] ^= o;
53 if (crypto_verify_16(v16, v16x) != -1 ||
54 crypto_verify_32(v32, v32x) != -1 ||
55 crypto_verify_64(v64, v64x) != -1 ||
56 sodium_memcmp(v16, v16x, 16) != -1 ||
57 sodium_memcmp(v32, v32x, 32) != -1 ||
58 sodium_memcmp(v64, v64x, 64) != -1) {
59 printf("Failed\n");
61 v16x[r & 15U] ^= o;
62 v32x[r & 31U] ^= o;
63 v64x[r & 63U] ^= o;
65 printf("OK\n");
67 assert(crypto_verify_16_bytes() == 16U);
68 assert(crypto_verify_32_bytes() == 32U);
69 assert(crypto_verify_64_bytes() == 64U);
71 sodium_free(v16);
72 sodium_free(v16x);
73 sodium_free(v32);
74 sodium_free(v32x);
75 sodium_free(v64);
76 sodium_free(v64x);
78 return 0;