@@ -160,81 +160,96 @@ static inline psa_algorithm_t mbedtls_psa_translate_md( mbedtls_md_type_t md_alg
160
160
/* Translations for ECC. */
161
161
162
162
static inline int mbedtls_psa_get_ecc_oid_from_id (
163
- psa_ecc_curve_t curve , char const * * oid , size_t * oid_len )
163
+ psa_ecc_curve_t curve , size_t bits ,
164
+ char const * * oid , size_t * oid_len )
164
165
{
165
166
switch ( curve )
166
167
{
168
+ case PSA_ECC_CURVE_SECP_R1 :
169
+ switch ( bits )
170
+ {
167
171
#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED )
168
- case PSA_ECC_CURVE_SECP192R1 :
169
- * oid = MBEDTLS_OID_EC_GRP_SECP192R1 ;
170
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP192R1 );
171
- return ( 0 );
172
+ case 192 :
173
+ * oid = MBEDTLS_OID_EC_GRP_SECP192R1 ;
174
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP192R1 );
175
+ return ( 0 );
172
176
#endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */
173
177
#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED )
174
- case PSA_ECC_CURVE_SECP224R1 :
175
- * oid = MBEDTLS_OID_EC_GRP_SECP224R1 ;
176
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP224R1 );
177
- return ( 0 );
178
+ case 224 :
179
+ * oid = MBEDTLS_OID_EC_GRP_SECP224R1 ;
180
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP224R1 );
181
+ return ( 0 );
178
182
#endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */
179
183
#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED )
180
- case PSA_ECC_CURVE_SECP256R1 :
181
- * oid = MBEDTLS_OID_EC_GRP_SECP256R1 ;
182
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP256R1 );
183
- return ( 0 );
184
+ case 256 :
185
+ * oid = MBEDTLS_OID_EC_GRP_SECP256R1 ;
186
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP256R1 );
187
+ return ( 0 );
184
188
#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */
185
189
#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED )
186
- case PSA_ECC_CURVE_SECP384R1 :
187
- * oid = MBEDTLS_OID_EC_GRP_SECP384R1 ;
188
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP384R1 );
189
- return ( 0 );
190
+ case 384 :
191
+ * oid = MBEDTLS_OID_EC_GRP_SECP384R1 ;
192
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP384R1 );
193
+ return ( 0 );
190
194
#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */
191
195
#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED )
192
- case PSA_ECC_CURVE_SECP521R1 :
193
- * oid = MBEDTLS_OID_EC_GRP_SECP521R1 ;
194
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP521R1 );
195
- return ( 0 );
196
+ case 521 :
197
+ * oid = MBEDTLS_OID_EC_GRP_SECP521R1 ;
198
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP521R1 );
199
+ return ( 0 );
196
200
#endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */
201
+ }
202
+ break ;
203
+ case PSA_ECC_CURVE_SECP_K1 :
204
+ switch ( bits )
205
+ {
197
206
#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED )
198
- case PSA_ECC_CURVE_SECP192K1 :
199
- * oid = MBEDTLS_OID_EC_GRP_SECP192K1 ;
200
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP192K1 );
201
- return ( 0 );
207
+ case 192 :
208
+ * oid = MBEDTLS_OID_EC_GRP_SECP192K1 ;
209
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP192K1 );
210
+ return ( 0 );
202
211
#endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */
203
212
#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED )
204
- case PSA_ECC_CURVE_SECP224K1 :
205
- * oid = MBEDTLS_OID_EC_GRP_SECP224K1 ;
206
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP224K1 );
207
- return ( 0 );
213
+ case 224 :
214
+ * oid = MBEDTLS_OID_EC_GRP_SECP224K1 ;
215
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP224K1 );
216
+ return ( 0 );
208
217
#endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */
209
218
#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED )
210
- case PSA_ECC_CURVE_SECP256K1 :
211
- * oid = MBEDTLS_OID_EC_GRP_SECP256K1 ;
212
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP256K1 );
213
- return ( 0 );
219
+ case 256 :
220
+ * oid = MBEDTLS_OID_EC_GRP_SECP256K1 ;
221
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_SECP256K1 );
222
+ return ( 0 );
214
223
#endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */
224
+ }
225
+ break ;
226
+ case PSA_ECC_CURVE_BRAINPOOL_P_R1 :
227
+ switch ( bits )
228
+ {
215
229
#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED )
216
- case PSA_ECC_CURVE_BRAINPOOL_P256R1 :
217
- * oid = MBEDTLS_OID_EC_GRP_BP256R1 ;
218
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP256R1 );
219
- return ( 0 );
230
+ case 256 :
231
+ * oid = MBEDTLS_OID_EC_GRP_BP256R1 ;
232
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP256R1 );
233
+ return ( 0 );
220
234
#endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */
221
235
#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED )
222
- case PSA_ECC_CURVE_BRAINPOOL_P384R1 :
223
- * oid = MBEDTLS_OID_EC_GRP_BP384R1 ;
224
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP384R1 );
225
- return ( 0 );
236
+ case 384 :
237
+ * oid = MBEDTLS_OID_EC_GRP_BP384R1 ;
238
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP384R1 );
239
+ return ( 0 );
226
240
#endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */
227
241
#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED )
228
- case PSA_ECC_CURVE_BRAINPOOL_P512R1 :
229
- * oid = MBEDTLS_OID_EC_GRP_BP512R1 ;
230
- * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP512R1 );
231
- return ( 0 );
242
+ case 512 :
243
+ * oid = MBEDTLS_OID_EC_GRP_BP512R1 ;
244
+ * oid_len = MBEDTLS_OID_SIZE ( MBEDTLS_OID_EC_GRP_BP512R1 );
245
+ return ( 0 );
232
246
#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */
233
- default :
234
- (void ) oid ;
235
- (void ) oid_len ;
236
- return ( -1 );
247
+ }
248
+ break ;
237
249
}
250
+ (void ) oid ;
251
+ (void ) oid_len ;
252
+ return ( -1 );
238
253
}
239
254
240
255
#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH 1
@@ -317,67 +332,6 @@ static inline int mbedtls_psa_get_ecc_oid_from_id(
317
332
#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */
318
333
319
334
320
- static inline psa_ecc_curve_t mbedtls_psa_translate_ecc_group ( mbedtls_ecp_group_id grpid )
321
- {
322
- switch ( grpid )
323
- {
324
- #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED )
325
- case MBEDTLS_ECP_DP_SECP192R1 :
326
- return ( PSA_ECC_CURVE_SECP192R1 );
327
- #endif
328
- #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED )
329
- case MBEDTLS_ECP_DP_SECP224R1 :
330
- return ( PSA_ECC_CURVE_SECP224R1 );
331
- #endif
332
- #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED )
333
- case MBEDTLS_ECP_DP_SECP256R1 :
334
- return ( PSA_ECC_CURVE_SECP256R1 );
335
- #endif
336
- #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED )
337
- case MBEDTLS_ECP_DP_SECP384R1 :
338
- return ( PSA_ECC_CURVE_SECP384R1 );
339
- #endif
340
- #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED )
341
- case MBEDTLS_ECP_DP_SECP521R1 :
342
- return ( PSA_ECC_CURVE_SECP521R1 );
343
- #endif
344
- #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED )
345
- case MBEDTLS_ECP_DP_BP256R1 :
346
- return ( PSA_ECC_CURVE_BRAINPOOL_P256R1 );
347
- #endif
348
- #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED )
349
- case MBEDTLS_ECP_DP_BP384R1 :
350
- return ( PSA_ECC_CURVE_BRAINPOOL_P384R1 );
351
- #endif
352
- #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED )
353
- case MBEDTLS_ECP_DP_BP512R1 :
354
- return ( PSA_ECC_CURVE_BRAINPOOL_P512R1 );
355
- #endif
356
- #if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED )
357
- case MBEDTLS_ECP_DP_CURVE25519 :
358
- return ( PSA_ECC_CURVE_CURVE25519 );
359
- #endif
360
- #if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED )
361
- case MBEDTLS_ECP_DP_SECP192K1 :
362
- return ( PSA_ECC_CURVE_SECP192K1 );
363
- #endif
364
- #if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED )
365
- case MBEDTLS_ECP_DP_SECP224K1 :
366
- return ( PSA_ECC_CURVE_SECP224K1 );
367
- #endif
368
- #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED )
369
- case MBEDTLS_ECP_DP_SECP256K1 :
370
- return ( PSA_ECC_CURVE_SECP256K1 );
371
- #endif
372
- #if defined(MBEDTLS_ECP_DP_CURVE448_ENABLED )
373
- case MBEDTLS_ECP_DP_CURVE448 :
374
- return ( PSA_ECC_CURVE_CURVE448 );
375
- #endif
376
- default :
377
- return ( 0 );
378
- }
379
- }
380
-
381
335
/* Translations for PK layer */
382
336
383
337
static inline int mbedtls_psa_err_translate_pk ( psa_status_t status )
@@ -411,13 +365,18 @@ static inline int mbedtls_psa_err_translate_pk( psa_status_t status )
411
365
/* This function transforms an ECC group identifier from
412
366
* https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
413
367
* into a PSA ECC group identifier. */
414
- static inline psa_ecc_curve_t mbedtls_psa_parse_tls_ecc_group (
415
- uint16_t tls_ecc_grp_reg_id )
368
+ #if defined(MBEDTLS_ECP_C )
369
+ static inline psa_key_type_t mbedtls_psa_parse_tls_ecc_group (
370
+ uint16_t tls_ecc_grp_reg_id , size_t * bits )
416
371
{
417
- /* The PSA identifiers are currently aligned with those from
418
- * the TLS Supported Groups registry, so no conversion is necessary. */
419
- return ( (psa_ecc_curve_t ) tls_ecc_grp_reg_id );
372
+ const mbedtls_ecp_curve_info * curve_info =
373
+ mbedtls_ecp_curve_info_from_tls_id ( tls_ecc_grp_reg_id );
374
+ if ( curve_info == NULL )
375
+ return ( 0 );
376
+ return ( PSA_KEY_TYPE_ECC_KEY_PAIR (
377
+ mbedtls_ecc_group_to_psa ( curve_info -> grp_id , bits ) ) );
420
378
}
379
+ #endif /* MBEDTLS_ECP_C */
421
380
422
381
/* This function takes a buffer holding an EC public key
423
382
* exported through psa_export_public_key(), and converts
@@ -444,15 +403,12 @@ static inline int mbedtls_psa_tls_psa_ec_to_ecpoint( unsigned char *src,
444
403
* exchanges) and converts it into a format that the PSA key
445
404
* agreement API understands.
446
405
*/
447
- static inline int mbedtls_psa_tls_ecpoint_to_psa_ec ( psa_ecc_curve_t curve ,
448
- unsigned char const * src ,
406
+ static inline int mbedtls_psa_tls_ecpoint_to_psa_ec ( unsigned char const * src ,
449
407
size_t srclen ,
450
408
unsigned char * dst ,
451
409
size_t dstlen ,
452
410
size_t * olen )
453
411
{
454
- ((void ) curve );
455
-
456
412
if ( srclen > dstlen )
457
413
return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
458
414
0 commit comments