1 #define TEST_NAME "sodium_utils"
7 unsigned char buf_add[1000];
8 unsigned char buf1[1000];
9 unsigned char buf2[1000];
10 unsigned char buf1_rev[1000];
11 unsigned char buf2_rev[1000];
12 unsigned char nonce[24];
14 unsigned char *bin_padded;
15 size_t bin_len, bin_len2;
16 size_t bin_padded_len;
17 size_t bin_padded_maxlen;
22 randombytes_buf(buf1, sizeof buf1);
23 memcpy(buf2, buf1, sizeof buf2);
24 printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
25 sodium_memzero(buf1, 0U);
26 printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
27 sodium_memzero(buf1, sizeof buf1 / 2);
28 printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
29 printf("%d\n", sodium_memcmp(buf1, buf2, 0U));
30 sodium_memzero(buf2, sizeof buf2 / 2);
31 printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
33 memset(nonce, 0, sizeof nonce);
34 sodium_increment(nonce, sizeof nonce);
36 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
37 memset(nonce, 255, sizeof nonce);
38 sodium_increment(nonce, sizeof nonce);
40 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
42 sodium_increment(nonce, sizeof nonce);
44 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
46 sodium_increment(nonce, sizeof nonce);
48 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
51 sodium_increment(nonce, sizeof nonce);
53 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
54 for (i = 0U; i < 1000U; i++) {
55 bin_len = (size_t) randombytes_uniform(sizeof buf1);
56 randombytes_buf(buf1, bin_len);
57 randombytes_buf(buf2, bin_len);
58 for (j = 0U; j < bin_len; j++) {
59 buf1_rev[bin_len - 1 - j] = buf1[j];
60 buf2_rev[bin_len - 1 - j] = buf2[j];
62 if (memcmp(buf1_rev, buf2_rev, bin_len) *
63 sodium_compare(buf1, buf2, bin_len) <
65 printf("sodium_compare() failure with length=%u\n",
66 (unsigned int) bin_len);
68 memcpy(buf1, buf2, bin_len);
69 if (sodium_compare(buf1, buf2, bin_len)) {
70 printf("sodium_compare() equality failure with length=%u\n",
71 (unsigned int) bin_len);
74 memset(buf1, 0, sizeof buf1);
75 if (sodium_is_zero(buf1, sizeof buf1) != 1) {
76 printf("sodium_is_zero() failed\n");
78 for (i = 0U; i < sizeof buf1; i++) {
80 if (sodium_is_zero(buf1, sizeof buf1) != 0) {
81 printf("sodium_is_zero() failed\n");
85 bin_len = randombytes_uniform(sizeof buf1);
86 randombytes_buf(buf1, bin_len);
87 memcpy(buf2, buf1, bin_len);
88 memset(buf_add, 0, bin_len);
89 j = randombytes_uniform(10000);
90 for (i = 0U; i < j; i++) {
91 sodium_increment(buf1, bin_len);
92 sodium_increment(buf_add, bin_len);
94 sodium_add(buf2, buf_add, bin_len);
95 if (sodium_compare(buf1, buf2, bin_len) != 0) {
96 printf("sodium_add() failed\n");
98 bin_len = randombytes_uniform(sizeof buf1);
99 randombytes_buf(buf1, bin_len);
100 memcpy(buf2, buf1, bin_len);
101 memset(buf_add, 0xff, bin_len);
102 sodium_increment(buf2, bin_len);
103 sodium_increment(buf2, 0U);
104 sodium_add(buf2, buf_add, bin_len);
105 sodium_add(buf2, buf_add, 0U);
106 if (sodium_compare(buf1, buf2, bin_len) != 0) {
107 printf("sodium_add() failed\n");
110 assert(sizeof nonce >= 24U);
111 memset(nonce, 0xfe, 24U);
112 memset(nonce, 0xff, 6U);
113 sodium_increment(nonce, 8U);
115 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
116 memset(nonce, 0xfe, 24U);
117 memset(nonce, 0xff, 10U);
118 sodium_increment(nonce, 12U);
120 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
121 memset(nonce, 0xff, 22U);
122 sodium_increment(nonce, 24U);
124 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
126 assert(sizeof nonce >= 24U);
127 memset(nonce, 0xfe, 24U);
128 memset(nonce, 0xff, 6U);
129 sodium_add(nonce, nonce, 7U);
130 sodium_add(nonce, nonce, 8U);
132 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
133 memset(nonce, 0xfe, 24U);
134 memset(nonce, 0xff, 10U);
135 sodium_add(nonce, nonce, 11U);
136 sodium_add(nonce, nonce, 12U);
138 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
139 memset(nonce, 0xff, 22U);
140 sodium_add(nonce, nonce, 23U);
141 sodium_add(nonce, nonce, 24U);
143 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce));
145 for (i = 0; i < 2000U; i++) {
146 bin_len = randombytes_uniform(200U);
147 blocksize = 1U + randombytes_uniform(100U);
148 bin_padded_maxlen = bin_len + (blocksize - bin_len % blocksize);
149 bin_padded = (unsigned char *) sodium_malloc(bin_padded_maxlen);
150 randombytes_buf(bin_padded, bin_padded_maxlen);
152 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len,
153 blocksize, bin_padded_maxlen - 1U) == -1);
154 assert(sodium_pad(NULL, bin_padded, bin_len,
155 blocksize, bin_padded_maxlen + 1U) == 0);
156 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len,
157 blocksize, bin_padded_maxlen + 1U) == 0);
158 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len,
159 0U, bin_padded_maxlen) == -1);
160 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len,
161 blocksize, bin_padded_maxlen) == 0);
162 assert(bin_padded_len == bin_padded_maxlen);
164 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len,
165 bin_padded_len + 1U) == -1);
166 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len,
168 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len,
170 assert(bin_len2 == bin_len);
172 sodium_free(bin_padded);
175 sodium_stackzero(512);