Home | History | Annotate | Line # | Download | only in default
box8.c revision 1.1
      1  1.1  riastrad 
      2  1.1  riastrad #define TEST_NAME "box8"
      3  1.1  riastrad #include "cmptest.h"
      4  1.1  riastrad 
      5  1.1  riastrad static unsigned char alicesk[crypto_box_SECRETKEYBYTES];
      6  1.1  riastrad static unsigned char alicepk[crypto_box_PUBLICKEYBYTES];
      7  1.1  riastrad static unsigned char bobsk[crypto_box_SECRETKEYBYTES];
      8  1.1  riastrad static unsigned char bobpk[crypto_box_PUBLICKEYBYTES];
      9  1.1  riastrad static unsigned char n[crypto_box_NONCEBYTES];
     10  1.1  riastrad 
     11  1.1  riastrad int
     12  1.1  riastrad main(void)
     13  1.1  riastrad {
     14  1.1  riastrad     unsigned char *m;
     15  1.1  riastrad     unsigned char *c;
     16  1.1  riastrad     unsigned char *m2;
     17  1.1  riastrad     size_t         mlen;
     18  1.1  riastrad     size_t         mlen_max = 1000;
     19  1.1  riastrad     size_t         i;
     20  1.1  riastrad     int            faults;
     21  1.1  riastrad     int            ret;
     22  1.1  riastrad 
     23  1.1  riastrad     m  = (unsigned char *) sodium_malloc(mlen_max);
     24  1.1  riastrad     c  = (unsigned char *) sodium_malloc(mlen_max);
     25  1.1  riastrad     m2 = (unsigned char *) sodium_malloc(mlen_max);
     26  1.1  riastrad     crypto_box_keypair(alicepk, alicesk);
     27  1.1  riastrad     crypto_box_keypair(bobpk, bobsk);
     28  1.1  riastrad     for (mlen = 0; mlen + crypto_box_ZEROBYTES <= mlen_max; mlen++) {
     29  1.1  riastrad         randombytes_buf(n, crypto_box_NONCEBYTES);
     30  1.1  riastrad         randombytes_buf(m + crypto_box_ZEROBYTES, mlen);
     31  1.1  riastrad         ret = crypto_box(c, m, mlen + crypto_box_ZEROBYTES, n, bobpk, alicesk);
     32  1.1  riastrad         assert(ret == 0);
     33  1.1  riastrad #ifdef BROWSER_TESTS
     34  1.1  riastrad         faults = 1;
     35  1.1  riastrad #else
     36  1.1  riastrad         faults = 5;
     37  1.1  riastrad #endif
     38  1.1  riastrad         while (faults > 0) {
     39  1.1  riastrad             c[rand() % (mlen + crypto_box_ZEROBYTES)] = rand();
     40  1.1  riastrad             if (crypto_box_open(m2, c, mlen + crypto_box_ZEROBYTES, n, alicepk,
     41  1.1  riastrad                                 bobsk) == 0) {
     42  1.1  riastrad                 for (i = 0; i < mlen + crypto_box_ZEROBYTES; ++i) {
     43  1.1  riastrad                     if (m2[i] != m[i]) {
     44  1.1  riastrad                         printf("forgery\n");
     45  1.1  riastrad                         return 100;
     46  1.1  riastrad                     }
     47  1.1  riastrad                 }
     48  1.1  riastrad             } else {
     49  1.1  riastrad                 faults--;
     50  1.1  riastrad             }
     51  1.1  riastrad         }
     52  1.1  riastrad     }
     53  1.1  riastrad     sodium_free(m);
     54  1.1  riastrad     sodium_free(c);
     55  1.1  riastrad     sodium_free(m2);
     56  1.1  riastrad 
     57  1.1  riastrad     return 0;
     58  1.1  riastrad }
     59