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 2019 Joyent, Inc. 14 */ 15 16 #include <sys/crypto/ioctl.h> 17 #include <sys/sha1.h> 18 19 /* 20 * Test data from RFC2202 21 */ 22 23 static uint8_t KEY0[] = { 24 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 25 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 26 0x0b, 0x0b, 0x0b, 0x0b 27 }; 28 29 /* "Hi There" */ 30 static uint8_t DATA0[] = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }; 31 32 static uint8_t HMAC0[] = { 33 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 34 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 35 0xf1, 0x46, 0xbe, 0x00 36 }; 37 38 39 /* "Jefe" */ 40 static uint8_t KEY1[] = { 0x4a, 0x65, 0x66, 0x65 }; 41 42 /* "what do ya want for nothing?" */ 43 static uint8_t DATA1[] = { 44 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20, 45 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 46 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68, 47 0x69, 0x6e, 0x67, 0x3f 48 }; 49 50 static uint8_t HMAC1[] = { 51 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 52 0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 53 0x25, 0x9a, 0x7c, 0x79 54 }; 55 56 57 static uint8_t KEY2[] = { 58 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 59 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 60 0xaa, 0xaa, 0xaa, 0xaa 61 }; 62 63 static uint8_t DATA2[] = { 64 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 65 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 66 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 67 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 68 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 69 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 70 0xdd, 0xdd 71 }; 72 73 static uint8_t HMAC2[] = { 74 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 75 0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 76 0x63, 0xf1, 0x75, 0xd3 77 }; 78 79 80 static uint8_t KEY3[] = { 81 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 82 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 83 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 84 0x19 85 }; 86 87 static uint8_t DATA3[] = { 88 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 89 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 90 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 91 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 92 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 93 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 94 0xcd, 0xcd 95 }; 96 97 static uint8_t HMAC3[] = { 98 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 99 0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 100 0x2d, 0x72, 0x35, 0xda 101 }; 102 103 104 static uint8_t KEY4[] = { 105 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 106 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 107 0x0c, 0x0c, 0x0c, 0x0c 108 }; 109 110 /* "Test With Truncation" */ 111 static uint8_t DATA4[] = { 112 0x54, 0x65, 0x73, 0x74, 0x20, 0x57, 0x69, 0x74, 113 0x68, 0x20, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 114 0x74, 0x69, 0x6f, 0x6e 115 }; 116 117 static uint8_t HMAC4[] = { 118 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 119 0xe7, 0xf2, 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 120 0x4a, 0x9a, 0x5a, 0x04 121 }; 122 123 124 static uint8_t KEY5[] = { 125 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 126 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 127 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 128 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 129 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 130 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 131 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 132 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 133 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 134 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa 135 }; 136 137 /* "Test Using Larger Than Block-Size Key - Hash Key First" */ 138 static uint8_t DATA5[] = { 139 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69, 140 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 141 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42, 142 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, 143 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20, 144 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, 145 0x20, 0x46, 0x69, 0x72, 0x73, 0x74 146 }; 147 148 static uint8_t HMAC5[] = { 149 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 150 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 151 0xed, 0x40, 0x21, 0x12 152 }; 153 154 155 static uint8_t KEY6[] = { 156 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 157 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 158 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 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 }; 167 168 /* 169 * "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" 170 */ 171 static uint8_t DATA6[] = { 172 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69, 173 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 174 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42, 175 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, 176 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x61, 0x6e, 177 0x64, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x72, 178 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x4f, 0x6e, 179 0x65, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 180 0x53, 0x69, 0x7a, 0x65, 0x20, 0x44, 0x61, 0x74, 181 0x61 182 }; 183 static uint8_t HMAC6[] = { 184 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 185 0x6d, 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 186 0xbb, 0xff, 0x1a, 0x91 187 }; 188 189 uint8_t *DATA[] = { DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6 }; 190 191 size_t DATALEN[] = { 192 sizeof (DATA0), sizeof (DATA1), sizeof (DATA2), sizeof (DATA3), 193 sizeof (DATA4), sizeof (DATA5), sizeof (DATA6) 194 }; 195 196 uint8_t *KEY[] = { KEY0, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6 }; 197 198 size_t KEYLEN[] = { 199 sizeof (KEY0), sizeof (KEY1), sizeof (KEY2), sizeof (KEY3), 200 sizeof (KEY4), sizeof (KEY5), sizeof (KEY6) 201 }; 202 203 uint8_t *HMAC[] = { HMAC0, HMAC1, HMAC2, HMAC3, HMAC4, HMAC5, HMAC6 }; 204 205 char *mechname = SUN_CKM_SHA1_HMAC; 206 size_t msgcount = 7; 207 size_t hmac_len = SHA1_DIGEST_LENGTH; 208