Home | History | Annotate | Line # | Download | only in default
      1 
      2 #define TEST_NAME "secretbox_easy2"
      3 #include "cmptest.h"
      4 
      5 int
      6 main(void)
      7 {
      8     unsigned char *m;
      9     unsigned char *m2;
     10     unsigned char *c;
     11     unsigned char *nonce;
     12     unsigned char *k;
     13     unsigned char *mac;
     14     size_t         mlen;
     15     size_t         i;
     16 
     17     mlen  = (size_t) randombytes_uniform((uint32_t) 10000) + 1U;
     18     m     = (unsigned char *) sodium_malloc(mlen);
     19     m2    = (unsigned char *) sodium_malloc(mlen);
     20     c     = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES + mlen);
     21     nonce = (unsigned char *) sodium_malloc(crypto_secretbox_NONCEBYTES);
     22     k     = (unsigned char *) sodium_malloc(crypto_secretbox_KEYBYTES);
     23     mac   = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES);
     24     crypto_secretbox_keygen(k);
     25     randombytes_buf(m, mlen);
     26     randombytes_buf(nonce, crypto_secretbox_NONCEBYTES);
     27     crypto_secretbox_easy(c, m, (unsigned long long) mlen, nonce, k);
     28     if (crypto_secretbox_open_easy(
     29             m2, c, (unsigned long long) mlen + crypto_secretbox_MACBYTES, nonce,
     30             k) != 0) {
     31         printf("crypto_secretbox_open_easy() failed\n");
     32     }
     33     printf("%d\n", memcmp(m, m2, mlen));
     34 
     35     for (i = 0; i < mlen + crypto_secretbox_MACBYTES - 1; i++) {
     36         if (crypto_secretbox_open_easy(m2, c, (unsigned long long) i, nonce,
     37                                        k) == 0) {
     38             printf("short open() should have failed\n");
     39             return 1;
     40         }
     41     }
     42     crypto_secretbox_detached(c, mac, m, (unsigned long long) mlen, nonce, k);
     43     if (crypto_secretbox_open_detached(NULL, c, mac, (unsigned long long) mlen,
     44                                        nonce, k) != 0) {
     45         printf("crypto_secretbox_open_detached() with a NULL message pointer failed\n");
     46     }
     47     if (crypto_secretbox_open_detached(m2, c, mac, (unsigned long long) mlen,
     48                                        nonce, k) != 0) {
     49         printf("crypto_secretbox_open_detached() failed\n");
     50     }
     51     printf("%d\n", memcmp(m, m2, mlen));
     52 
     53     memcpy(c, m, mlen);
     54     crypto_secretbox_easy(c, c, (unsigned long long) mlen, nonce, k);
     55     printf("%d\n", memcmp(m, c, mlen) == 0);
     56     printf("%d\n", memcmp(m, c + crypto_secretbox_MACBYTES, mlen) == 0);
     57     if (crypto_secretbox_open_easy(
     58             c, c, (unsigned long long) mlen + crypto_secretbox_MACBYTES, nonce,
     59             k) != 0) {
     60         printf("crypto_secretbox_open_easy() failed\n");
     61     }
     62     printf("%d\n", memcmp(m, c, mlen));
     63 
     64     sodium_free(m);
     65     sodium_free(m2);
     66     sodium_free(c);
     67     sodium_free(nonce);
     68     sodium_free(k);
     69     sodium_free(mac);
     70 
     71     return 0;
     72 }
     73