1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2016-2017 Intel Corporation 3 */ 4 5 #ifndef TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_ 6 #define TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_ 7 8 struct kasumi_test_data { 9 struct { 10 uint8_t data[64]; 11 unsigned int len; 12 } key; 13 14 struct { 15 alignas(16) uint8_t data[64]; 16 unsigned int len; 17 } cipher_iv; 18 19 /* 20 * Data may include COUNT (4 bytes), FRESH (4 bytes), 21 * DIRECTION (1 bit), plus 1 0*, with enough 0s, 22 * so total length is multiple of 8 or 64 bits 23 */ 24 struct { 25 uint8_t data[1024]; 26 unsigned int len; /* length must be in Bits */ 27 } plaintext; 28 29 struct { 30 unsigned int len; 31 } validDataLenInBits; 32 33 struct { 34 uint8_t data[1024]; 35 unsigned int len; /* length must be in Bits */ 36 } ciphertext; 37 38 struct { 39 unsigned int len; 40 } validCipherLenInBits; 41 42 struct { 43 unsigned int len; 44 } validCipherOffsetInBits; 45 46 /* Actual length of data to be hashed */ 47 struct { 48 unsigned int len; 49 } validAuthLenInBits; 50 51 struct { 52 uint8_t data[64]; 53 unsigned int len; 54 unsigned int offset_bytes; /* offset must be in Bytes */ 55 } digest; 56 57 }; 58 59 struct kasumi_test_data kasumi_test_case_1 = { 60 .key = { 61 .data = { 62 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00, 63 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48 64 }, 65 .len = 16 66 }, 67 .cipher_iv = { 68 .data = { 69 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00 70 }, 71 .len = 8 72 }, 73 .plaintext = { 74 .data = { 75 0x7E, 0xC6, 0x12, 0x72, 0x74, 0x3B, 0xF1, 0x61, 76 0x47, 0x26, 0x44, 0x6A, 0x6C, 0x38, 0xCE, 0xD1, 77 0x66, 0xF6, 0xCA, 0x76, 0xEB, 0x54, 0x30, 0x04, 78 0x42, 0x86, 0x34, 0x6C, 0xEF, 0x13, 0x0F, 0x92, 79 0x92, 0x2B, 0x03, 0x45, 0x0D, 0x3A, 0x99, 0x75, 80 0xE5, 0xBD, 0x2E, 0xA0, 0xEB, 0x55, 0xAD, 0x8E, 81 0x1B, 0x19, 0x9E, 0x3E, 0xC4, 0x31, 0x60, 0x20, 82 0xE9, 0xA1, 0xB2, 0x85, 0xE7, 0x62, 0x79, 0x53, 83 0x59, 0xB7, 0xBD, 0xFD, 0x39, 0xBE, 0xF4, 0xB2, 84 0x48, 0x45, 0x83, 0xD5, 0xAF, 0xE0, 0x82, 0xAE, 85 0xE6, 0x38, 0xBF, 0x5F, 0xD5, 0xA6, 0x06, 0x19, 86 0x39, 0x01, 0xA0, 0x8F, 0x4A, 0xB4, 0x1A, 0xAB, 87 0x9B, 0x13, 0x48, 0x80 88 }, 89 .len = 800 90 }, 91 .ciphertext = { 92 .data = { 93 0xD1, 0xE2, 0xDE, 0x70, 0xEE, 0xF8, 0x6C, 0x69, 94 0x64, 0xFB, 0x54, 0x2B, 0xC2, 0xD4, 0x60, 0xAA, 95 0xBF, 0xAA, 0x10, 0xA4, 0xA0, 0x93, 0x26, 0x2B, 96 0x7D, 0x19, 0x9E, 0x70, 0x6F, 0xC2, 0xD4, 0x89, 97 0x15, 0x53, 0x29, 0x69, 0x10, 0xF3, 0xA9, 0x73, 98 0x01, 0x26, 0x82, 0xE4, 0x1C, 0x4E, 0x2B, 0x02, 99 0xBE, 0x20, 0x17, 0xB7, 0x25, 0x3B, 0xBF, 0x93, 100 0x09, 0xDE, 0x58, 0x19, 0xCB, 0x42, 0xE8, 0x19, 101 0x56, 0xF4, 0xC9, 0x9B, 0xC9, 0x76, 0x5C, 0xAF, 102 0x53, 0xB1, 0xD0, 0xBB, 0x82, 0x79, 0x82, 0x6A, 103 0xDB, 0xBC, 0x55, 0x22, 0xE9, 0x15, 0xC1, 0x20, 104 0xA6, 0x18, 0xA5, 0xA7, 0xF5, 0xE8, 0x97, 0x08, 105 0x93, 0x39, 0x65, 0x0F 106 }, 107 .len = 800 108 }, 109 .validCipherLenInBits = { 110 .len = 798 111 }, 112 .validCipherOffsetInBits = { 113 .len = 0 114 } 115 }; 116 117 struct kasumi_test_data kasumi_test_case_2 = { 118 .key = { 119 .data = { 120 0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A, 121 0x7C, 0x36, 0xEA, 0x55, 0xE9, 0x60, 0x56, 0x95 122 }, 123 .len = 16 124 }, 125 .cipher_iv = { 126 .data = { 127 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00 128 }, 129 .len = 8 130 }, 131 .plaintext = { 132 .data = { 133 0x10, 0x11, 0x12, 0x31, 0xE0, 0x60, 0x25, 0x3A, 134 0x43, 0xFD, 0x3F, 0x57, 0xE3, 0x76, 0x07, 0xAB, 135 0x28, 0x27, 0xB5, 0x99, 0xB6, 0xB1, 0xBB, 0xDA, 136 0x37, 0xA8, 0xAB, 0xCC, 0x5A, 0x8C, 0x55, 0x0D, 137 0x1B, 0xFB, 0x2F, 0x49, 0x46, 0x24, 0xFB, 0x50, 138 0x36, 0x7F, 0xA3, 0x6C, 0xE3, 0xBC, 0x68, 0xF1, 139 0x1C, 0xF9, 0x3B, 0x15, 0x10, 0x37, 0x6B, 0x02, 140 0x13, 0x0F, 0x81, 0x2A, 0x9F, 0xA1, 0x69, 0xD8 141 }, 142 .len = 512 143 }, 144 .ciphertext = { 145 .data = { 146 0x3D, 0xEA, 0xCC, 0x7C, 0x15, 0x82, 0x1C, 0xAA, 147 0x89, 0xEE, 0xCA, 0xDE, 0x9B, 0x5B, 0xD3, 0x61, 148 0x4B, 0xD0, 0xC8, 0x41, 0x9D, 0x71, 0x03, 0x85, 149 0xDD, 0xBE, 0x58, 0x49, 0xEF, 0x1B, 0xAC, 0x5A, 150 0xE8, 0xB1, 0x4A, 0x5B, 0x0A, 0x67, 0x41, 0x52, 151 0x1E, 0xB4, 0xE0, 0x0B, 0xB9, 0xEC, 0xF3, 0xE9, 152 0xF7, 0xCC, 0xB9, 0xCA, 0xE7, 0x41, 0x52, 0xD7, 153 0xF4, 0xE2, 0xA0, 0x34, 0xB6, 0xEA, 0x00, 0xEC 154 }, 155 .len = 512 156 }, 157 .validCipherLenInBits = { 158 .len = 510 159 }, 160 .validCipherOffsetInBits = { 161 .len = 0 162 } 163 }; 164 165 struct kasumi_test_data kasumi_test_case_3 = { 166 .key = { 167 .data = { 168 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20, 169 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52 170 }, 171 .len = 16 172 }, 173 .cipher_iv = { 174 .data = { 175 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00 176 }, 177 .len = 8 178 }, 179 .plaintext = { 180 .data = { 181 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49, 182 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4, 183 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0 184 }, 185 .len = 192 186 }, 187 .ciphertext = { 188 .data = { 189 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49, 190 0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28, 191 0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25, 0xC0 192 }, 193 .len = 192 194 }, 195 .validDataLenInBits = { 196 .len = 192 197 }, 198 .validCipherLenInBits = { 199 .len = 120 200 }, 201 .validAuthLenInBits = { 202 .len = 192 203 }, 204 .validCipherOffsetInBits = { 205 .len = 64 206 }, 207 .digest = { 208 .data = {0x87, 0x5F, 0xE4, 0x89}, 209 .len = 4, 210 .offset_bytes = 0 211 } 212 }; 213 214 struct kasumi_test_data kasumi_test_case_4 = { 215 .key = { 216 .data = { 217 0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C, 218 0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1 219 }, 220 .len = 16 221 }, 222 .cipher_iv = { 223 .data = { 224 0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00, 225 }, 226 .len = 8 227 }, 228 .plaintext = { 229 .data = { 230 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 0x1A, 231 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 0x80, 232 0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC, 233 0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF0 234 }, 235 .len = 256 236 }, 237 .ciphertext = { 238 .data = { 239 0x5B, 0xB9, 0x43, 0x1B, 0xB1, 0xE9, 0x8B, 0xD1, 240 0x1B, 0x93, 0xDB, 0x7C, 0x3D, 0x45, 0x13, 0x65, 241 0x59, 0xBB, 0x86, 0xA2, 0x95, 0xAA, 0x20, 0x4E, 242 0xCB, 0xEB, 0xF6, 0xF7, 0xA5, 0x10, 0x15, 0x10 243 }, 244 .len = 256 245 }, 246 .validCipherLenInBits = { 247 .len = 253 248 }, 249 .validCipherOffsetInBits = { 250 .len = 0 251 } 252 }; 253 254 struct kasumi_test_data kasumi_test_case_5 = { 255 .key = { 256 .data = { 257 0x60, 0x90, 0xEA, 0xE0, 0x4C, 0x83, 0x70, 0x6E, 258 0xEC, 0xBF, 0x65, 0x2B, 0xE8, 0xE3, 0x65, 0x66 259 }, 260 .len = 16 261 }, 262 .cipher_iv = { 263 .data = { 264 0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00 265 }, 266 .len = 8 267 }, 268 .plaintext = { 269 .data = { 270 0x40, 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 271 0x42, 0x86, 0xB2, 0x99, 0x78, 0x3D, 0xAF, 0x44, 272 0x2C, 0x09, 0x9F, 0x7A, 0xB0, 0xF5, 0x8D, 0x5C, 273 0x8E, 0x46, 0xB1, 0x04, 0xF0, 0x8F, 0x01, 0xB4, 274 0x1A, 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 275 0x36, 0xBD, 0x1A, 0x3D, 0x90, 0xDC, 0x3A, 0x41, 276 0xB4, 0x6D, 0x51, 0x67, 0x2A, 0xC4, 0xC9, 0x66, 277 0x3A, 0x2B, 0xE0, 0x63, 0xDA, 0x4B, 0xC8, 0xD2, 278 0x80, 0x8C, 0xE3, 0x3E, 0x2C, 0xCC, 0xBF, 0xC6, 279 0x34, 0xE1, 0xB2, 0x59, 0x06, 0x08, 0x76, 0xA0, 280 0xFB, 0xB5, 0xA4, 0x37, 0xEB, 0xCC, 0x8D, 0x31, 281 0xC1, 0x9E, 0x44, 0x54, 0x31, 0x87, 0x45, 0xE3, 282 0x98, 0x76, 0x45, 0x98, 0x7A, 0x98, 0x6F, 0x2C, 283 0xB0 284 }, 285 .len = 840 286 }, 287 .ciphertext = { 288 .data = { 289 0xDD, 0xB3, 0x64, 0xDD, 0x2A, 0xAE, 0xC2, 0x4D, 290 0xFF, 0x29, 0x19, 0x57, 0xB7, 0x8B, 0xAD, 0x06, 291 0x3A, 0xC5, 0x79, 0xCD, 0x90, 0x41, 0xBA, 0xBE, 292 0x89, 0xFD, 0x19, 0x5C, 0x05, 0x78, 0xCB, 0x9F, 293 0xDE, 0x42, 0x17, 0x56, 0x61, 0x78, 0xD2, 0x02, 294 0x40, 0x20, 0x6D, 0x07, 0xCF, 0xA6, 0x19, 0xEC, 295 0x05, 0x9F, 0x63, 0x51, 0x44, 0x59, 0xFC, 0x10, 296 0xD4, 0x2D, 0xC9, 0x93, 0x4E, 0x56, 0xEB, 0xC0, 297 0xCB, 0xC6, 0x0D, 0x4D, 0x2D, 0xF1, 0x74, 0x77, 298 0x4C, 0xBD, 0xCD, 0x5D, 0xA4, 0xA3, 0x50, 0x31, 299 0x7A, 0x7F, 0x12, 0xE1, 0x94, 0x94, 0x71, 0xF8, 300 0xA2, 0x95, 0xF2, 0x72, 0xE6, 0x8F, 0xC0, 0x71, 301 0x59, 0xB0, 0x7D, 0x8E, 0x2D, 0x26, 0xE4, 0x59, 302 0x9E 303 }, 304 .len = 840 305 }, 306 .validCipherLenInBits = { 307 .len = 837 308 }, 309 .validCipherOffsetInBits = { 310 .len = 0 311 } 312 }; 313 314 struct kasumi_test_data kasumi_test_case_6 = { 315 .key = { 316 .data = { 317 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20, 318 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52 319 }, 320 .len = 16 321 }, 322 .cipher_iv = { 323 .data = { 324 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00 325 }, 326 .len = 8 327 }, 328 .plaintext = { 329 .data = { 330 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49, 331 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4, 332 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0 333 }, 334 .len = 192 335 }, 336 .ciphertext = { 337 .data = { 338 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49, 339 0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28, 340 0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25, 0xC0 341 }, 342 .len = 192 343 }, 344 .validDataLenInBits = { 345 .len = 192 346 }, 347 .validCipherLenInBits = { 348 .len = 120 349 }, 350 .validCipherOffsetInBits = { 351 .len = 64 352 }, 353 .validAuthLenInBits = { 354 .len = 192 355 }, 356 .digest = { 357 .data = {0x0F, 0xD2, 0xAA, 0xB5}, 358 .len = 4, 359 .offset_bytes = 0 360 } 361 }; 362 363 struct kasumi_test_data kasumi_auth_cipher_test_case_2 = { 364 .key = { 365 .data = { 366 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 367 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 368 }, 369 .len = 16 370 }, 371 .cipher_iv = { 372 .data = { 373 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 374 }, 375 .len = 8 376 }, 377 .plaintext = { 378 .data = { 379 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 380 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 381 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 382 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 383 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 384 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 385 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 386 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 387 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 388 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 389 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 390 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 391 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 392 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 393 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 394 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A 395 }, 396 .len = 128 << 3 397 }, 398 .ciphertext = { 399 .data = { 400 0x5A, 0x5A, 0xFA, 0xC6, 0xA9, 0x09, 0x91, 0x74, 401 0x35, 0xAA, 0x85, 0xB0, 0xE0, 0x07, 0x78, 0xDA, 402 0x05, 0x88, 0x4E, 0x8D, 0xEC, 0x41, 0xF3, 0xBC, 403 0x0D, 0x9F, 0xE3, 0xEF, 0x8E, 0x33, 0x22, 0xF3, 404 0x15, 0x4B, 0x12, 0xC2, 0x22, 0x12, 0xD6, 0x46, 405 0xD7, 0x27, 0x20, 0x1D, 0x50, 0x60, 0x9D, 0x42, 406 0xF6, 0x73, 0xF5, 0x28, 0x88, 0xBE, 0x60, 0xEC, 407 0x9C, 0x18, 0x81, 0xC4, 0x0A, 0xF4, 0xD5, 0x7A, 408 0xB5, 0x3F, 0x1A, 0x79, 0xAB, 0x79, 0xDB, 0x24, 409 0xF9, 0x6E, 0x86, 0x78, 0x10, 0x19, 0xAE, 0xD8, 410 0xB2, 0xCA, 0x32, 0x8D, 0xD8, 0x28, 0x8B, 0x2F, 411 0x5B, 0x3C, 0xE3, 0x7D, 0xD3, 0x70, 0x11, 0xDE, 412 0x2C, 0xDC, 0xC1, 0xC6, 0xB6, 0xFD, 0xF3, 0x7D, 413 0x38, 0x97, 0x8B, 0x81, 0x02, 0x88, 0x62, 0x3C, 414 0x1E, 0x1A, 0x93, 0x21, 0xE3, 0x6D, 0xD7, 0x20, 415 0x80, 0xA8, 0xDA, 0x18, 0x8F, 0x58, 0x0F, 0x4E 416 }, 417 .len = 128 << 3 418 }, 419 .validDataLenInBits = { 420 .len = 128 << 3 421 }, 422 .validCipherLenInBits = { 423 .len = 126 << 3 424 }, 425 .validAuthLenInBits = { 426 .len = 124 << 3 427 }, 428 .validCipherOffsetInBits = { 429 .len = 2 << 3 430 }, 431 .digest = { 432 .data = {0x8F, 0x58, 0x0F, 0x4E}, 433 .len = 4, 434 .offset_bytes = 124 435 } 436 }; 437 #endif /* TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_ */ 438