test-ae-encrypt.c (5475B)
1 #include <stdio.h> 2 #include <stdint.h> 3 #include <string.h> 4 5 #include "lilliput-ae.h" 6 7 #include "test-helpers.h" 8 9 10 struct vector 11 { 12 char *name; 13 uint8_t key[KEY_BYTES]; 14 uint8_t nonce[NONCE_BYTES]; 15 size_t auth_len; 16 uint8_t *auth; 17 size_t message_len; 18 uint8_t *message; 19 uint8_t *ciphertext; 20 uint8_t tag[TAG_BYTES]; 21 }; 22 23 typedef struct vector vector; 24 25 26 const vector VECTORS[] = { 27 { 28 .name = "order", 29 .key = { 30 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 31 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f 32 }, 33 .nonce = { 34 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 35 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e 36 }, 37 .auth_len = 64, 38 .auth = (uint8_t[]) { 39 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 40 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 41 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 42 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 43 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 44 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 45 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 46 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 47 }, 48 .message_len = 64, 49 .message = (uint8_t[]) { 50 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 51 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 52 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 53 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 54 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 55 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 56 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 57 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 58 }, 59 .ciphertext = (uint8_t[]) { 60 0xa2, 0xd5, 0xa6, 0x38, 0xca, 0xcf, 0xce, 0x90, 61 0xaf, 0xc3, 0xb8, 0x99, 0x36, 0xba, 0xf1, 0x12, 62 0x94, 0x13, 0x87, 0xb8, 0x7e, 0x6c, 0x07, 0x48, 63 0x25, 0x25, 0x66, 0xd8, 0xa4, 0x05, 0xc9, 0xd3, 64 0xc0, 0xaa, 0x27, 0xc6, 0xa6, 0x67, 0x53, 0x8f, 65 0xcc, 0xd9, 0xd3, 0xdb, 0xf5, 0xdc, 0xad, 0xa0, 66 0x4b, 0x3e, 0x9a, 0xfb, 0x7c, 0xe9, 0x17, 0x9c, 67 0xb8, 0x17, 0x13, 0x9f, 0x32, 0x70, 0x5c, 0x62 68 }, 69 .tag = { 70 0x04, 0xaa, 0xc8, 0x19, 0x32, 0x70, 0x32, 0x24, 71 0xe8, 0x27, 0xb7, 0xab, 0xec, 0xd8, 0x2f, 0x6c 72 } 73 }, 74 { 75 .name = "order-padded", 76 .key = { 77 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 78 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f 79 }, 80 .nonce = { 81 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 82 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e 83 }, 84 .auth_len = 66, 85 .auth = (uint8_t[]) { 86 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 87 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 88 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 89 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 90 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 91 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 92 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 93 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 94 0x40, 0x01 95 }, 96 .message_len = 66, 97 .message = (uint8_t[]) { 98 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 99 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 100 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 101 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 102 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 103 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 104 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 105 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 106 0x40, 0x01 107 }, 108 .ciphertext = (uint8_t[]) { 109 0xa2, 0xd5, 0xa6, 0x38, 0xca, 0xcf, 0xce, 0x90, 110 0xaf, 0xc3, 0xb8, 0x99, 0x36, 0xba, 0xf1, 0x12, 111 0x94, 0x13, 0x87, 0xb8, 0x7e, 0x6c, 0x07, 0x48, 112 0x25, 0x25, 0x66, 0xd8, 0xa4, 0x05, 0xc9, 0xd3, 113 0xc0, 0xaa, 0x27, 0xc6, 0xa6, 0x67, 0x53, 0x8f, 114 0xcc, 0xd9, 0xd3, 0xdb, 0xf5, 0xdc, 0xad, 0xa0, 115 0x4b, 0x3e, 0x9a, 0xfb, 0x7c, 0xe9, 0x17, 0x9c, 116 0xb8, 0x17, 0x13, 0x9f, 0x32, 0x70, 0x5c, 0x62, 117 0x88, 0x5a 118 }, 119 .tag = { 120 0x64, 0xa2, 0x24, 0x03, 0xc5, 0x79, 0x4f, 0xec, 121 0xe7, 0x7d, 0xc1, 0xf6, 0xc9, 0xc6, 0x77, 0x2c 122 } 123 } 124 }; 125 126 127 int main() 128 { 129 int diff = 0; 130 131 for (const vector *v=VECTORS; v<ARRAY_END(VECTORS); v++) 132 { 133 uint8_t ciphertext[v->message_len]; 134 uint8_t tag[TAG_BYTES]; 135 136 lilliput_ae_encrypt( 137 v->message_len, v->message, 138 v->auth_len, v->auth, 139 v->key, v->nonce, 140 ciphertext, 141 tag 142 ); 143 144 if (memcmp(ciphertext, v->ciphertext, v->message_len) != 0) 145 { 146 REPORT_DIFFERENCE(v->name, "ciphertext"); 147 dump_c_initializer(v->message_len, ciphertext); 148 diff++; 149 } 150 151 if (memcmp(tag, v->tag, TAG_BYTES) != 0) 152 { 153 REPORT_DIFFERENCE(v->name, "tag"); 154 dump_c_initializer(TAG_BYTES, tag); 155 diff++; 156 } 157 } 158 159 return diff; 160 }