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 */ 15 16 #ifndef _AES_CBC_H 17 #define _AES_CBC_H 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /* 24 * Test vectors 25 * RFC3602 section 4 26 */ 27 28 static uint8_t CBC1_KEY[16] = { 29 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b, 30 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06, 31 }; 32 static uint8_t CBC1_IV[16] = { 33 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30, 34 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41, 35 }; 36 static uint8_t CBC1_DATA[] = { 37 'S', 'i', 'n', 'g', 'l', 'e', ' ', 'b', 38 'l', 'o', 'c', 'k', ' ', 'm', 's', 'g', 39 }; 40 static uint8_t CBC1_RES[] = { 41 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8, 42 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a, 43 }; 44 45 static uint8_t CBC2_KEY[] = { 46 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 47 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a, 48 }; 49 static uint8_t CBC2_IV[] = { 50 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 51 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 52 }; 53 static uint8_t CBC2_DATA[] = { 54 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 55 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 56 57 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 58 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f 59 }; 60 static uint8_t CBC2_RES[] = { 61 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 62 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a, 63 64 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 65 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1, 66 }; 67 68 static uint8_t CBC3_KEY[] = { 69 0x6c, 0x3e, 0xa0, 0x47, 0x76, 0x30, 0xce, 0x21, 70 0xa2, 0xce, 0x33, 0x4a, 0xa7, 0x46, 0xc2, 0xcd, 71 }; 72 static uint8_t CBC3_IV[] = { 73 0xc7, 0x82, 0xdc, 0x4c, 0x09, 0x8c, 0x66, 0xcb, 74 0xd9, 0xcd, 0x27, 0xd8, 0x25, 0x68, 0x2c, 0x81, 75 }; 76 static uint8_t CBC3_DATA[] = { 77 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 78 'a', ' ', '4', '8', '-', 'b', 'y', 't', 79 80 'e', ' ', 'm', 'e', 's', 's', 'a', 'g', 81 'e', ' ', '(', 'e', 'x', 'a', 'c', 't', 82 83 'l', 'y', ' ', '3', ' ', 'A', 'E', 'S', 84 ' ', 'b', 'l', 'o', 'c', 'k', 's', ')', 85 }; 86 87 static uint8_t CBC3_RES[] = { 88 0xd0, 0xa0, 0x2b, 0x38, 0x36, 0x45, 0x17, 0x53, 89 0xd4, 0x93, 0x66, 0x5d, 0x33, 0xf0, 0xe8, 0x86, 90 91 0x2d, 0xea, 0x54, 0xcd, 0xb2, 0x93, 0xab, 0xc7, 92 0x50, 0x69, 0x39, 0x27, 0x67, 0x72, 0xf8, 0xd5, 93 94 0x02, 0x1c, 0x19, 0x21, 0x6b, 0xad, 0x52, 0x5c, 95 0x85, 0x79, 0x69, 0x5d, 0x83, 0xba, 0x26, 0x84, 96 }; 97 98 static uint8_t CBC4_KEY[] = { 99 0x56, 0xe4, 0x7a, 0x38, 0xc5, 0x59, 0x89, 0x74, 100 0xbc, 0x46, 0x90, 0x3d, 0xba, 0x29, 0x03, 0x49, 101 }; 102 static uint8_t CBC4_IV[] = { 103 0x8c, 0xe8, 0x2e, 0xef, 0xbe, 0xa0, 0xda, 0x3c, 104 0x44, 0x69, 0x9e, 0xd7, 0xdb, 0x51, 0xb7, 0xd9, 105 }; 106 static uint8_t CBC4_DATA[] = { 107 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 108 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 109 110 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 111 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 112 113 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 114 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 115 116 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 117 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 118 }; 119 static uint8_t CBC4_RES[] = { 120 0xc3, 0x0e, 0x32, 0xff, 0xed, 0xc0, 0x77, 0x4e, 121 0x6a, 0xff, 0x6a, 0xf0, 0x86, 0x9f, 0x71, 0xaa, 122 123 0x0f, 0x3a, 0xf0, 0x7a, 0x9a, 0x31, 0xa9, 0xc6, 124 0x84, 0xdb, 0x20, 0x7e, 0xb0, 0xef, 0x8e, 0x4e, 125 126 0x35, 0x90, 0x7a, 0xa6, 0x32, 0xc3, 0xff, 0xdf, 127 0x86, 0x8b, 0xb7, 0xb2, 0x9d, 0x3d, 0x46, 0xad, 128 129 0x83, 0xce, 0x9f, 0x9a, 0x10, 0x2e, 0xe9, 0x9d, 130 0x49, 0xa5, 0x3e, 0x87, 0xf4, 0xc3, 0xda, 0x55, 131 }; 132 133 uint8_t *DATA[] = { 134 CBC1_DATA, CBC2_DATA, CBC3_DATA, CBC4_DATA 135 }; 136 137 size_t DATALEN[] = { 138 sizeof (CBC1_DATA), sizeof (CBC2_DATA), 139 sizeof (CBC3_DATA), sizeof (CBC4_DATA), 140 }; 141 142 uint8_t *KEY[] = { 143 CBC1_KEY, CBC2_KEY, CBC3_KEY, CBC4_KEY 144 }; 145 146 size_t KEYLEN[] = { 147 sizeof (CBC1_KEY), sizeof (CBC2_KEY), 148 sizeof (CBC3_KEY), sizeof (CBC4_KEY), 149 }; 150 151 uint8_t *IV[] = { 152 CBC1_IV, CBC2_IV, CBC3_IV, CBC4_IV 153 }; 154 155 size_t IVLEN[] = { 156 sizeof (CBC1_IV), sizeof (CBC2_IV), 157 sizeof (CBC3_IV), sizeof (CBC4_IV), 158 }; 159 160 uint8_t *RES[] = { 161 CBC1_RES, CBC2_RES, CBC3_RES, CBC4_RES 162 }; 163 164 size_t RESLEN[] = { 165 sizeof (CBC1_RES), sizeof (CBC2_RES), 166 sizeof (CBC3_RES), sizeof (CBC4_RES), 167 }; 168 169 #ifdef __cplusplus 170 } 171 #endif 172 173 #endif /* _AES_CBC_H */ 174