• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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