1/* 2 * aeskeywrap_vectors.h 3 * AES keywrap test vectors 4 * 5 * Copyright (C) 2015, Broadcom Corporation 6 * All Rights Reserved. 7 * 8 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation; 9 * the contents of this file may not be disclosed to third parties, copied 10 * or duplicated in any form, in whole or in part, without the prior 11 * written permission of Broadcom Corporation. 12 * 13 * $Id: aeskeywrap_vectors.h 241182 2011-02-17 21:50:03Z $ 14 */ 15 16#include <typedefs.h> 17#include <bcmcrypto/aeskeywrap.h> 18 19/* Test vector data from: 20 * RFC3394 Advanced Encryption Standard (AES) Key Wrap Algorithm 21 * Copyright (C) The Internet Society (2002). All Rights Reserved. 22 */ 23 24/* 4.1 Wrap 128 bits of Key Data with a 128-bit KEK */ 25uint8 key_00[] = { 26 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 27 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 28 }; 29 30uint8 input_00[] = { 31 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 32 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 33 }; 34 35uint8 ref_00[] = { 36 0x1F, 0xA6, 0x8B, 0x0A, 0x81, 0x12, 0xB4, 0x47, 37 0xAE, 0xF3, 0x4B, 0xD8, 0xFB, 0x5A, 0x7B, 0x82, 38 0x9D, 0x3E, 0x86, 0x23, 0x71, 0xD2, 0xCF, 0xE5 39 }; 40 41/* 4.2 Wrap 128 bits of Key Data with a 192-bit KEK */ 42uint8 key_01[] = { 43 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 44 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 45 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 46 }; 47 48uint8 input_01[] = { 49 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 50 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 51 }; 52 53uint8 ref_01[] = { 54 0x96, 0x77, 0x8B, 0x25, 0xAE, 0x6C, 0xA4, 0x35, 55 0xF9, 0x2B, 0x5B, 0x97, 0xC0, 0x50, 0xAE, 0xD2, 56 0x46, 0x8A, 0xB8, 0xA1, 0x7A, 0xD8, 0x4E, 0x5D 57 }; 58 59/* 4.3 Wrap 128 bits of Key Data with a 256-bit KEK */ 60uint8 key_02[] = { 61 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 62 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 63 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 64 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 65 }; 66 67uint8 input_02[] = { 68 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 69 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 70 }; 71 72uint8 ref_02[] = { 73 0x64, 0xE8, 0xC3, 0xF9, 0xCE, 0x0F, 0x5B, 0xA2, 74 0x63, 0xE9, 0x77, 0x79, 0x05, 0x81, 0x8A, 0x2A, 75 0x93, 0xC8, 0x19, 0x1E, 0x7D, 0x6E, 0x8A, 0xE7 76 }; 77 78/* 4.4 Wrap 192 bits of Key Data with a 192-bit KEK */ 79uint8 key_03[] = { 80 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 81 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 82 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 83 }; 84 85uint8 input_03[] = { 86 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 87 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 88 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 89 }; 90 91uint8 ref_03[] = { 92 0x03, 0x1D, 0x33, 0x26, 0x4E, 0x15, 0xD3, 0x32, 93 0x68, 0xF2, 0x4E, 0xC2, 0x60, 0x74, 0x3E, 0xDC, 94 0xE1, 0xC6, 0xC7, 0xDD, 0xEE, 0x72, 0x5A, 0x93, 95 0x6B, 0xA8, 0x14, 0x91, 0x5C, 0x67, 0x62, 0xD2 96 }; 97 98/* 4.5 Wrap 192 bits of Key Data with a 256-bit KEK */ 99uint8 key_04[] = { 100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 101 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 103 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 104 }; 105 106uint8 input_04[] = { 107 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 108 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 109 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 110 }; 111 112uint8 ref_04[] = { 113 0xA8, 0xF9, 0xBC, 0x16, 0x12, 0xC6, 0x8B, 0x3F, 114 0xF6, 0xE6, 0xF4, 0xFB, 0xE3, 0x0E, 0x71, 0xE4, 115 0x76, 0x9C, 0x8B, 0x80, 0xA3, 0x2C, 0xB8, 0x95, 116 0x8C, 0xD5, 0xD1, 0x7D, 0x6B, 0x25, 0x4D, 0xA1 117 }; 118 119/* 4.6 Wrap 256 bits of Key Data with a 256-bit KEK */ 120uint8 key_05[] = { 121 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 122 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 123 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 124 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 125 }; 126 127uint8 input_05[] = { 128 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 129 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 130 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 131 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 132 }; 133 134uint8 ref_05[] = { 135 0x28, 0xC9, 0xF4, 0x04, 0xC4, 0xB8, 0x10, 0xF4, 136 0xCB, 0xCC, 0xB3, 0x5C, 0xFB, 0x87, 0xF8, 0x26, 137 0x3F, 0x57, 0x86, 0xE2, 0xD8, 0x0E, 0xD3, 0x26, 138 0xCB, 0xC7, 0xF0, 0xE7, 0x1A, 0x99, 0xF4, 0x3B, 139 0xFB, 0x98, 0x8B, 0x9B, 0x7A, 0x02, 0xDD, 0x21 140 }; 141 142/* Test vectors generated at Broadcom */ 143/* Wrap 256 bits of Key Data with a 128-bit KEK */ 144uint8 key_06[] = { 145 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 146 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 147 }; 148 149uint8 input_06[] = { 150 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 151 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 152 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 153 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 154 }; 155 156uint8 ref_06[] = { 157 0x11, 0x82, 0x68, 0x40, 0x77, 0x4D, 0x99, 0x3F, 158 0xF9, 0xC2, 0xFA, 0x02, 0xCC, 0xA3, 0xCE, 0xA0, 159 0xE9, 0x3B, 0x1E, 0x1C, 0xF9, 0x63, 0x61, 0xF9, 160 0x3E, 0xA6, 0xDC, 0x2F, 0x34, 0x51, 0x94, 0xE7, 161 0xB3, 0x0F, 0x96, 0x4C, 0x79, 0xF9, 0xE6, 0x1D 162 }; 163 164/* aes_wrap failure test 1: input too long */ 165uint8 key_10[] = { 166 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 167 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 168 }; 169 170uint8 input_10[AKW_MAX_WRAP_LEN+1]; 171 172uint8 ref_10[] = ""; 173 174/* aes_wrap failure test 1: input length not multiple of block length */ 175uint8 key_11[] = { 176 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 177 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 178 }; 179 180uint8 input_11[] = { 181 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 182 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 183 0x00 184 }; 185 186uint8 ref_11[] = ""; 187 188/* aes_unwrap failure test 0: input too long */ 189uint8 key_20[] = { 190 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 191 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 192 }; 193 194uint8 input_20[AKW_MAX_WRAP_LEN+1]; 195 196uint8 ref_20[] = ""; 197 198/* aes_unwrap failure test 1: input length not multiple of block length */ 199uint8 key_21[] = { 200 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 201 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 202 }; 203 204uint8 input_21[] = { 205 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 206 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 207 0x00 208 }; 209 210uint8 ref_21[] = ""; 211 212/* aes_unwrap failure test 2: unwraped data incorrect */ 213uint8 key_22[] = { 214 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 215 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 216 }; 217 218uint8 input_22[] = { 219 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 220 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF 221 }; 222 223uint8 ref_22[] = ""; 224 225 226typedef struct { 227 int kl; 228 uint8 *key; 229 int il; 230 uint8 *input; 231 uint8 *ref; 232} akw_vector_t; 233 234#define AKW_VECTOR_ENTRY(x) \ 235 { sizeof(key_##x), key_##x, sizeof(input_##x), input_##x, ref_##x } 236 237akw_vector_t akw_vec[] = { 238 AKW_VECTOR_ENTRY(00), 239 AKW_VECTOR_ENTRY(01), 240 AKW_VECTOR_ENTRY(02), 241 AKW_VECTOR_ENTRY(03), 242 AKW_VECTOR_ENTRY(04), 243 AKW_VECTOR_ENTRY(05), 244 AKW_VECTOR_ENTRY(06) 245 }; 246 247akw_vector_t akw_wrap_fail_vec[] = { 248 AKW_VECTOR_ENTRY(10), 249 AKW_VECTOR_ENTRY(11) 250 }; 251 252akw_vector_t akw_unwrap_fail_vec[] = { 253 AKW_VECTOR_ENTRY(20), 254 AKW_VECTOR_ENTRY(21), 255 AKW_VECTOR_ENTRY(22) 256 }; 257