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