Home | History | Annotate | Line # | Download | only in default
      1  1.1  riastrad 
      2  1.1  riastrad #define TEST_NAME "secretbox_easy"
      3  1.1  riastrad #include "cmptest.h"
      4  1.1  riastrad 
      5  1.1  riastrad static unsigned char firstkey[32] = { 0x1b, 0x27, 0x55, 0x64, 0x73, 0xe9, 0x85,
      6  1.1  riastrad                                       0xd4, 0x62, 0xcd, 0x51, 0x19, 0x7a, 0x9a,
      7  1.1  riastrad                                       0x46, 0xc7, 0x60, 0x09, 0x54, 0x9e, 0xac,
      8  1.1  riastrad                                       0x64, 0x74, 0xf2, 0x06, 0xc4, 0xee, 0x08,
      9  1.1  riastrad                                       0x44, 0xf6, 0x83, 0x89 };
     10  1.1  riastrad 
     11  1.1  riastrad static unsigned char nonce[24] = { 0x69, 0x69, 0x6e, 0xe9, 0x55, 0xb6,
     12  1.1  riastrad                                    0x2b, 0x73, 0xcd, 0x62, 0xbd, 0xa8,
     13  1.1  riastrad                                    0x75, 0xfc, 0x73, 0xd6, 0x82, 0x19,
     14  1.1  riastrad                                    0xe0, 0x03, 0x6b, 0x7a, 0x0b, 0x37 };
     15  1.1  riastrad 
     16  1.1  riastrad static unsigned char m[131] = {
     17  1.1  riastrad     0xbe, 0x07, 0x5f, 0xc5, 0x3c, 0x81, 0xf2, 0xd5, 0xcf, 0x14, 0x13, 0x16,
     18  1.1  riastrad     0xeb, 0xeb, 0x0c, 0x7b, 0x52, 0x28, 0xc5, 0x2a, 0x4c, 0x62, 0xcb, 0xd4,
     19  1.1  riastrad     0x4b, 0x66, 0x84, 0x9b, 0x64, 0x24, 0x4f, 0xfc, 0xe5, 0xec, 0xba, 0xaf,
     20  1.1  riastrad     0x33, 0xbd, 0x75, 0x1a, 0x1a, 0xc7, 0x28, 0xd4, 0x5e, 0x6c, 0x61, 0x29,
     21  1.1  riastrad     0x6c, 0xdc, 0x3c, 0x01, 0x23, 0x35, 0x61, 0xf4, 0x1d, 0xb6, 0x6c, 0xce,
     22  1.1  riastrad     0x31, 0x4a, 0xdb, 0x31, 0x0e, 0x3b, 0xe8, 0x25, 0x0c, 0x46, 0xf0, 0x6d,
     23  1.1  riastrad     0xce, 0xea, 0x3a, 0x7f, 0xa1, 0x34, 0x80, 0x57, 0xe2, 0xf6, 0x55, 0x6a,
     24  1.1  riastrad     0xd6, 0xb1, 0x31, 0x8a, 0x02, 0x4a, 0x83, 0x8f, 0x21, 0xaf, 0x1f, 0xde,
     25  1.1  riastrad     0x04, 0x89, 0x77, 0xeb, 0x48, 0xf5, 0x9f, 0xfd, 0x49, 0x24, 0xca, 0x1c,
     26  1.1  riastrad     0x60, 0x90, 0x2e, 0x52, 0xf0, 0xa0, 0x89, 0xbc, 0x76, 0x89, 0x70, 0x40,
     27  1.1  riastrad     0xe0, 0x82, 0xf9, 0x37, 0x76, 0x38, 0x48, 0x64, 0x5e, 0x07, 0x05
     28  1.1  riastrad };
     29  1.1  riastrad 
     30  1.1  riastrad int
     31  1.1  riastrad main(void)
     32  1.1  riastrad {
     33  1.1  riastrad     unsigned char *c;
     34  1.1  riastrad     unsigned char *mac;
     35  1.1  riastrad     size_t         i;
     36  1.1  riastrad 
     37  1.1  riastrad     c   = (unsigned char *) sodium_malloc(131 + crypto_secretbox_MACBYTES + 1);
     38  1.1  riastrad     mac = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES);
     39  1.1  riastrad     assert(c != NULL && mac != NULL);
     40  1.1  riastrad 
     41  1.1  riastrad     crypto_secretbox_easy(c, m, 131, nonce, firstkey);
     42  1.1  riastrad     for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
     43  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     44  1.1  riastrad     }
     45  1.1  riastrad     printf("\n");
     46  1.1  riastrad 
     47  1.1  riastrad     crypto_secretbox_detached(c, mac, m, 131, nonce, firstkey);
     48  1.1  riastrad     for (i = 0; i < crypto_secretbox_MACBYTES; ++i) {
     49  1.1  riastrad         printf(",0x%02x", (unsigned int) mac[i]);
     50  1.1  riastrad     }
     51  1.1  riastrad     for (i = 0; i < 131; ++i) {
     52  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     53  1.1  riastrad     }
     54  1.1  riastrad     printf("\n");
     55  1.1  riastrad 
     56  1.1  riastrad     /* Same test, with c and m overlapping */
     57  1.1  riastrad 
     58  1.1  riastrad     memcpy(c + 1, m, 131);
     59  1.1  riastrad     crypto_secretbox_easy(c, c + 1, 131, nonce, firstkey);
     60  1.1  riastrad     for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
     61  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     62  1.1  riastrad     }
     63  1.1  riastrad     printf("\n");
     64  1.1  riastrad 
     65  1.1  riastrad     memcpy(c, m, 131);
     66  1.1  riastrad     crypto_secretbox_easy(c + 1, c, 131, nonce, firstkey);
     67  1.1  riastrad     for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
     68  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i + 1]);
     69  1.1  riastrad     }
     70  1.1  riastrad     printf("\n");
     71  1.1  riastrad 
     72  1.1  riastrad     memcpy(c, m, 131);
     73  1.1  riastrad     crypto_secretbox_easy(c, c, 131, nonce, firstkey);
     74  1.1  riastrad     for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
     75  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     76  1.1  riastrad     }
     77  1.1  riastrad     printf("\n");
     78  1.1  riastrad 
     79  1.1  riastrad     assert(crypto_secretbox_easy(c, m, 0, nonce, firstkey) == 0);
     80  1.1  riastrad 
     81  1.1  riastrad     /* Null message */
     82  1.1  riastrad 
     83  1.1  riastrad     crypto_secretbox_easy(c, c, 0, nonce, firstkey);
     84  1.1  riastrad     for (i = 0; i < crypto_secretbox_MACBYTES + 1; ++i) {
     85  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     86  1.1  riastrad     }
     87  1.1  riastrad     printf("\n");
     88  1.1  riastrad     if (crypto_secretbox_open_easy(c, c, crypto_secretbox_MACBYTES, nonce,
     89  1.1  riastrad                                    firstkey) != 0) {
     90  1.1  riastrad         printf("Null crypto_secretbox_open_easy() failed\n");
     91  1.1  riastrad     }
     92  1.1  riastrad     for (i = 0; i < crypto_secretbox_MACBYTES + 1; ++i) {
     93  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     94  1.1  riastrad     }
     95  1.1  riastrad     printf("\n");
     96  1.1  riastrad     c[randombytes_uniform(crypto_secretbox_MACBYTES)]++;
     97  1.1  riastrad     if (crypto_secretbox_open_easy(c, c, crypto_secretbox_MACBYTES, nonce,
     98  1.1  riastrad                                    firstkey) != -1) {
     99  1.1  riastrad         printf("Null tampered crypto_secretbox_open_easy() failed\n");
    100  1.1  riastrad     }
    101  1.1  riastrad 
    102  1.1  riastrad     /* No overlap, but buffers are next to each other */
    103  1.1  riastrad 
    104  1.1  riastrad     memset(c, 0, 131 + crypto_secretbox_MACBYTES + 1);
    105  1.1  riastrad     memcpy(c, m, 20);
    106  1.1  riastrad     crypto_secretbox_easy(c, c + 10, 10, nonce, firstkey);
    107  1.1  riastrad     for (i = 0; i < 10 + crypto_secretbox_MACBYTES; ++i) {
    108  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    109  1.1  riastrad     }
    110  1.1  riastrad     printf("\n");
    111  1.1  riastrad 
    112  1.1  riastrad     memset(c, 0, 131 + crypto_secretbox_MACBYTES + 1);
    113  1.1  riastrad     memcpy(c, m, 20);
    114  1.1  riastrad     crypto_secretbox_easy(c + 10, c, 10, nonce, firstkey);
    115  1.1  riastrad     for (i = 0; i < 10 + crypto_secretbox_MACBYTES; ++i) {
    116  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    117  1.1  riastrad     }
    118  1.1  riastrad     printf("\n");
    119  1.1  riastrad 
    120  1.1  riastrad     sodium_free(mac);
    121  1.1  riastrad     sodium_free(c);
    122  1.1  riastrad 
    123  1.1  riastrad     return 0;
    124  1.1  riastrad }
    125