quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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 }