1
1
/** @file
2
- * Copyright (c) 2024, Arm Limited or its affiliates. All rights reserved.
2
+ * Copyright (c) 2024-2025 , Arm Limited or its affiliates. All rights reserved.
3
3
* SPDX-License-Identifier : Apache-2.0
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -80,27 +80,26 @@ int32_t psa_pake_jpake_setup(psa_pake_operation_t *op, const uint8_t *user, cons
80
80
sizeof (peer ));
81
81
TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (6 ));
82
82
83
- return VAL_STATUS_SUCCESS ;
83
+ return status ;
84
84
}
85
85
86
86
int32_t send_message_jpake (psa_pake_operation_t * from , psa_pake_operation_t * to ,
87
- psa_pake_step_t step , uint8_t n )
87
+ psa_pake_step_t step )
88
88
{
89
89
int32_t status ;
90
90
uint8_t data [1024 ];
91
91
size_t op_len ;
92
92
93
93
status = val -> crypto_function (VAL_CRYPTO_PAKE_OUTPUT , from , step , data , sizeof (data ), & op_len );
94
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (n ));
95
94
96
95
status = val -> crypto_function (VAL_CRYPTO_PAKE_INPUT , to , step , data , op_len );
97
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (n + 1 ));
98
96
99
- return VAL_STATUS_SUCCESS ;
97
+ return status ;
100
98
}
101
99
102
100
int32_t psa_pake_jpake_test (caller_security_t caller __UNUSED )
103
101
{
102
+ #if defined(ARCH_TEST_JPAKE )
104
103
uint8_t i = 0 ;
105
104
int32_t status ;
106
105
psa_pake_operation_t user = PSA_PAKE_OPERATION_INIT ;
@@ -151,43 +150,56 @@ int32_t psa_pake_jpake_test(caller_security_t caller __UNUSED)
151
150
/* Round 1 key exchange */
152
151
val -> print (PRINT_DEBUG , "[check 3] : Starting Round1 Key Exchange from user to peer\n" , 0 );
153
152
// Get and set g1
154
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE , 9 );
153
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE );
154
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (4 ));
155
155
156
156
// Get and set V1, ZKP public key for x1
157
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC , 11 );
157
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC );
158
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (5 ));
158
159
159
160
// Get and set r1, ZKP proof for x1
160
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF , 13 );
161
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF );
162
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (6 ));
161
163
162
164
// Get and set g2
163
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE , 15 );
165
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE );
166
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (7 ));
164
167
165
168
// Get V2, ZKP public key for x2
166
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC , 17 );
169
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC );
170
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (8 ));
167
171
168
172
// Get r2, ZKP proof for x2
169
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF , 19 );
173
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF );
174
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (9 ));
170
175
171
176
val -> print (PRINT_DEBUG , " Round1 Key Exchange from user to peer done\n" , 0 );
172
177
173
178
val -> print (PRINT_DEBUG , "[check 4] : Starting Round1 Key Exchange from peer to user\n" , 0 );
179
+
174
180
//Get and set g3
175
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE , 21 );
181
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE );
182
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (10 ));
176
183
177
184
// Get and set V3, ZKP public key for x3
178
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC , 23 );
185
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC );
186
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (11 ));
179
187
180
188
// get and set r3, ZKP proof for x3
181
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF , 25 );
189
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF );
190
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (12 ));
182
191
183
192
// get and set g4
184
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE , 27 );
193
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE );
194
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (13 ));
185
195
186
196
// Get and set V4, ZKP public key for x4
187
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC , 29 );
197
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC );
198
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (14 ));
188
199
189
200
// Get and set r4, ZKP proof for x4
190
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF , 31 );
201
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF );
202
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (15 ));
191
203
192
204
val -> print (PRINT_DEBUG , " Round1 Key Exchange from peer to user done\n" , 0 );
193
205
@@ -196,26 +208,32 @@ int32_t psa_pake_jpake_test(caller_security_t caller __UNUSED)
196
208
val -> print (PRINT_DEBUG , "[check 5] : Starting Round2 Key Exchange from user to peer\n" , 0 );
197
209
198
210
// Get and set A
199
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE , 33 );
211
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_KEY_SHARE );
212
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (16 ));
200
213
201
214
//Get and set V5, ZKP public key for x2*s
202
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC , 35 );
215
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PUBLIC );
216
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (17 ));
203
217
204
218
// Get and set r5, ZKP proof for x2*s
205
- status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF , 37 );
219
+ status = send_message_jpake (& user , & peer , PSA_PAKE_STEP_ZK_PROOF );
220
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (18 ));
206
221
207
222
val -> print (PRINT_DEBUG , " Round2 Key Exchange from user to peer done\n" , 0 );
208
223
209
224
val -> print (PRINT_DEBUG , "[check 6] : Starting Round2 Key Exchange from peer to user\n" , 0 );
210
225
211
226
// Get and Set B
212
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE , 39 );
227
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_KEY_SHARE );
228
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (19 ));
213
229
214
230
// Get and Set V6, ZKP public key for x4*s
215
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC , 41 );
231
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PUBLIC );
232
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (20 ));
216
233
217
234
// Get and set r6, ZKP proof for x4*s
218
- status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF , 43 );
235
+ status = send_message_jpake (& peer , & user , PSA_PAKE_STEP_ZK_PROOF );
236
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (21 ));
219
237
220
238
val -> print (PRINT_DEBUG , " Round2 Key Exchange from peer to user done\n" , 0 );
221
239
@@ -234,26 +252,26 @@ int32_t psa_pake_jpake_test(caller_security_t caller __UNUSED)
234
252
235
253
/* Setup Key Derivation for User */
236
254
status = val -> crypto_function (VAL_CRYPTO_PAKE_GET_SHARED_KEY , & user , & attributes , & key );
237
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (45 ));
255
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (22 ));
238
256
239
257
status = val -> crypto_function (VAL_CRYPTO_PAKE_ABORT , & user );
240
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (46 ));
258
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (23 ));
241
259
242
260
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_SETUP ,
243
261
& kdf , PSA_ALG_TLS12_ECJPAKE_TO_PMS );
244
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (47 ));
262
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (24 ));
245
263
246
264
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY ,
247
265
& kdf , PSA_KEY_DERIVATION_INPUT_SECRET ,
248
266
key );
249
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (48 ));
267
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (25 ));
250
268
251
269
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES ,
252
270
& kdf , secret1 , sizeof (secret1 ));
253
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (49 ));
271
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (26 ));
254
272
255
273
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_ABORT , & kdf );
256
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (50 ));
274
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (27 ));
257
275
258
276
val -> print (PRINT_DEBUG , "[secret1] : " , 0 );
259
277
for (i = 0 ; i < 32 ; i ++ )
@@ -262,29 +280,29 @@ int32_t psa_pake_jpake_test(caller_security_t caller __UNUSED)
262
280
}
263
281
264
282
status = val -> crypto_function (VAL_CRYPTO_DESTROY_KEY , key );
265
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (51 ));
283
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (28 ));
266
284
267
285
val -> print (PRINT_DEBUG , "\n[check 8] : Derive shared secret from peer \n" , 0 );
268
286
269
287
/* Setup Key Derivation for Peer */
270
288
status = val -> crypto_function (VAL_CRYPTO_PAKE_GET_SHARED_KEY , & peer , & attributes , & key );
271
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (52 ));
289
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (29 ));
272
290
273
291
status = val -> crypto_function (VAL_CRYPTO_PAKE_ABORT , & peer );
274
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (53 ));
292
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (30 ));
275
293
276
294
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_SETUP ,
277
295
& kdf , PSA_ALG_TLS12_ECJPAKE_TO_PMS );
278
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (54 ));
296
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (31 ));
279
297
280
298
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_INPUT_KEY ,
281
299
& kdf , PSA_KEY_DERIVATION_INPUT_SECRET ,
282
300
key );
283
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (55 ));
301
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (32 ));
284
302
285
303
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES ,
286
304
& kdf , secret2 , sizeof (secret2 ));
287
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (56 ));
305
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (33 ));
288
306
289
307
val -> print (PRINT_DEBUG , "[secret2] : " , 0 );
290
308
@@ -296,15 +314,20 @@ int32_t psa_pake_jpake_test(caller_security_t caller __UNUSED)
296
314
val -> print (PRINT_DEBUG , "\n" , 0 );
297
315
298
316
status = val -> crypto_function (VAL_CRYPTO_KEY_DERIVATION_ABORT , & kdf );
299
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (57 ));
317
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (34 ));
300
318
301
319
status = val -> crypto_function (VAL_CRYPTO_DESTROY_KEY , key );
302
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (58 ));
320
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (35 ));
303
321
304
- TEST_ASSERT_MEMCMP (secret1 , secret2 , sizeof (secret1 ), TEST_CHECKPOINT_NUM (59 ));
322
+ TEST_ASSERT_MEMCMP (secret1 , secret2 , sizeof (secret1 ), TEST_CHECKPOINT_NUM (36 ));
305
323
306
324
status = val -> crypto_function (VAL_CRYPTO_DESTROY_KEY , pw_key );
307
- TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (60 ));
325
+ TEST_ASSERT_EQUAL (status , PSA_SUCCESS , TEST_CHECKPOINT_NUM (37 ));
308
326
309
327
return VAL_STATUS_SUCCESS ;
328
+
329
+ #else
330
+ val -> print (PRINT_TEST , "No test available for the selected crypto configuration\n" , 0 );
331
+ return RESULT_SKIP (VAL_STATUS_NO_TESTS );
332
+ #endif
310
333
}
0 commit comments