sodium_utils.c (8414B)
1 #define TEST_NAME "sodium_utils" 2 #include "cmptest.h" 3 4 int 5 main(void) 6 { 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]; 13 char nonce_hex[49]; 14 unsigned char *bin_padded; 15 size_t bin_len, bin_len2; 16 size_t bin_padded_len; 17 size_t bin_padded_maxlen; 18 size_t blocksize; 19 unsigned int i; 20 unsigned int j; 21 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)); 32 printf("%d\n", sodium_memcmp(buf1, guard_page, 0U)); 33 printf("%d\n", sodium_memcmp(guard_page, buf2, 0U)); 34 printf("%d\n", sodium_memcmp(guard_page, guard_page, 0U)); 35 sodium_memzero(guard_page, 0U); 36 37 memset(nonce, 0, sizeof nonce); 38 sodium_increment(nonce, sizeof nonce); 39 printf("%s\n", 40 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 41 memset(nonce, 255, sizeof nonce); 42 sodium_increment(nonce, sizeof nonce); 43 printf("%s\n", 44 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 45 nonce[1] = 1U; 46 sodium_increment(nonce, sizeof nonce); 47 printf("%s\n", 48 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 49 nonce[1] = 0U; 50 sodium_increment(nonce, sizeof nonce); 51 printf("%s\n", 52 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 53 nonce[0] = 255U; 54 nonce[2] = 255U; 55 sodium_increment(nonce, sizeof nonce); 56 printf("%s\n", 57 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 58 for (i = 0U; i < 1000U; i++) { 59 bin_len = (size_t) randombytes_uniform(sizeof buf1); 60 randombytes_buf(buf1, bin_len); 61 randombytes_buf(buf2, bin_len); 62 for (j = 0U; j < bin_len; j++) { 63 buf1_rev[bin_len - 1 - j] = buf1[j]; 64 buf2_rev[bin_len - 1 - j] = buf2[j]; 65 } 66 if (memcmp(buf1_rev, buf2_rev, bin_len) * 67 sodium_compare(buf1, buf2, bin_len) < 0) { 68 printf("sodium_compare() failure with length=%u\n", 69 (unsigned int) bin_len); 70 } 71 memcpy(buf1, buf2, bin_len); 72 if (sodium_compare(buf1, buf2, bin_len)) { 73 printf("sodium_compare() equality failure with length=%u\n", 74 (unsigned int) bin_len); 75 } 76 } 77 printf("%d\n", sodium_compare(buf1, NULL, 0U)); 78 printf("%d\n", sodium_compare(NULL, buf1, 0U)); 79 memset(buf1, 0, sizeof buf1); 80 if (sodium_is_zero(buf1, sizeof buf1) != 1) { 81 printf("sodium_is_zero() failed\n"); 82 } 83 for (i = 0U; i < sizeof buf1; i++) { 84 buf1[i]++; 85 if (sodium_is_zero(buf1, sizeof buf1) != 0) { 86 printf("sodium_is_zero() failed\n"); 87 } 88 buf1[i]--; 89 } 90 bin_len = randombytes_uniform(sizeof buf1); 91 randombytes_buf(buf1, bin_len); 92 memcpy(buf2, buf1, bin_len); 93 memset(buf_add, 0, bin_len); 94 j = randombytes_uniform(10000); 95 for (i = 0U; i < j; i++) { 96 sodium_increment(buf1, bin_len); 97 sodium_increment(buf_add, bin_len); 98 } 99 sodium_add(buf2, buf_add, bin_len); 100 if (sodium_compare(buf1, buf2, bin_len) != 0) { 101 printf("sodium_add() failed\n"); 102 } 103 bin_len = randombytes_uniform(sizeof buf1); 104 randombytes_buf(buf1, bin_len); 105 memcpy(buf2, buf1, bin_len); 106 memset(buf_add, 0xff, bin_len); 107 sodium_increment(buf2, bin_len); 108 sodium_increment(buf2, 0U); 109 sodium_add(buf2, buf_add, bin_len); 110 sodium_add(buf2, buf_add, 0U); 111 if (sodium_compare(buf1, buf2, bin_len) != 0) { 112 printf("sodium_add() failed\n"); 113 } 114 for (i = 0U; i < 1000U; i++) { 115 randombytes_buf(buf1, bin_len); 116 randombytes_buf(buf2, bin_len); 117 sodium_add(buf1, buf2, bin_len); 118 sodium_sub(buf1, buf2, bin_len); 119 sodium_sub(buf1, buf2, 0U); 120 if (sodium_is_zero(buf1, bin_len) && 121 !sodium_is_zero(buf1, bin_len)) { 122 printf("sodium_sub() failed\n"); 123 } 124 sodium_sub(buf1, buf1, bin_len); 125 if (!sodium_is_zero(buf1, bin_len)) { 126 printf("sodium_sub() failed\n"); 127 } 128 } 129 assert(sizeof nonce >= 24U); 130 memset(nonce, 0xfe, 24U); 131 memset(nonce, 0xff, 6U); 132 sodium_increment(nonce, 8U); 133 printf("%s\n", 134 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 135 memset(nonce, 0xfe, 24U); 136 memset(nonce, 0xff, 10U); 137 sodium_increment(nonce, 12U); 138 printf("%s\n", 139 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 140 memset(nonce, 0xff, 22U); 141 sodium_increment(nonce, 24U); 142 printf("%s\n", 143 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 144 145 assert(sizeof nonce >= 24U); 146 memset(nonce, 0xfe, 24U); 147 memset(nonce, 0xff, 6U); 148 sodium_add(nonce, nonce, 7U); 149 sodium_add(nonce, nonce, 8U); 150 printf("%s\n", 151 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 152 memset(nonce, 0xfe, 24U); 153 memset(nonce, 0xff, 10U); 154 sodium_add(nonce, nonce, 11U); 155 sodium_add(nonce, nonce, 12U); 156 printf("%s\n", 157 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 158 memset(nonce, 0xff, 22U); 159 sodium_add(nonce, nonce, 23U); 160 sodium_add(nonce, nonce, 24U); 161 printf("%s\n", 162 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 163 sodium_add(nonce, nonce, 0U); 164 printf("%s\n", 165 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 166 sodium_add(nonce, guard_page, 0U); 167 printf("%s\n", 168 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 169 sodium_add(guard_page, nonce, 0U); 170 171 sodium_sub(nonce, nonce, 0U); 172 printf("%s\n", 173 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 174 sodium_sub(nonce, guard_page, 0U); 175 printf("%s\n", 176 sodium_bin2hex(nonce_hex, sizeof nonce_hex, nonce, sizeof nonce)); 177 sodium_sub(guard_page, nonce, 0U); 178 179 randombytes_buf(buf1, 64U); 180 randombytes_buf(buf2, 64U); 181 memset(buf_add, 0, 64U); 182 sodium_add(buf_add, buf1, 64U); 183 assert(!sodium_is_zero(buf_add, 64U)); 184 sodium_add(buf_add, buf2, 64U); 185 assert(!sodium_is_zero(buf_add, 64U)); 186 sodium_sub(buf_add, buf1, 64U); 187 assert(!sodium_is_zero(buf_add, 64U)); 188 sodium_sub(buf_add, buf2, 64U); 189 assert(sodium_is_zero(buf_add, 64U)); 190 191 for (i = 0; i < 2000U; i++) { 192 bin_len = randombytes_uniform(200U); 193 blocksize = 1U + randombytes_uniform(500U); 194 bin_padded_maxlen = bin_len + (blocksize - bin_len % blocksize); 195 bin_padded = (unsigned char *) sodium_malloc(bin_padded_maxlen); 196 randombytes_buf(bin_padded, bin_padded_maxlen); 197 198 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len, 199 blocksize, bin_padded_maxlen - 1U) == -1); 200 assert(sodium_pad(NULL, bin_padded, bin_len, 201 blocksize, bin_padded_maxlen + 1U) == 0); 202 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len, 203 blocksize, bin_padded_maxlen + 1U) == 0); 204 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len, 205 0U, bin_padded_maxlen) == -1); 206 assert(sodium_pad(&bin_padded_len, bin_padded, bin_len, 207 blocksize, bin_padded_maxlen) == 0); 208 assert(bin_padded_len == bin_padded_maxlen); 209 210 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len, 211 bin_padded_len + 1U) == -1); 212 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len, 213 0U) == -1); 214 assert(sodium_unpad(&bin_len2, bin_padded, bin_padded_len, 215 blocksize) == 0); 216 assert(bin_len2 == bin_len); 217 218 sodium_free(bin_padded); 219 } 220 221 sodium_stackzero(512); 222 223 return 0; 224 }