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