quickjs-tart

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

box_seal.c (4861B)


      1 
      2 #define TEST_NAME "box_seal"
      3 #include "cmptest.h"
      4 
      5 static
      6 void tv1(void)
      7 {
      8     unsigned char  pk[crypto_box_PUBLICKEYBYTES];
      9     unsigned char  sk[crypto_box_SECRETKEYBYTES];
     10     unsigned char *c;
     11     unsigned char *m;
     12     unsigned char *m2;
     13     size_t         m_len;
     14     size_t         c_len;
     15 
     16     crypto_box_keypair(pk, sk);
     17     m_len = (size_t) randombytes_uniform(1000);
     18     c_len = crypto_box_SEALBYTES + m_len;
     19     m     = (unsigned char *) sodium_malloc(m_len);
     20     m2    = (unsigned char *) sodium_malloc(m_len);
     21     c     = (unsigned char *) sodium_malloc(c_len);
     22     randombytes_buf(m, m_len);
     23     if (crypto_box_seal(c, m, m_len, pk) != 0) {
     24         printf("crypto_box_seal() failure\n");
     25         return;
     26     }
     27     if (crypto_box_seal_open(m2, c, c_len, pk, sk) != 0) {
     28         printf("crypto_box_seal_open() failure\n");
     29         return;
     30     }
     31     printf("%d\n", memcmp(m, m2, m_len));
     32 
     33     printf("%d\n", crypto_box_seal_open(m, c, 0U, pk, sk));
     34     printf("%d\n", crypto_box_seal_open(m, c, c_len - 1U, pk, sk));
     35     printf("%d\n", crypto_box_seal_open(m, c, c_len, sk, pk));
     36 
     37     sodium_free(c);
     38     sodium_free(m);
     39     sodium_free(m2);
     40 
     41     assert(crypto_box_sealbytes() == crypto_box_SEALBYTES);
     42 }
     43 
     44 static
     45 void tv2(void)
     46 {
     47     unsigned char  pk[crypto_box_PUBLICKEYBYTES];
     48     unsigned char  sk[crypto_box_SECRETKEYBYTES];
     49     unsigned char *cm;
     50     unsigned char *m2;
     51     size_t         m_len;
     52     size_t         cm_len;
     53 
     54     crypto_box_keypair(pk, sk);
     55     m_len = (size_t) randombytes_uniform(1000);
     56     cm_len = crypto_box_SEALBYTES + m_len;
     57     m2    = (unsigned char *) sodium_malloc(m_len);
     58     cm    = (unsigned char *) sodium_malloc(cm_len);
     59     randombytes_buf(cm, m_len);
     60     if (crypto_box_seal(cm, cm, m_len, pk) != 0) {
     61         printf("crypto_box_seal() failure\n");
     62         return;
     63     }
     64     if (crypto_box_seal_open(m2, cm, cm_len, pk, sk) != 0) {
     65         printf("crypto_box_seal_open() failure\n");
     66         return;
     67     }
     68     assert(m_len < 8 || memcmp(cm, m2, m_len) != 0);
     69     sodium_free(cm);
     70     sodium_free(m2);
     71 }
     72 
     73 #ifndef SODIUM_LIBRARY_MINIMAL
     74 static
     75 void tv3(void)
     76 {
     77     unsigned char  pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES];
     78     unsigned char  sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES];
     79     unsigned char *c;
     80     unsigned char *m;
     81     unsigned char *m2;
     82     size_t         m_len;
     83     size_t         c_len;
     84 
     85     crypto_box_curve25519xchacha20poly1305_keypair(pk, sk);
     86     m_len = (size_t) randombytes_uniform(1000);
     87     c_len = crypto_box_curve25519xchacha20poly1305_SEALBYTES + m_len;
     88     m     = (unsigned char *) sodium_malloc(m_len);
     89     m2    = (unsigned char *) sodium_malloc(m_len);
     90     c     = (unsigned char *) sodium_malloc(c_len);
     91     randombytes_buf(m, m_len);
     92     if (crypto_box_curve25519xchacha20poly1305_seal(c, m, m_len, pk) != 0) {
     93         printf("crypto_box_curve25519xchacha20poly1305_seal() failure\n");
     94         return;
     95     }
     96     if (crypto_box_curve25519xchacha20poly1305_seal_open(m2, c, c_len, pk, sk) != 0) {
     97         printf("crypto_box_curve25519xchacha20poly1305_seal_open() failure\n");
     98         return;
     99     }
    100     printf("%d\n", memcmp(m, m2, m_len));
    101 
    102     printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, 0U, pk, sk));
    103     printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, c_len - 1U, pk, sk));
    104     printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, c_len, sk, pk));
    105 
    106     sodium_free(c);
    107     sodium_free(m);
    108     sodium_free(m2);
    109 
    110     assert(crypto_box_curve25519xchacha20poly1305_sealbytes() ==
    111            crypto_box_curve25519xchacha20poly1305_SEALBYTES);
    112 }
    113 
    114 static
    115 void tv4(void)
    116 {
    117     unsigned char  pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES];
    118     unsigned char  sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES];
    119     unsigned char *cm;
    120     unsigned char *m2;
    121     size_t         m_len;
    122     size_t         cm_len;
    123 
    124     crypto_box_curve25519xchacha20poly1305_keypair(pk, sk);
    125     m_len = (size_t) randombytes_uniform(1000);
    126     cm_len = crypto_box_curve25519xchacha20poly1305_SEALBYTES + m_len;
    127     m2    = (unsigned char *) sodium_malloc(m_len);
    128     cm    = (unsigned char *) sodium_malloc(cm_len);
    129     randombytes_buf(cm, m_len);
    130     if (crypto_box_curve25519xchacha20poly1305_seal(cm, cm, m_len, pk) != 0) {
    131         printf("crypto_box_curve25519xchacha20poly1305_seal() failure\n");
    132         return;
    133     }
    134     if (crypto_box_curve25519xchacha20poly1305_seal_open(m2, cm, cm_len, pk, sk) != 0) {
    135         printf("crypto_box_curve25519xchacha20poly1305_seal_open() failure\n");
    136         return;
    137     }
    138     assert(m_len < 8 || memcmp(cm, m2, m_len) != 0);
    139     sodium_free(cm);
    140     sodium_free(m2);
    141 }
    142 
    143 #else
    144 
    145 static
    146 void tv3(void)
    147 {
    148     printf("0\n-1\n-1\n-1\n");
    149 }
    150 
    151 static
    152 void tv4(void)
    153 { }
    154 #endif
    155 
    156 int
    157 main(void)
    158 {
    159     tv1();
    160     tv2();
    161     tv3();
    162     tv4();
    163 
    164     return 0;
    165 }