1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License (), 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 2025 RackTop Systems, Inc. 14 */ 15 16 #include <sys/types.h> 17 18 /* 19 * Test data from RFC4231 20 */ 21 22 static uint8_t KEY0[] = { 23 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 24 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 25 0x0b, 0x0b, 0x0b, 0x0b 26 }; 27 28 /* 29 * Test 1 30 */ 31 32 /* "Hi There" */ 33 static uint8_t DATA0[] = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }; 34 35 /* HMAC-SHA-256 */ 36 static uint8_t HMAC0[] = { 37 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 38 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, 39 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 40 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7 41 }; 42 43 44 /* 45 * Test 2 46 */ 47 48 /* "Jefe" */ 49 static uint8_t KEY1[] = { 0x4a, 0x65, 0x66, 0x65 }; 50 51 /* "what do ya want for nothing?" */ 52 static uint8_t DATA1[] = { 53 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20, 54 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 55 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68, 56 0x69, 0x6e, 0x67, 0x3f 57 }; 58 59 /* HMAC-SHA-256 */ 60 static uint8_t HMAC1[] = { 61 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 62 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, 63 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, 64 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 65 }; 66 67 68 /* 69 * Test 3 70 */ 71 72 static uint8_t KEY2[] = { 73 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 74 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 75 0xaa, 0xaa, 0xaa, 0xaa 76 }; 77 78 static uint8_t DATA2[] = { 79 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 80 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 81 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 82 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 83 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 84 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 85 0xdd, 0xdd 86 }; 87 88 /* HMAC-SHA-256 */ 89 static uint8_t HMAC2[] = { 90 0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46, 91 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7, 92 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22, 93 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe 94 }; 95 96 97 /* 98 * Test 4 99 */ 100 101 static uint8_t KEY3[] = { 102 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 103 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 104 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 105 0x19 106 }; 107 108 static uint8_t DATA3[] = { 109 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 110 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 111 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 112 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 113 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 114 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 115 0xcd, 0xcd 116 }; 117 118 /* HMAC-SHA-256 */ 119 static uint8_t HMAC3[] = { 120 0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e, 121 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a, 122 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07, 123 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b 124 }; 125 126 127 /* 128 * Test 5 129 */ 130 131 static uint8_t KEY4[] = { 132 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 133 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 134 0x0c, 0x0c, 0x0c, 0x0c 135 }; 136 137 /* "Test With Truncation" */ 138 static uint8_t DATA4[] = { 139 0x54, 0x65, 0x73, 0x74, 0x20, 0x57, 0x69, 0x74, 140 0x68, 0x20, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 141 0x74, 0x69, 0x6f, 0x6e 142 }; 143 144 /* HMAC-SHA-256 */ 145 static uint8_t HMAC4[] = { 146 0xa3, 0xb6, 0x16, 0x74, 0x73, 0x10, 0x0e, 0xe0, 147 0x6e, 0x0c, 0x79, 0x6c, 0x29, 0x55, 0x55, 0x2b, 148 /* supposed to truncate here, but we can match the whole */ 149 0xfa, 0x6f, 0x7c, 0x0a, 0x6a, 0x8a, 0xef, 0x8b, 150 0x93, 0xf8, 0x60, 0xaa, 0xb0, 0xcd, 0x20, 0xc5 151 }; 152 153 154 /* 155 * Test 6 156 */ 157 158 static uint8_t KEY5[] = { 159 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 160 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 161 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 162 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 163 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 164 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 165 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 166 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 167 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 168 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 169 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 170 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 171 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 172 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 173 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 174 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 175 0xaa, 0xaa, 0xaa 176 }; 177 178 /* "Test Using Larger Than Block-Size Key - Hash Key First" */ 179 static uint8_t DATA5[] = { 180 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69, 181 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 182 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42, 183 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, 184 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20, 185 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, 186 0x20, 0x46, 0x69, 0x72, 0x73, 0x74 187 }; 188 189 /* HMAC-SHA-256 */ 190 static uint8_t HMAC5[] = { 191 0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, 192 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, 193 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14, 194 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54 195 }; 196 197 198 static uint8_t KEY6[] = { 199 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 200 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 201 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 202 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 203 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 204 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 205 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 206 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 207 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 208 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 209 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 210 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 211 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 212 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 213 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 214 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 215 0xaa, 0xaa, 0xaa 216 }; 217 218 /* 219 * "This is a test using a larger than block-size key and a larger than " 220 * "block-size data. The key needs to be hashed before being used by the " 221 * "HMAC algorithm." 222 */ 223 static uint8_t DATA6[] = { 224 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 225 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75, 226 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c, 227 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 228 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 229 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65, 230 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 231 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 232 0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 233 0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, 234 0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65, 235 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, 236 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 237 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20, 238 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62, 239 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 240 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 241 0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c, 242 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e 243 }; 244 245 /* HMAC-SHA-256 */ 246 static uint8_t HMAC6[] = { 247 0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb, 248 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44, 249 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93, 250 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2 251 }; 252