1 /* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef HC_ALG_TEST_CASE_H 17 #define HC_ALG_TEST_CASE_H 18 19 #include <ohos_types.h> // ARRAY_SIZE 20 #include <stdint.h> 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 #define KEY_PAIR_ALIAS_1 "test: key pair 1" 27 #define KEY_PAIR_ALIAS_2 "test: key pair 2" 28 #define SHARED_KEY_ALIAS_1 "test: shared key 1" 29 #define SHARED_KEY_ALIAS_2 "test: shared key 2" 30 #define EXCHANGE_AAD "hichain_iso_exchange" 31 32 enum { 33 NONCE_SIZE = 12, 34 AES_GCM_KEY_LEN = 128 / 8, 35 TAG_LEN = 16, 36 CIPHER_LEN = 32, 37 PLAIN_LEN = 16, 38 X25519_KEY_BYTE_LEN = 32, 39 ED25519_KEY_BYTE_LEN = 32, 40 }; 41 42 typedef struct { 43 uint32_t baseLength; 44 uint32_t expLength; 45 const char *prime; 46 const uint8_t *base; 47 const uint8_t *exp; 48 const uint8_t *result; 49 } BigNumTestCase; 50 51 static const uint8_t AES_GCM_TEST_KEY[AES_GCM_KEY_LEN] = { 52 0xc7, 0x4f, 0x98, 0x27, 0x09, 0xcf, 0xbe, 0x04, 53 0x03, 0x81, 0xbc, 0x4a, 0x45, 0xed, 0xe9, 0xcb 54 }; 55 56 static const uint8_t AES_GCM_CIPHER_CASE[CIPHER_LEN] = { 57 0xf0, 0x1f, 0x08, 0xb2, 0xb1, 0x79, 0xc9, 0x65, 58 0xc6, 0x45, 0x0c, 0xc9, 0xb9, 0xb6, 0x07, 0xc0, 59 0x27, 0x0c, 0x8d, 0xa0, 0x33, 0x6a, 0x5b, 0xa9, 60 0x0f, 0x1a, 0x01, 0xde, 0x43, 0xda, 0x79, 0x7f 61 }; 62 63 static const uint8_t PLAIN_CASE[] = "This is the case"; 64 65 static const uint8_t HASH_TO_POINT_CASE[] = { 66 0x75, 0x6d, 0xee, 0x8b, 0xa1, 0xce, 0xce, 0xa3, 67 0x1e, 0x68, 0x02, 0xe8, 0xe4, 0xbe, 0xe0, 0x9e, 68 0x3b, 0x01, 0xfa, 0xe0, 0x34, 0x77, 0x65, 0x2c, 69 0xf0, 0x2F, 0x33, 0x7a, 0x54, 0x6b, 0xd9, 0xdd 70 }; 71 72 static const uint8_t HASH_TO_POINT_RESULT[] = { 73 0xd4, 0xa8, 0x7e, 0xa6, 0xd7, 0x07, 0xb0, 0xea, 74 0xef, 0x28, 0xd8, 0x98, 0x89, 0xcc, 0xa0, 0xd8, 75 0x65, 0x4d, 0x8e, 0xdd, 0x4b, 0x16, 0x7a, 0x0d, 76 0xde, 0x4f, 0xf2, 0x99, 0xd3, 0x4c, 0xb4, 0x45 77 }; 78 79 static const uint8_t X25519_PRIVATE_KEY_A[X25519_KEY_BYTE_LEN] = { 80 0x6c, 0xe7, 0xf5, 0x5c, 0x2d, 0xc8, 0x89, 0x6b, 81 0xfc, 0x64, 0xe8, 0xc4, 0x58, 0xfe, 0xbe, 0x13, 82 0x45, 0x01, 0xa4, 0x7a, 0xa1, 0x60, 0xcd, 0x4c, 83 0xaa, 0x7b, 0x19, 0x10, 0x23, 0x33, 0xa1, 0x32 84 }; 85 86 static const uint8_t X25519_PUBLIC_KEY_A[X25519_KEY_BYTE_LEN] = { 87 0x10, 0x65, 0x4b, 0x65, 0xf9, 0x40, 0x10, 0x20, 88 0x4b, 0x2f, 0xff, 0xc6, 0xaf, 0xb3, 0xa8, 0x86, 89 0x69, 0xda, 0x32, 0xf4, 0xa7, 0x00, 0x37, 0x82, 90 0x7e, 0xd3, 0x39, 0xd1, 0x02, 0x2b, 0x23, 0x5d 91 }; 92 93 static const uint8_t X25519_PRIVATE_KEY_B[X25519_KEY_BYTE_LEN] = { 94 0xc3, 0xb2, 0xc7, 0xc3, 0x1c, 0x7e, 0xad, 0x20, 95 0x5f, 0x00, 0xdf, 0x1a, 0xe0, 0xe6, 0x9e, 0x6c, 96 0xf8, 0xac, 0x2f, 0xd5, 0xea, 0xa5, 0xb6, 0xe7, 97 0x75, 0x46, 0xcb, 0x85, 0xbc, 0x0e, 0x68, 0xb6 98 }; 99 100 static const uint8_t X25519_PUBLIC_KEY_B[X25519_KEY_BYTE_LEN] = { 101 0xd7, 0x7b, 0xa7, 0x19, 0x8b, 0x3e, 0x54, 0x4c, 102 0xc3, 0x45, 0xb9, 0x61, 0xa0, 0x9c, 0x23, 0xfc, 103 0xeb, 0x1f, 0x9c, 0x30, 0x0f, 0x3c, 0xcd, 0x17, 104 0x7d, 0xdc, 0x50, 0x0f, 0x40, 0x03, 0x90, 0x2e 105 }; 106 107 static const char PRIME_HEX_384[] = 108 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74" 109 "020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437" 110 "4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 111 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05" 112 "98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" 113 "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 114 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" 115 "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33" 116 "A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" 117 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864" 118 "D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2" 119 "08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; 120 121 static const char PRIME_HEX_256[] = 122 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74" 123 "020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437" 124 "4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 125 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05" 126 "98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" 127 "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 128 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" 129 "3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF"; 130 131 static const uint8_t BASE_HEX_32[] = { 132 0x42, 0x6B, 0x93, 0xAA, 0x93, 0x27, 0xD7, 0x43, 0x8A, 0x92, 0x67, 0x77, 0x77, 0x23, 0x51, 0xAA, 133 0xD5, 0xCF, 0xA3, 0xDB, 0x53, 0x0B, 0x81, 0x77, 0x85, 0x85, 0xCC, 0x83, 0x50, 0x41, 0x38, 0xE3 134 }; 135 136 static const uint8_t BASE_HEX_256[] = { 137 0xDA, 0xC2, 0xE1, 0x78, 0x68, 0xD7, 0x3E, 0x0E, 0xB2, 0x1A, 0x33, 0xA9, 0x1F, 0x0C, 0xD2, 0x44, 138 0x75, 0xEC, 0xDC, 0xF3, 0x47, 0x7B, 0xEF, 0x7D, 0x22, 0x01, 0x94, 0x34, 0x01, 0x8F, 0x9A, 0x57, 139 0xC1, 0x04, 0xFE, 0x09, 0x9C, 0xB1, 0x50, 0xF5, 0xDD, 0x09, 0x08, 0x3E, 0x08, 0x9E, 0xD3, 0x13, 140 0x62, 0x91, 0xC7, 0x72, 0x9B, 0x1F, 0x1F, 0x6A, 0x0A, 0x26, 0xD6, 0xF7, 0xEE, 0xFC, 0x3C, 0x35, 141 0x90, 0x94, 0xF0, 0x7B, 0xEF, 0x59, 0xE3, 0xF2, 0x0D, 0x2B, 0x47, 0xAB, 0x8D, 0xB2, 0xA4, 0xFD, 142 0x0D, 0x68, 0x9E, 0xA4, 0xCF, 0xE2, 0x7D, 0x19, 0x74, 0x91, 0x7D, 0x18, 0xFB, 0x81, 0x89, 0xC4, 143 0xCA, 0x49, 0x31, 0xC3, 0xFB, 0xE5, 0x6C, 0x43, 0x9A, 0x5B, 0x56, 0xF1, 0xBB, 0xE7, 0xF0, 0x76, 144 0x66, 0x3E, 0x06, 0x4B, 0x53, 0x01, 0x38, 0x28, 0xA6, 0xB6, 0x27, 0x50, 0xAB, 0x00, 0x20, 0x54, 145 0x84, 0x6F, 0x08, 0xCB, 0x13, 0xC3, 0x5D, 0x24, 0x27, 0x02, 0x5C, 0x0F, 0x90, 0xA5, 0xA0, 0x1E, 146 0xDC, 0xF9, 0xE5, 0x2F, 0xCB, 0x53, 0xBC, 0xD9, 0x10, 0x52, 0xF6, 0x45, 0x73, 0x21, 0x7B, 0x53, 147 0x12, 0xBD, 0xF3, 0x05, 0xDA, 0xE2, 0x1B, 0x65, 0x70, 0x62, 0x74, 0x68, 0xCB, 0x1C, 0xEE, 0xFD, 148 0xF9, 0xFC, 0x83, 0x95, 0x7C, 0xB5, 0xCF, 0xCE, 0x83, 0x7B, 0xBA, 0x4D, 0xEC, 0xA9, 0xDF, 0x6D, 149 0xF1, 0x85, 0x59, 0x14, 0xB7, 0x94, 0x46, 0x57, 0x44, 0x10, 0x4E, 0x6E, 0xC5, 0x68, 0xDA, 0x82, 150 0x92, 0x5A, 0xDB, 0x89, 0x5D, 0x3B, 0x5E, 0xB3, 0x24, 0xB4, 0x55, 0x4A, 0xE9, 0x41, 0xCB, 0xC6, 151 0xE3, 0xFE, 0xC3, 0xAD, 0x2F, 0xB3, 0xA6, 0x0F, 0x7D, 0x4C, 0xA5, 0xED, 0x95, 0x70, 0x97, 0x12, 152 0x54, 0xAB, 0x58, 0x0E, 0xE5, 0xF6, 0x8B, 0x37, 0x0B, 0x7C, 0x06, 0x54, 0x89, 0xDD, 0x8A, 0xA9 153 }; 154 155 static const uint8_t EXP_HEX_1[] = { 0xE9 }; 156 157 static const uint8_t EXP_HEX_28[] = { 158 0x8F, 0x6F, 0xC2, 0xC0, 0x64, 0x37, 0x1E, 0x98, 0x71, 0xC9, 0xF5, 0x5E, 0x45, 0x5F, 0x46, 0x61, 159 0x1B, 0x4D, 0x7D, 0x23, 0x21, 0x01, 0x1C, 0x56, 0xE2, 0x77, 0x14, 0x64 160 }; 161 162 static const uint8_t EXP_HEX_32[] = { 163 0xA9, 0xC9, 0x9A, 0x5B, 0xB5, 0x9F, 0xC6, 0x9E, 0xE3, 0xF7, 0x4B, 0xFC, 0xDC, 0xF4, 0x26, 0x20, 164 0xBE, 0xAF, 0x03, 0x17, 0xEC, 0x56, 0x2C, 0xB5, 0x46, 0x13, 0x33, 0xD6, 0x97, 0x6A, 0x33, 0x7C 165 }; 166 167 static const uint8_t BASE_HEX_384[] = { 168 0x37, 0xBE, 0xDE, 0x74, 0x1B, 0x5D, 0x7D, 0x58, 0x86, 0x55, 0xD3, 0xCB, 0x52, 0x2A, 0x6C, 0x11, 169 0xB5, 0x97, 0x68, 0x26, 0x21, 0x68, 0x62, 0x51, 0x6E, 0xFA, 0x0B, 0x44, 0x04, 0x18, 0x92, 0xD9, 170 0x11, 0xB0, 0x33, 0x58, 0x46, 0xCD, 0x8B, 0x8E, 0x46, 0x24, 0x25, 0xFE, 0x58, 0xD9, 0x9D, 0xC4, 171 0x1B, 0xA2, 0x17, 0x5D, 0xA5, 0x76, 0xA9, 0x81, 0x93, 0x49, 0x1A, 0xB8, 0x2D, 0x29, 0xDA, 0xE5, 172 0x29, 0x5F, 0xE3, 0x85, 0x09, 0xE4, 0xC6, 0xF2, 0x73, 0x65, 0x40, 0xBA, 0x93, 0xAA, 0x08, 0x43, 173 0xB8, 0x07, 0xF7, 0x01, 0xA5, 0xFB, 0x1E, 0x85, 0xBB, 0x14, 0x3C, 0x2B, 0xA8, 0x4D, 0xD8, 0x3C, 174 0xA3, 0x19, 0x16, 0x86, 0x55, 0xE2, 0xFC, 0xC0, 0xA0, 0xA0, 0x69, 0x07, 0x6A, 0x04, 0xBA, 0x76, 175 0xC4, 0x60, 0xFE, 0xCB, 0xA8, 0x50, 0x26, 0x40, 0xAB, 0x86, 0x90, 0xBA, 0x23, 0xDC, 0x06, 0xA3, 176 0xFE, 0xE2, 0x21, 0x2C, 0xB8, 0x3B, 0xF8, 0x02, 0xFB, 0x1E, 0x2A, 0xBA, 0xA7, 0x60, 0x5D, 0x12, 177 0xE6, 0xE7, 0xC1, 0xA3, 0x14, 0x53, 0x42, 0x50, 0x52, 0x10, 0x20, 0xC2, 0x7C, 0x9B, 0xE6, 0xE7, 178 0xD0, 0x3B, 0x31, 0x2D, 0x4B, 0xFA, 0x70, 0x3B, 0x32, 0x19, 0x32, 0x71, 0x34, 0xFE, 0x12, 0x0D, 179 0xE4, 0x03, 0x1D, 0x95, 0xAD, 0xBC, 0xEB, 0x86, 0xE2, 0x72, 0xBE, 0x22, 0xCC, 0x7A, 0xEF, 0x4B, 180 0xEA, 0x2A, 0xD7, 0x61, 0x54, 0x66, 0xC2, 0x51, 0x70, 0x84, 0xC2, 0x93, 0x92, 0x74, 0xE7, 0x91, 181 0xFC, 0xF1, 0x1C, 0x7F, 0x3F, 0x47, 0xF7, 0x4D, 0x74, 0xDF, 0xD7, 0xD3, 0x93, 0x06, 0x80, 0xBA, 182 0x9B, 0xCE, 0xC4, 0x52, 0x64, 0xF6, 0x83, 0x96, 0x00, 0x3D, 0xE4, 0x6F, 0xF5, 0xDD, 0xA8, 0xC5, 183 0xFC, 0x24, 0xBC, 0x4C, 0x86, 0x1C, 0x97, 0xEA, 0x6B, 0xA7, 0x66, 0x86, 0x83, 0xC6, 0x31, 0xAA, 184 0x6A, 0x89, 0x9C, 0x51, 0x4C, 0x0A, 0xFB, 0x15, 0x2A, 0x67, 0x23, 0x0A, 0xA7, 0x1E, 0x7E, 0xEA, 185 0x62, 0x13, 0x6E, 0x32, 0xA6, 0x3A, 0xE7, 0x39, 0x37, 0x3F, 0xBB, 0x1F, 0x59, 0x0C, 0x54, 0x70, 186 0xCE, 0xE8, 0x16, 0xC9, 0xE4, 0x2D, 0xC3, 0xB8, 0xEB, 0xB1, 0x4E, 0x3B, 0x00, 0xFA, 0xD0, 0xFD, 187 0xB1, 0x44, 0x86, 0x84, 0x5F, 0xBA, 0x1D, 0xA4, 0x10, 0xC8, 0x7D, 0xAC, 0x90, 0xC4, 0xD2, 0xF4, 188 0x52, 0xDD, 0x68, 0xC4, 0x9D, 0xEE, 0x10, 0x6E, 0xE3, 0xD5, 0x1B, 0xBD, 0xF7, 0xFD, 0xBE, 0x7A, 189 0xF6, 0xEA, 0x2F, 0x22, 0xEA, 0x8F, 0x41, 0xCB, 0x88, 0x94, 0x0A, 0x63, 0x3C, 0xF2, 0x4B, 0xDF, 190 0x97, 0x74, 0xA6, 0x41, 0x55, 0xAE, 0xC9, 0x4B, 0xC7, 0xA6, 0x9D, 0xA1, 0xCD, 0xC8, 0x8F, 0x74, 191 0x08, 0x15, 0x00, 0x7B, 0x1D, 0x2B, 0xDB, 0xAD, 0xC9, 0x9E, 0x9E, 0xAD, 0x5D, 0x6A, 0x5F, 0xEB 192 }; 193 194 static const uint8_t BIG_NUM_TEST_CASE_1_RESULT[] = { 195 0x84, 0x24, 0x3B, 0x5B, 0x99, 0x29, 0x54, 0xCD, 0xD8, 0x7E, 0x38, 0xE3, 0x80, 0xAA, 0x7D, 0xC7, 196 0x30, 0xD4, 0xCA, 0xE7, 0x8B, 0x3F, 0xAE, 0x0D, 0xAE, 0xCD, 0x71, 0x27, 0x4D, 0xE7, 0x52, 0x96, 197 0x77, 0x08, 0x88, 0x09, 0xC9, 0x4A, 0xD3, 0x09, 0x55, 0xC1, 0xB5, 0x78, 0x98, 0x2E, 0x42, 0x2D, 198 0x28, 0xEB, 0xCE, 0x2E, 0x56, 0xA5, 0x15, 0x1A, 0xB4, 0x13, 0xFA, 0x3A, 0xB9, 0xB3, 0xE8, 0x5C, 199 0x79, 0xDE, 0x06, 0xAE, 0xBA, 0x58, 0x5F, 0x71, 0x56, 0xCA, 0x51, 0xCF, 0x00, 0x42, 0x6D, 0xD9, 200 0x8E, 0x07, 0x5D, 0xA0, 0x71, 0xE4, 0x86, 0x56, 0x7B, 0x05, 0x27, 0x70, 0x7E, 0xEC, 0x81, 0x58, 201 0xD3, 0xBE, 0x3A, 0x27, 0x3F, 0x22, 0x15, 0xAB, 0x7B, 0x4E, 0xC5, 0x09, 0xEF, 0x02, 0x6F, 0xE7, 202 0x00, 0x40, 0x71, 0x70, 0xC1, 0x44, 0xC7, 0xED, 0xFE, 0xC6, 0x86, 0x10, 0x12, 0xF2, 0x1B, 0x51, 203 0x40, 0x02, 0x2F, 0xA1, 0x90, 0xE7, 0x07, 0xC7, 0xFE, 0x52, 0x57, 0xD6, 0xB3, 0x6E, 0xB6, 0xF3, 204 0x3F, 0xC9, 0x25, 0xCC, 0x86, 0xBC, 0xEC, 0x18, 0x34, 0x4A, 0x4F, 0xF6, 0xE5, 0x01, 0x42, 0xD7, 205 0x7E, 0xE4, 0x54, 0xAF, 0xE4, 0xA3, 0x26, 0x6C, 0x01, 0x0C, 0x64, 0xAD, 0x1C, 0xE0, 0x41, 0xAE, 206 0x4B, 0x40, 0xB0, 0xE7, 0x67, 0x08, 0x16, 0xE5, 0x54, 0x05, 0x55, 0x9E, 0x20, 0x3F, 0x54, 0x91, 207 0xCF, 0x2F, 0x1F, 0xE7, 0xE3, 0xF2, 0x4A, 0xF1, 0x58, 0x3F, 0xFE, 0x55, 0x56, 0x9A, 0x3C, 0xFB, 208 0x63, 0x32, 0xF6, 0x64, 0x55, 0x5C, 0x6C, 0xAA, 0x79, 0xE0, 0x4F, 0x47, 0x36, 0x32, 0xDB, 0x2A, 209 0x3F, 0xA1, 0x70, 0xAD, 0x72, 0x93, 0xFB, 0xD2, 0xF9, 0xE5, 0x0F, 0xDC, 0x85, 0x2C, 0xB9, 0x32, 210 0x4E, 0x9B, 0x31, 0x8C, 0x8C, 0xFB, 0x21, 0xCF, 0xC3, 0x76, 0x22, 0x04, 0xF9, 0xCD, 0x7F, 0xE0 211 }; 212 213 static const uint8_t BIG_NUM_TEST_CASE_2_RESULT[] = { 214 0x1A, 0xA5, 0x23, 0xA4, 0x6B, 0x19, 0x79, 0xF0, 0xD0, 0x62, 0x8E, 0xE7, 0xC4, 0x5C, 0x41, 0x54, 215 0x54, 0xF8, 0xB6, 0xC2, 0xA7, 0xF6, 0x80, 0x69, 0xB3, 0xE2, 0x3E, 0x0E, 0xBD, 0x73, 0xB3, 0xBC, 216 0x3D, 0xB6, 0x18, 0xE1, 0xDC, 0x07, 0x2C, 0xDA, 0x37, 0xA8, 0x55, 0xA0, 0xE6, 0x19, 0x2C, 0x12, 217 0xD0, 0x80, 0x36, 0x73, 0x14, 0xBA, 0x59, 0x97, 0xDC, 0x88, 0x83, 0x75, 0x65, 0x62, 0x4D, 0xA7, 218 0x74, 0x6A, 0x0F, 0xCB, 0x3E, 0x0F, 0x63, 0xF3, 0x4D, 0xFD, 0xD0, 0x99, 0xE4, 0xA7, 0xF4, 0xBB, 219 0x10, 0xE9, 0xF1, 0x57, 0x4B, 0xB5, 0xC4, 0x0A, 0x79, 0x5B, 0xFB, 0x9C, 0xF2, 0x01, 0x52, 0x9A, 220 0x00, 0xBE, 0x59, 0xD2, 0xE8, 0xE4, 0xB4, 0x46, 0xD5, 0xF4, 0xE0, 0xC1, 0x99, 0xDC, 0xE8, 0x88, 221 0x62, 0x34, 0x52, 0xE8, 0x61, 0xAC, 0xA1, 0x47, 0x05, 0xE7, 0x01, 0x2B, 0x92, 0x0B, 0xD2, 0x43, 222 0x9D, 0x57, 0xC3, 0x18, 0x18, 0x2D, 0x6F, 0xA6, 0xB8, 0x01, 0xC5, 0x2C, 0xD3, 0x9D, 0x5E, 0x1B, 223 0x54, 0x9C, 0x61, 0x32, 0x5C, 0x7D, 0xA4, 0xE4, 0x65, 0xA6, 0x7E, 0xB9, 0xD2, 0x39, 0x65, 0xB6, 224 0x8D, 0xB1, 0xC1, 0xFE, 0xB3, 0x67, 0x9B, 0x31, 0xD3, 0x45, 0xCD, 0xA5, 0x94, 0x3F, 0x7C, 0x4D, 225 0x75, 0x57, 0x36, 0x9A, 0x78, 0x23, 0x32, 0xE6, 0xD4, 0xFA, 0xA3, 0x15, 0x47, 0x53, 0x58, 0x08, 226 0xAE, 0xF0, 0xC2, 0x0A, 0x5E, 0x47, 0x9A, 0x83, 0x7D, 0x7E, 0x40, 0xA3, 0xDA, 0xA7, 0xE3, 0x19, 227 0x9A, 0xFE, 0x81, 0x3F, 0x87, 0xF9, 0x40, 0xA5, 0x96, 0xF3, 0x1E, 0x3D, 0xAF, 0xEC, 0x1F, 0x63, 228 0xAA, 0x89, 0xF5, 0x03, 0xD4, 0xD4, 0x3C, 0x47, 0xEA, 0x01, 0xA2, 0xFB, 0x58, 0x4A, 0x40, 0x86, 229 0x68, 0xE7, 0x30, 0x87, 0x43, 0xD8, 0xEE, 0xFF, 0x02, 0x01, 0x0B, 0xE7, 0xC7, 0xEF, 0x6F, 0x69 230 }; 231 232 static const uint8_t BIG_NUM_TEST_CASE_3_RESULT[] = { 233 0x6C, 0x16, 0x45, 0x3E, 0x1F, 0xEB, 0x63, 0xDE, 0x06, 0x95, 0x62, 0xC7, 0x45, 0x89, 0xDA, 0xBB, 234 0xE4, 0x5B, 0x61, 0x2D, 0x80, 0x46, 0xFE, 0x5F, 0x48, 0x2C, 0xFC, 0x6A, 0x8F, 0xAC, 0x62, 0xB0, 235 0x36, 0x85, 0xD1, 0xB5, 0x0F, 0xE9, 0xAD, 0x6C, 0x2B, 0x57, 0x84, 0xB4, 0x12, 0x31, 0xF9, 0xA0, 236 0xF8, 0xB3, 0x27, 0xE9, 0xFD, 0x86, 0xE4, 0x29, 0x96, 0x31, 0x98, 0x80, 0x86, 0x31, 0xFE, 0x0F, 237 0xC5, 0xD0, 0x68, 0xC1, 0xA9, 0x88, 0x79, 0xD5, 0x28, 0xAA, 0x8C, 0x68, 0x19, 0x3D, 0xC4, 0x9D, 238 0xDC, 0x0E, 0xC4, 0x01, 0xEB, 0x8C, 0x12, 0xBA, 0x09, 0x56, 0x91, 0x30, 0x02, 0xC4, 0x8B, 0x88, 239 0xD5, 0x73, 0xA8, 0xB5, 0x36, 0x2D, 0x95, 0x63, 0x10, 0x26, 0xE3, 0x21, 0x52, 0x75, 0x99, 0xA1, 240 0xA6, 0x34, 0xA0, 0xA6, 0x9A, 0x65, 0x06, 0xA3, 0x03, 0x5C, 0x20, 0xB4, 0xE5, 0x34, 0xEF, 0x40, 241 0x03, 0xFE, 0x15, 0xB7, 0xBA, 0xF4, 0x0F, 0x30, 0x00, 0x15, 0xB2, 0x05, 0x17, 0x41, 0xE9, 0xD7, 242 0x26, 0xB8, 0x9B, 0x78, 0xAC, 0xE7, 0xF8, 0xC5, 0xA5, 0xCB, 0x08, 0x65, 0x12, 0x89, 0x00, 0x48, 243 0xE9, 0x70, 0x02, 0xFE, 0xDB, 0xE2, 0x2E, 0x6B, 0x16, 0x89, 0xD4, 0x71, 0x52, 0x9D, 0x2B, 0xE5, 244 0x6D, 0x01, 0x33, 0x53, 0xFD, 0x2A, 0x36, 0xD7, 0x27, 0x94, 0xC1, 0x42, 0x2D, 0x4D, 0x32, 0x46, 245 0x07, 0x04, 0x64, 0x16, 0xA2, 0x75, 0x50, 0x77, 0x1A, 0x5B, 0x4A, 0x43, 0x1A, 0x64, 0x78, 0x69, 246 0x63, 0xB6, 0x8E, 0xB3, 0x02, 0x44, 0x7A, 0xDC, 0xAC, 0x68, 0xF5, 0x8C, 0xE4, 0x8E, 0x94, 0xC9, 247 0xAE, 0x4A, 0x5C, 0x01, 0x04, 0xFF, 0xBB, 0x87, 0xD7, 0x4C, 0x62, 0xF6, 0x8F, 0x9F, 0xD7, 0x27, 248 0x99, 0xEF, 0x96, 0xAB, 0xB9, 0x9B, 0xB3, 0x6E, 0x92, 0xDB, 0x55, 0xFB, 0x46, 0x1C, 0x3B, 0x1F, 249 0xC2, 0xF9, 0xCC, 0x12, 0x23, 0x0F, 0x0D, 0xD7, 0xCE, 0x22, 0xFD, 0x99, 0xF4, 0x00, 0xED, 0xD0, 250 0xC4, 0xA6, 0xE1, 0xAA, 0x8B, 0x22, 0x80, 0x7F, 0x56, 0xF1, 0x10, 0x55, 0xAF, 0x9F, 0x5A, 0xC7, 251 0xA2, 0xCD, 0x48, 0xAA, 0x6D, 0x5E, 0x37, 0x8F, 0xA1, 0xC4, 0xA0, 0x3B, 0x78, 0xC8, 0xB6, 0xFD, 252 0x0A, 0x7E, 0xE1, 0x61, 0x63, 0xFC, 0x33, 0x6B, 0x50, 0xEB, 0xE7, 0x13, 0x6A, 0x84, 0xF7, 0x33, 253 0xB4, 0x38, 0x49, 0xF0, 0x31, 0x0A, 0x05, 0x7C, 0x10, 0xDF, 0xF6, 0x4B, 0x4F, 0x1F, 0x79, 0x96, 254 0xF1, 0x37, 0x7D, 0x80, 0x3B, 0xF1, 0x73, 0xB4, 0x4E, 0x62, 0x7D, 0x86, 0x7B, 0x43, 0x51, 0x06, 255 0x0B, 0xA0, 0xDC, 0xA7, 0xD5, 0x3D, 0xF2, 0xD7, 0xD3, 0x3C, 0x57, 0x9B, 0x64, 0xB1, 0xDE, 0x69, 256 0x90, 0x43, 0xEE, 0xD1, 0xC6, 0xAE, 0xDD, 0x67, 0x02, 0xDF, 0xA1, 0x84, 0x7B, 0x5D, 0xB3, 0xD8 257 }; 258 259 static const uint8_t BIG_NUM_TEST_CASE_4_RESULT[] = { 260 0x31, 0xEA, 0x6E, 0x6B, 0x8C, 0xE0, 0x0F, 0x62, 0xA0, 0xDD, 0xE1, 0x3E, 0xAD, 0xB1, 0xA5, 0xA2, 261 0xC8, 0xDE, 0x3D, 0x61, 0x9D, 0x37, 0xE1, 0x66, 0xF7, 0xF5, 0xCC, 0x11, 0x17, 0xFD, 0x2A, 0xA2, 262 0x00, 0x36, 0xFC, 0x72, 0x74, 0x19, 0xC1, 0xA2, 0x0C, 0x35, 0x05, 0x34, 0xB0, 0x64, 0xBE, 0x7E, 263 0xD0, 0x96, 0xBF, 0xCA, 0x48, 0x92, 0xA9, 0x0B, 0x4A, 0x8C, 0x56, 0x3F, 0xE6, 0xDA, 0xFC, 0xE6, 264 0x66, 0xD4, 0xF8, 0x23, 0x3D, 0x6F, 0xC6, 0xC3, 0x21, 0x27, 0x10, 0x2A, 0x65, 0xE3, 0x15, 0x57, 265 0xC9, 0xE4, 0x35, 0xE4, 0xC1, 0x4D, 0x1C, 0x4D, 0x89, 0xF6, 0xF6, 0x67, 0x66, 0x6F, 0x79, 0x77, 266 0x64, 0xCA, 0x32, 0x52, 0x2A, 0xBC, 0xAE, 0xD3, 0xB4, 0x58, 0x9F, 0x47, 0xA5, 0x68, 0x94, 0x34, 267 0x97, 0x19, 0x9F, 0x48, 0x33, 0x4C, 0x2D, 0x94, 0xD3, 0xC0, 0xBD, 0x66, 0x07, 0x4A, 0xE0, 0x4E, 268 0x18, 0x08, 0xDE, 0x82, 0x1A, 0x26, 0xE7, 0x3F, 0x4E, 0x2F, 0x4D, 0x8B, 0x1B, 0x8F, 0x23, 0x81, 269 0x51, 0xCA, 0xDC, 0x9B, 0x6F, 0xCB, 0x49, 0x9B, 0x2E, 0x0C, 0x24, 0x8B, 0x08, 0x9E, 0xFF, 0x1C, 270 0xEA, 0x40, 0x59, 0xB3, 0xDD, 0xC6, 0x29, 0x1F, 0xBA, 0xA4, 0x2D, 0x9B, 0x5C, 0x78, 0x9F, 0x84, 271 0xC6, 0x3B, 0xFB, 0xCB, 0xA0, 0x9E, 0x07, 0xB9, 0x0D, 0x6A, 0x88, 0x91, 0x0C, 0x67, 0xFC, 0x1E, 272 0xAF, 0xA2, 0x54, 0x95, 0x7B, 0x50, 0xBD, 0x7D, 0x40, 0x3D, 0x3A, 0x58, 0x13, 0x14, 0x3C, 0x5C, 273 0xEE, 0xF6, 0x95, 0x9C, 0x0E, 0x65, 0xA7, 0x4F, 0x67, 0x91, 0xA0, 0xE8, 0xB7, 0xC0, 0xE8, 0xD7, 274 0x3E, 0x06, 0x35, 0xB6, 0x82, 0x65, 0x28, 0xA7, 0x29, 0xDA, 0xA6, 0xC1, 0xBD, 0xBA, 0x72, 0x41, 275 0xBE, 0x77, 0x4F, 0x30, 0xEB, 0x8E, 0xB1, 0x29, 0x71, 0x44, 0x6B, 0x3A, 0xD8, 0xEA, 0x87, 0x1A, 276 0x29, 0x41, 0xA4, 0x2B, 0x59, 0x41, 0x13, 0x4A, 0xC8, 0x60, 0xA1, 0x61, 0x13, 0x30, 0xA6, 0x4B, 277 0x4F, 0x6A, 0x7C, 0x82, 0xF3, 0x78, 0x20, 0x20, 0x52, 0x5B, 0xED, 0xD5, 0xF8, 0xBF, 0x03, 0x15, 278 0xD8, 0xBB, 0x71, 0x62, 0x88, 0x73, 0xEB, 0xFC, 0x32, 0x4E, 0x20, 0x17, 0xEA, 0xD6, 0xBA, 0xDF, 279 0x55, 0x26, 0x6C, 0x19, 0x7F, 0x7F, 0x62, 0x83, 0x43, 0x6C, 0xA9, 0xBD, 0x12, 0x2F, 0x6B, 0x8E, 280 0x55, 0x18, 0x84, 0xD6, 0x0E, 0x11, 0xA2, 0x78, 0x05, 0xD2, 0x4F, 0xEA, 0xB3, 0x61, 0x47, 0x9C, 281 0xB2, 0xCF, 0x5C, 0xE1, 0xFF, 0xC8, 0x54, 0x56, 0x93, 0x2F, 0x71, 0xE0, 0xF5, 0x85, 0xC8, 0x98, 282 0x0C, 0x0E, 0x02, 0x4A, 0x1C, 0xDB, 0xB6, 0x3F, 0x78, 0x4C, 0x4F, 0x1E, 0x54, 0xF9, 0x48, 0x2C, 283 0xB1, 0x6E, 0x4D, 0xD6, 0x25, 0xB3, 0x91, 0x5C, 0x2B, 0x9F, 0x3A, 0xFD, 0xEB, 0x75, 0x44, 0x17 284 }; 285 286 287 static const BigNumTestCase BIG_NUM_TEST_CASES[] = { 288 // case 1: 289 { 290 .baseLength = ARRAY_SIZE(BASE_HEX_32), 291 .expLength = ARRAY_SIZE(EXP_HEX_1), 292 .prime = PRIME_HEX_256, 293 .base = BASE_HEX_32, 294 .exp = EXP_HEX_1, 295 .result = BIG_NUM_TEST_CASE_1_RESULT 296 }, 297 // case 2: 298 { 299 .baseLength = ARRAY_SIZE(BASE_HEX_256), 300 .expLength = ARRAY_SIZE(EXP_HEX_28), 301 .prime = PRIME_HEX_256, 302 .base = BASE_HEX_256, 303 .exp = EXP_HEX_28, 304 .result = BIG_NUM_TEST_CASE_2_RESULT 305 }, 306 // case 3: 307 { 308 .baseLength = ARRAY_SIZE(BASE_HEX_32), 309 .expLength = ARRAY_SIZE(EXP_HEX_1), 310 .prime = PRIME_HEX_384, 311 .base = BASE_HEX_32, 312 .exp = EXP_HEX_1, 313 .result = BIG_NUM_TEST_CASE_3_RESULT 314 }, 315 // case 4: 316 { 317 .baseLength = ARRAY_SIZE(BASE_HEX_384), 318 .expLength = ARRAY_SIZE(EXP_HEX_32), 319 .prime = PRIME_HEX_384, 320 .base = BASE_HEX_384, 321 .exp = EXP_HEX_32, 322 .result = BIG_NUM_TEST_CASE_4_RESULT 323 } 324 }; 325 326 enum { 327 SHA256_MSG_MAX_SIZE = 1024, 328 SHA256_TEST_TIMES = 100, 329 SHA256_TEST_MIN_LIMIT = 64, // test msg length form 1 to 64 330 331 GEN_RANDOM_MAX_SIZE = 1024, 332 GEN_RANDOM_TEST_TIMES = 100, 333 GEN_RANDOM_MIN_LIMIT = 64, // test generate random from 1 to 64 334 GEN_RANDOM_TEST_REPEAT_SIZE = 32, 335 GEN_RANDOM_TEST_REPEAT_TIMES = 100, 336 337 TEST_HMAC_KEY_LEN = 32, // equal to PSK_LEN PAKE_HMAC_KEY_LEN SHA256_LEN HC_SHA256_LEN 338 TEST_HMAC_ISALIAS_TRUE_MSG_LENGTH = 32, // msg length when isAlias is true ISO_KEY_ALIAS_LEN 339 340 HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN = 32, 341 HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN = 32, 342 #define GENERATE_RETURN_KEY_STR "hichain_return_key" 343 344 HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN = 16, 345 HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN = 16, 346 #define HICHAIN_RETURN_KEY "hichain_return_key" 347 348 HKDF_PAKE_PSK_DERIVE_SECRET_ALIAS_BASEKEY_LEN = 64, 349 HKDF_PAKE_PSK_DERIVE_SECRET_ALIAS_SALT_LEN = 32, 350 #define TMP_AUTH_KEY_FACTOR "hichain_tmp_auth_enc_key" 351 HKDF_PAKE_PSK_DERIVE_SECRET_ALIAS_OUTKEY_LEN = 32, 352 353 HKDF_ISO_PSK_DERIVE_SESSIONKEY_BASEKEY_LEN = 32, 354 HKDF_ISO_PSK_DERIVE_SESSIONKEY_SALT_LEN = 32, 355 #define GENERATE_SESSION_KEY_STR "hichain_iso_session_key" 356 HKDF_ISO_PSK_DERIVE_SESSIONKEY_OUTKEY_LEN = 32, 357 358 HKDF_NEW_PAKE_PSK_DERIVE_SECRET_BASEKEY_LEN = 32 * 2, // PAKE_PSK_LEN * BYTE_TO_HEX_OPER_LENGTH 359 HKDF_NEW_PAKE_PSK_DERIVE_SECRET_SALT_LEN = 16, 360 #define HICHAIN_SPEKE_BASE_INFO "hichain_speke_base_info" 361 HKDF_NEW_PAKE_PSK_DERIVE_SECRET_OUTKEY_LEN = 32, 362 363 HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_BASEKEY_LEN = SHA256_LEN, 364 HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_SALT_LEN = 16, 365 #define HICHAIN_SPEKE_SESSIONKEY_INFO "hichain_speke_sessionkey_info" 366 HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_OUTKEY_LEN = 32, 367 368 HKDF_PAKE_PSK_DERIVE_SECRET_BASEKEY_LEN = 32 * 2, // PAKE_PSK_LEN * BYTE_TO_HEX_OPER_LENGTH 369 HKDF_PAKE_PSK_DERIVE_SECRET_SALT_LEN = 16, 370 HKDF_PAKE_PSK_DERIVE_SECRET_OUTKEY_LEN = 32, 371 372 HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_SALT_LEN = 16, 373 HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_OUTKEY_LEN = 48, 374 375 IMPORT_SYMMETRIC_KEY_KEYALIAS_LEN_MAX = 32, 376 IMPORT_SYMMETRIC_KEY_KEYALIAS_LEN_MIN = 1, 377 IMPORT_SYMMETRIC_KEY_AUTHTOKEN_LEN = 32, 378 }; 379 380 enum { 381 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_4 = 4, 382 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_32 = 32, 383 // the meaning of 16 * 2 + 256 * 2 is 384 // length of randSelf + length of randPeer + length of authIdPeer + length of authIdSelf 385 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_RAND_AUTH_ID_SELF_PEER = 16 * 2 + 256 * 2, 386 // MAC FF:FF:FF:FF:FF:FF 387 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_MAC = 16 * 2 + 6 * 2, 388 // UDID FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF 389 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_UDID = 16 * 2 + 16 * 2, 390 // IMEI 999999999999999 391 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_IMEI = 16 * 2 + 15 * 2, 392 }; 393 394 static const uint32_t TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_ARRAY[] = { 395 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_4, 396 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_32, 397 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_RAND_AUTH_ID_SELF_PEER, 398 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_MAC, 399 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_UDID, 400 TEST_HMAC_ISALIAS_FALSE_MSG_LENGTH_IMEI, 401 }; 402 403 static const char SHA256_EXAMPLE_MESSAGE[] = "hichain-sha256-example"; 404 static const uint8_t SHA256_EXAMPLE_RESULT[SHA256_LEN] = { 405 0x53, 0x0a, 0x91, 0x67, 0xab, 0x1f, 0xf0, 0x18, 406 0xfa, 0x1b, 0x8e, 0xb1, 0x03, 0xcf, 0x1c, 0x8a, 407 0x1b, 0x7b, 0x05, 0x0d, 0xfb, 0x2d, 0xe0, 0x60, 408 0x19, 0x64, 0x50, 0x76, 0x69, 0xd6, 0xc5, 0x79, 409 }; 410 411 static const char HMAC_EXAMPLE_MESSAGE[] = "hichain hmac message example"; 412 static const uint8_t HMAC_EXAMPLE_KEY[TEST_HMAC_KEY_LEN] = { 413 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 414 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 415 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 416 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 417 }; 418 static const uint8_t HMAC_EXAMPLE_RESULT[HMAC_LEN] = { 419 0x99, 0xbe, 0xaf, 0x20, 0x84, 0xeb, 0xae, 0x5d, 420 0xc4, 0x1d, 0x62, 0x19, 0xcb, 0x52, 0xe1, 0x43, 421 0xa1, 0xf3, 0x74, 0xf8, 0x33, 0x61, 0xe0, 0x82, 422 0x61, 0xfe, 0x19, 0x09, 0x1f, 0xac, 0x9d, 0xb9, 423 }; 424 425 // Hashing type: SHA-256 426 static const char HKDF_EXAMPLE_MESSAGE[] = "hello hichain"; 427 static const uint8_t HKDF_EXAMPLE_SALT[] = { 428 0x01, 0x23, 0x45, 0x67, 0x89, 429 }; 430 static const char HKDF_EXAMPLE_INFO[] = "hichain hkdf info"; 431 static const uint8_t HKDF_EXAMPLE_RESULT_KEY[] = { 432 0x4e, 0xc8, 0xf7, 0x6a, 0x03, 0xe9, 0x18, 0xbf, 433 0xaa, 0xaa, 0x22, 0xc1, 0xd7, 0x7e, 0x0a, 0xa8, 434 }; 435 436 static const char hkdfCaseNameIsoSessionKeyDeriveReturnKey[] = 437 "iso sessionkey derive returnkey"; 438 static const char hkdfCaseNamePakeSessionKeyDeriveReturnKey[] = 439 "pake sessionkey derive returnkey"; 440 static const char hkdfCaseNameIsoPskDeriveSessionKey[] = 441 "iso psk derive sessionkey"; 442 static const char hkdfCaseNameNewPakePskDeriveSecret[] = 443 "new pake psk derive secret"; 444 static const char hkdfCaseNameNewPakeSharedSecretDeriveSessionKey[] = 445 "new pake sharedSecret derive sessionkey"; 446 static const char hkdfCaseNamePakePskDeriveSecretIsAliasFalse[] = 447 "pake psk derive secret isAlias false"; 448 static const char hkdfCaseNamePakeSharedSecretDeriveUnionKey[] = 449 "pake sharedSecret derive unionkey"; 450 451 enum { 452 HKDF_OUT_KEY_LENGTH_RANGE_16 = 16, 453 HKDF_OUT_KEY_LENGTH_RANGE_32 = 32, 454 HKDF_OUT_KEY_LENGTH_RANGE_64 = 64, 455 HKDF_OUT_KEY_LENGTH_RANGE_128 = 128, 456 HKDF_OUT_KEY_LENGTH_RANGE_256 = 256, 457 HKDF_OUT_KEY_LENGTH_RANGE_512 = 512, 458 HKDF_OUT_KEY_LENGTH_RANGE_1024 = 1024, 459 460 HKDF_CASE_PAKE_SHARED_SECRET_DERIVE_UNION_KEY_BASE_KEY_LENGTH_ED25519 = 32, 461 HKDF_CASE_PAKE_SHARED_SECRET_DERIVE_UNION_KEY_BASE_KEY_LENGTH_P256 = 64, 462 }; 463 464 static const struct HkdfTestCase { 465 const char *caseName; 466 uint32_t baseKeyLength; 467 uint32_t saltLength; 468 const char *keyInfo; 469 uint32_t outKeyLength; 470 } g_hkdfTestCase[] = { 471 { 472 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 473 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 474 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 475 .keyInfo = GENERATE_RETURN_KEY_STR, 476 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_16, 477 }, 478 { 479 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 480 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 481 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 482 .keyInfo = GENERATE_RETURN_KEY_STR, 483 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_32, 484 }, 485 { 486 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 487 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 488 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 489 .keyInfo = GENERATE_RETURN_KEY_STR, 490 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_64, 491 }, 492 { 493 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 494 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 495 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 496 .keyInfo = GENERATE_RETURN_KEY_STR, 497 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_128, 498 }, 499 { 500 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 501 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 502 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 503 .keyInfo = GENERATE_RETURN_KEY_STR, 504 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_256, 505 }, 506 { 507 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 508 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 509 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 510 .keyInfo = GENERATE_RETURN_KEY_STR, 511 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_512, 512 }, 513 { 514 .caseName = hkdfCaseNameIsoSessionKeyDeriveReturnKey, 515 .baseKeyLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 516 .saltLength = HKDF_ISO_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 517 .keyInfo = GENERATE_RETURN_KEY_STR, 518 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_1024, 519 }, 520 521 { 522 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 523 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 524 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 525 .keyInfo = HICHAIN_RETURN_KEY, 526 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_16, 527 }, 528 { 529 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 530 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 531 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 532 .keyInfo = HICHAIN_RETURN_KEY, 533 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_32, 534 }, 535 { 536 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 537 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 538 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 539 .keyInfo = HICHAIN_RETURN_KEY, 540 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_64, 541 }, 542 { 543 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 544 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 545 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 546 .keyInfo = HICHAIN_RETURN_KEY, 547 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_128, 548 }, 549 { 550 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 551 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 552 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 553 .keyInfo = HICHAIN_RETURN_KEY, 554 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_256, 555 }, 556 { 557 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 558 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 559 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 560 .keyInfo = HICHAIN_RETURN_KEY, 561 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_512, 562 }, 563 { 564 .caseName = hkdfCaseNamePakeSessionKeyDeriveReturnKey, 565 .baseKeyLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_BASEKEY_LEN, 566 .saltLength = HKDF_PAKE_SESSIONKEY_DERIVE_RETURNKEY_SALT_LEN, 567 .keyInfo = HICHAIN_RETURN_KEY, 568 .outKeyLength = HKDF_OUT_KEY_LENGTH_RANGE_1024, 569 }, 570 571 { 572 .caseName = hkdfCaseNameIsoPskDeriveSessionKey, 573 .baseKeyLength = HKDF_ISO_PSK_DERIVE_SESSIONKEY_BASEKEY_LEN, 574 .saltLength = HKDF_ISO_PSK_DERIVE_SESSIONKEY_SALT_LEN, 575 .keyInfo = GENERATE_SESSION_KEY_STR, 576 .outKeyLength = HKDF_ISO_PSK_DERIVE_SESSIONKEY_OUTKEY_LEN, 577 }, 578 579 { 580 .caseName = hkdfCaseNameNewPakePskDeriveSecret, 581 .baseKeyLength = HKDF_NEW_PAKE_PSK_DERIVE_SECRET_BASEKEY_LEN, 582 .saltLength = HKDF_NEW_PAKE_PSK_DERIVE_SECRET_SALT_LEN, 583 .keyInfo = HICHAIN_SPEKE_BASE_INFO, 584 .outKeyLength = HKDF_NEW_PAKE_PSK_DERIVE_SECRET_OUTKEY_LEN, 585 }, 586 587 { 588 .caseName = hkdfCaseNameNewPakeSharedSecretDeriveSessionKey, 589 .baseKeyLength = HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_BASEKEY_LEN, 590 .saltLength = HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_SALT_LEN, 591 .keyInfo = HICHAIN_SPEKE_SESSIONKEY_INFO, 592 .outKeyLength = HKDF_NEW_PAKE_SHAREDSECRET_DERIVE_SESSIONKEY_OUTKEY_LEN, 593 }, 594 595 { 596 .caseName = hkdfCaseNamePakePskDeriveSecretIsAliasFalse, 597 .baseKeyLength = HKDF_PAKE_PSK_DERIVE_SECRET_BASEKEY_LEN, 598 .saltLength = HKDF_PAKE_PSK_DERIVE_SECRET_SALT_LEN, 599 .keyInfo = HICHAIN_SPEKE_BASE_INFO, 600 .outKeyLength = HKDF_PAKE_PSK_DERIVE_SECRET_OUTKEY_LEN, 601 }, 602 603 { 604 .caseName = hkdfCaseNamePakeSharedSecretDeriveUnionKey, 605 .baseKeyLength = HKDF_CASE_PAKE_SHARED_SECRET_DERIVE_UNION_KEY_BASE_KEY_LENGTH_ED25519, 606 .saltLength = HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_SALT_LEN, 607 .keyInfo = HICHAIN_SPEKE_SESSIONKEY_INFO, 608 .outKeyLength = HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_OUTKEY_LEN, 609 }, 610 { 611 .caseName = hkdfCaseNamePakeSharedSecretDeriveUnionKey, 612 .baseKeyLength = HKDF_CASE_PAKE_SHARED_SECRET_DERIVE_UNION_KEY_BASE_KEY_LENGTH_P256, 613 .saltLength = HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_SALT_LEN, 614 .keyInfo = HICHAIN_SPEKE_SESSIONKEY_INFO, 615 .outKeyLength = HKDF_PAKE_SHAREDSECRET_DERIVE_UNIONKEY_OUTKEY_LEN, 616 }, 617 }; 618 619 enum { 620 TEST_COMPUTE_HKDF_WITH_KEY_ALIAS_TRUE_KEY_PAIR_KEY_ALIAS_LENGTH = 32, 621 TEST_COMPUTE_HKDF_WITH_KEY_ALIAS_TRUE_SHARED_KEY_LENGTH = 32, 622 TEST_COMPUTE_HKDF_WITH_KEY_ALIAS_TRUE_AUTH_ID_LENGTH = 32, 623 }; 624 625 enum { 626 TEST_IMPORT_SYMMETRIC_KEY_AUTH_ID_LENGTH_32 = 32, 627 TEST_IMPORT_SYMMETRIC_KEY_AUTH_ID_LENGTH_64 = 64, 628 }; 629 630 enum { 631 TEST_GENERATE_KEY_PAIR_WITH_STORAGE_AUTH_ID_LENGTH = 32, 632 }; 633 634 // TestExportImportSignVerify 635 enum { 636 TEST_EX_IM_SN_VF_EXTRA_INFO_AUTH_ID_LENGTH = 32, 637 TEST_EX_IM_SN_VF_KEY_ALIAS_LENGTH = 64, 638 TEST_EX_IM_SN_VF_KEY_LENGTH = 32, 639 TEST_EX_IM_SN_VF_OUT_PUB_KEY_LENGTH = 32, 640 641 TEST_SIGN_MESSAGE_LENGTH_1 = 1, 642 TEST_SIGN_MESSAGE_LENGTH_2 = 2, 643 TEST_SIGN_MESSAGE_LENGTH_4 = 4, 644 TEST_SIGN_MESSAGE_LENGTH_8 = 8, 645 TEST_SIGN_MESSAGE_LENGTH_16 = 16, 646 TEST_SIGN_MESSAGE_LENGTH_32 = 32, 647 TEST_SIGN_MESSAGE_LENGTH_64 = 64, 648 TEST_SIGN_MESSAGE_LENGTH_128 = 128, 649 TEST_SIGN_MESSAGE_LENGTH_256 = 256, 650 TEST_SIGN_MESSAGE_LENGTH_512 = 512, 651 TEST_SIGN_MESSAGE_LENGTH_1024 = 1024, 652 TEST_SIGN_SIGNATURE_LENGTH = 64, 653 }; 654 655 static const uint32_t TEST_SIGN_MSG_LENGTHES[] = { 656 TEST_SIGN_MESSAGE_LENGTH_1, 657 TEST_SIGN_MESSAGE_LENGTH_2, 658 TEST_SIGN_MESSAGE_LENGTH_4, 659 TEST_SIGN_MESSAGE_LENGTH_8, 660 TEST_SIGN_MESSAGE_LENGTH_16, 661 TEST_SIGN_MESSAGE_LENGTH_32, 662 TEST_SIGN_MESSAGE_LENGTH_64, 663 TEST_SIGN_MESSAGE_LENGTH_128, 664 TEST_SIGN_MESSAGE_LENGTH_256, 665 TEST_SIGN_MESSAGE_LENGTH_512, 666 TEST_SIGN_MESSAGE_LENGTH_1024, 667 }; 668 669 static const char TEST_EXPORT_DIFFERENT_ERROR_MESSAGE[] = "two different public keys are exported"; 670 671 // g_largePrimeNumberHex384 and g_largePrimeNumberHex256 are from 672 // base/security/deviceauth/services/protocol/src/pake_protocol/pake_protocol_dl_common/pake_protocol_dl_common.c 673 static const char LARGE_PRIME_NUM_HEX_384[] = 674 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74" 675 "020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437" 676 "4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 677 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05" 678 "98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" 679 "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 680 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" 681 "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33" 682 "A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" 683 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864" 684 "D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2" 685 "08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"; 686 687 static const char LARGE_PRIME_NUM_HEX_256[] = 688 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74" 689 "020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437" 690 "4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 691 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05" 692 "98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" 693 "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 694 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" 695 "3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF"; 696 697 enum { 698 PAKE_DL_PRIME_LEN_256 = 256, 699 PAKE_DL_PRIME_LEN_384 = 384, 700 }; 701 702 enum { 703 TEST_CHECK_DL_VALUE_ONE = 1, 704 TEST_CHECK_DL_VALUE_TWO = 2, 705 }; 706 707 enum { 708 TEST_BIG_NUM_COMPARE_NUM_LENGTH_FULL = 32, 709 TEST_BIG_NUM_COMPARE_NUM_LENGTH_HALF = TEST_BIG_NUM_COMPARE_NUM_LENGTH_FULL / 2, // 16 710 }; 711 712 static const uint8_t TEST_BIG_NUM_COMPARE_NUM_EXAMPLE_FULL[TEST_BIG_NUM_COMPARE_NUM_LENGTH_FULL] = { 713 /* */ /* */ 714 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 715 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 716 }; 717 718 static const uint8_t TEST_BIG_NUM_COMPARE_NUM_EXAMPLE_HALF[TEST_BIG_NUM_COMPARE_NUM_LENGTH_HALF] = { 719 /* */ /* */ 720 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 721 }; 722 723 #ifdef __cplusplus 724 } 725 #endif 726 727 #endif // HC_ALG_TEST_CASE_H