1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2015 Nexenta Systems, Inc. All rights reserved. 14 * Copyright 2019 Joyent, Inc. 15 */ 16 17 #ifndef _AES_CBC_PAD_H 18 #define _AES_CBC_PAD_H 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /* 25 * A search for test vectors that included PKCS7 padding has proven 26 * unsuccessful. Instead, a few of the test aes_cbc test vectors 27 * were used as a starting point, adding extra data to the xx_DATA[] 28 * arrays to test padding. 29 * 30 * To compute the xx_RES[] (encrypted) values, openssl on an machine 31 * running macOS Mojave was used. 32 */ 33 34 static uint8_t CBC_PAD1_KEY[16] = { 35 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b, 36 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06, 37 }; 38 static uint8_t CBC_PAD1_IV[16] = { 39 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30, 40 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41, 41 }; 42 static uint8_t CBC_PAD1_DATA[] = { 43 'S', 'i', 'n', 'g', 'l', 'e', ' ', 'b', 44 'l', 'o', 'c', 'k', ' ', 'm', 's', 'g', 45 }; 46 47 static uint8_t CBC_PAD1_RES[] = { 48 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8, 49 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a, 50 51 0xb9, 0x7c, 0x82, 0x5e, 0x1c, 0x78, 0x51, 0x46, 52 0x54, 0x2d, 0x39, 0x69, 0x41, 0xbc, 0xe5, 0x5d 53 }; 54 55 56 static uint8_t CBC_PAD2_KEY[] = { 57 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 58 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 59 }; 60 static uint8_t CBC_PAD2_IV[] = { 61 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 62 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 63 }; 64 static uint8_t CBC_PAD2_DATA[] = { 65 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 66 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 67 68 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 69 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 70 }; 71 72 static uint8_t CBC_PAD2_RES[] = { 73 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 74 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 75 76 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 77 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 78 79 0xbc, 0xfd, 0x81, 0x02, 0x22, 0x02, 0x36, 0x6b, 80 0xde, 0x6d, 0xd2, 0x60, 0xa1, 0x58, 0x41, 0xa1 81 }; 82 83 84 static uint8_t CBC_PAD3_KEY[] = { 85 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 86 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 87 }; 88 static uint8_t CBC_PAD3_IV[] = { 89 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 90 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 91 }; 92 93 static uint8_t CBC_PAD3_DATA[] = { 94 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 95 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 96 97 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 98 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 99 100 0x00, 101 }; 102 103 static uint8_t CBC_PAD3_RES[] = { 104 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 105 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 106 107 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 108 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 109 110 0xde, 0xf6, 0x23, 0xa9, 0xc6, 0xf5, 0xc6, 0xb9, 111 0x56, 0x14, 0x49, 0x60, 0xb2, 0x3d, 0x2f, 0x7f 112 }; 113 114 115 static uint8_t CBC_PAD4_KEY[] = { 116 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 117 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 118 }; 119 120 static uint8_t CBC_PAD4_IV[] = { 121 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 122 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 123 }; 124 125 static uint8_t CBC_PAD4_DATA[] = { 126 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 127 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 128 129 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 130 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 131 132 0x00, 0x01, 133 }; 134 135 static uint8_t CBC_PAD4_RES[] = { 136 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 137 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 138 139 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 140 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 141 142 0x30, 0xce, 0x1d, 0xd5, 0xd1, 0xb3, 0x0e, 0xde, 143 0x59, 0x9c, 0x3b, 0x31, 0x1b, 0x62, 0xf0, 0x23 144 }; 145 146 147 static uint8_t CBC_PAD5_KEY[] = { 148 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 149 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 150 }; 151 152 static uint8_t CBC_PAD5_IV[] = { 153 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 154 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 155 }; 156 157 static uint8_t CBC_PAD5_DATA[] = { 158 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 159 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 160 161 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 162 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 163 164 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 165 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 166 }; 167 168 static uint8_t CBC_PAD5_RES[] = { 169 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 170 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 171 172 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 173 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 174 175 0xd3, 0x1c, 0x5a, 0x9d, 0xc4, 0x37, 0xa7, 0x7a, 176 0x74, 0xca, 0xb3, 0x69, 0x2b, 0x7b, 0x1f, 0xad 177 }; 178 179 180 static uint8_t CBC_PAD6_KEY[] = { 181 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 182 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 183 }; 184 185 static uint8_t CBC_PAD6_IV[] = { 186 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 187 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 188 }; 189 190 static uint8_t CBC_PAD6_DATA[] = { 191 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 192 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 193 194 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 195 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 196 197 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 198 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 199 }; 200 201 static uint8_t CBC_PAD6_RES[] = { 202 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 203 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 204 205 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 206 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 207 208 0x79, 0x33, 0x83, 0xff, 0x4a, 0x64, 0x9d, 0xe3, 209 0x4d, 0x6f, 0x19, 0x94, 0x28, 0x7d, 0x65, 0x67 210 }; 211 212 uint8_t *DATA[] = { 213 CBC_PAD1_DATA, CBC_PAD2_DATA, CBC_PAD3_DATA, 214 CBC_PAD4_DATA, CBC_PAD5_DATA, CBC_PAD6_DATA, 215 }; 216 217 size_t DATALEN[] = { 218 sizeof (CBC_PAD1_DATA), sizeof (CBC_PAD2_DATA), 219 sizeof (CBC_PAD3_DATA), sizeof (CBC_PAD4_DATA), 220 sizeof (CBC_PAD5_DATA), sizeof (CBC_PAD6_DATA), 221 }; 222 223 uint8_t *KEY[] = { 224 CBC_PAD1_KEY, CBC_PAD2_KEY, CBC_PAD3_KEY, 225 CBC_PAD4_KEY, CBC_PAD5_KEY, CBC_PAD6_KEY, 226 }; 227 228 size_t KEYLEN[] = { 229 sizeof (CBC_PAD1_KEY), sizeof (CBC_PAD2_KEY), 230 sizeof (CBC_PAD3_KEY), sizeof (CBC_PAD4_KEY), 231 sizeof (CBC_PAD5_KEY), sizeof (CBC_PAD6_KEY), 232 }; 233 234 uint8_t *IV[] = { 235 CBC_PAD1_IV, CBC_PAD2_IV, CBC_PAD3_IV, 236 CBC_PAD4_IV, CBC_PAD5_IV, CBC_PAD6_IV, 237 }; 238 239 size_t IVLEN[] = { 240 sizeof (CBC_PAD1_IV), sizeof (CBC_PAD2_IV), 241 sizeof (CBC_PAD3_IV), sizeof (CBC_PAD4_IV), 242 sizeof (CBC_PAD5_IV), sizeof (CBC_PAD6_IV), 243 }; 244 245 uint8_t *RES[] = { 246 CBC_PAD1_RES, CBC_PAD2_RES, CBC_PAD3_RES, 247 CBC_PAD4_RES, CBC_PAD5_RES, CBC_PAD6_RES, 248 }; 249 250 size_t RESLEN[] = { 251 sizeof (CBC_PAD1_RES), sizeof (CBC_PAD2_RES), 252 sizeof (CBC_PAD3_RES), sizeof (CBC_PAD4_RES), 253 sizeof (CBC_PAD5_RES), sizeof (CBC_PAD6_RES), 254 }; 255 256 #ifdef __cplusplus 257 } 258 #endif 259 260 #endif /* _AES_CBC_PAD_H */ 261