Home | History | Annotate | Line # | Download | only in default
      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