|
7 | 7 | * change at any time.
|
8 | 8 | */
|
9 | 9 | /*
|
10 |
| - * Copyright (C) 2006-2018, ARM Limited, All Rights Reserved |
| 10 | + * Copyright (C) 2006-2020, ARM Limited, All Rights Reserved |
11 | 11 | * SPDX-License-Identifier: Apache-2.0
|
12 | 12 | *
|
13 | 13 | * Licensed under the Apache License, Version 2.0 (the "License"); you may
|
@@ -163,6 +163,87 @@ static inline int mbedtls_psa_get_ecc_oid_from_id(
|
163 | 163 | psa_ecc_curve_t curve, size_t bits,
|
164 | 164 | char const **oid, size_t *oid_len )
|
165 | 165 | {
|
| 166 | +#if TARGET_TFM |
| 167 | + /* Use older Crypto API, at least until TF-M updates its crypto |
| 168 | + * implementation to Mbed TLS 2.22.0. See |
| 169 | + * https://github.com/ARMmbed/mbed-os/issues/13025 for details. */ |
| 170 | + (void) bits; |
| 171 | + switch( curve ) |
| 172 | + { |
| 173 | +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) |
| 174 | + case PSA_ECC_CURVE_SECP192R1: |
| 175 | + *oid = MBEDTLS_OID_EC_GRP_SECP192R1; |
| 176 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192R1 ); |
| 177 | + return( 0 ); |
| 178 | +#endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ |
| 179 | +#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) |
| 180 | + case PSA_ECC_CURVE_SECP224R1: |
| 181 | + *oid = MBEDTLS_OID_EC_GRP_SECP224R1; |
| 182 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224R1 ); |
| 183 | + return( 0 ); |
| 184 | +#endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ |
| 185 | +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) |
| 186 | + case PSA_ECC_CURVE_SECP256R1: |
| 187 | + *oid = MBEDTLS_OID_EC_GRP_SECP256R1; |
| 188 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256R1 ); |
| 189 | + return( 0 ); |
| 190 | +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ |
| 191 | +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) |
| 192 | + case PSA_ECC_CURVE_SECP384R1: |
| 193 | + *oid = MBEDTLS_OID_EC_GRP_SECP384R1; |
| 194 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP384R1 ); |
| 195 | + return( 0 ); |
| 196 | +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ |
| 197 | +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) |
| 198 | + case PSA_ECC_CURVE_SECP521R1: |
| 199 | + *oid = MBEDTLS_OID_EC_GRP_SECP521R1; |
| 200 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP521R1 ); |
| 201 | + return( 0 ); |
| 202 | +#endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ |
| 203 | +#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) |
| 204 | + case PSA_ECC_CURVE_SECP192K1: |
| 205 | + *oid = MBEDTLS_OID_EC_GRP_SECP192K1; |
| 206 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192K1 ); |
| 207 | + return( 0 ); |
| 208 | +#endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ |
| 209 | +#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) |
| 210 | + case PSA_ECC_CURVE_SECP224K1: |
| 211 | + *oid = MBEDTLS_OID_EC_GRP_SECP224K1; |
| 212 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224K1 ); |
| 213 | + return( 0 ); |
| 214 | +#endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ |
| 215 | +#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) |
| 216 | + case PSA_ECC_CURVE_SECP256K1: |
| 217 | + *oid = MBEDTLS_OID_EC_GRP_SECP256K1; |
| 218 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256K1 ); |
| 219 | + return( 0 ); |
| 220 | +#endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ |
| 221 | +#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) |
| 222 | + case PSA_ECC_CURVE_BRAINPOOL_P256R1: |
| 223 | + *oid = MBEDTLS_OID_EC_GRP_BP256R1; |
| 224 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP256R1 ); |
| 225 | + return( 0 ); |
| 226 | +#endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ |
| 227 | +#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) |
| 228 | + case PSA_ECC_CURVE_BRAINPOOL_P384R1: |
| 229 | + *oid = MBEDTLS_OID_EC_GRP_BP384R1; |
| 230 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP384R1 ); |
| 231 | + return( 0 ); |
| 232 | +#endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ |
| 233 | +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) |
| 234 | + case PSA_ECC_CURVE_BRAINPOOL_P512R1: |
| 235 | + *oid = MBEDTLS_OID_EC_GRP_BP512R1; |
| 236 | + *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP512R1 ); |
| 237 | + return( 0 ); |
| 238 | +#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ |
| 239 | + default: |
| 240 | + (void) oid; |
| 241 | + (void) oid_len; |
| 242 | + return( -1 ); |
| 243 | + } |
| 244 | +#else |
| 245 | + /* Use more up to date Crypto API */ |
| 246 | + |
166 | 247 | switch( curve )
|
167 | 248 | {
|
168 | 249 | case PSA_ECC_CURVE_SECP_R1:
|
@@ -250,6 +331,7 @@ static inline int mbedtls_psa_get_ecc_oid_from_id(
|
250 | 331 | (void) oid;
|
251 | 332 | (void) oid_len;
|
252 | 333 | return( -1 );
|
| 334 | +#endif /* TARGET_TFM */ |
253 | 335 | }
|
254 | 336 |
|
255 | 337 | #define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH 1
|
@@ -369,12 +451,16 @@ static inline int mbedtls_psa_err_translate_pk( psa_status_t status )
|
369 | 451 | static inline psa_key_type_t mbedtls_psa_parse_tls_ecc_group(
|
370 | 452 | uint16_t tls_ecc_grp_reg_id, size_t *bits )
|
371 | 453 | {
|
| 454 | +#if TARGET_TFM |
| 455 | + return( (psa_ecc_curve_t) tls_ecc_grp_reg_id ); |
| 456 | +#else |
372 | 457 | const mbedtls_ecp_curve_info *curve_info =
|
373 | 458 | mbedtls_ecp_curve_info_from_tls_id( tls_ecc_grp_reg_id );
|
374 | 459 | if( curve_info == NULL )
|
375 | 460 | return( 0 );
|
376 | 461 | return( PSA_KEY_TYPE_ECC_KEY_PAIR(
|
377 | 462 | mbedtls_ecc_group_to_psa( curve_info->grp_id, bits ) ) );
|
| 463 | +#endif |
378 | 464 | }
|
379 | 465 | #endif /* MBEDTLS_ECP_C */
|
380 | 466 |
|
|
0 commit comments