Skip to content

Commit a7448bf

Browse files
authored
Merge pull request #6141 from mpg/driver-hashes-rsa-v21
Driver hashes rsa v21
2 parents 7b1be55 + 71bf28b commit a7448bf

File tree

12 files changed

+607
-247
lines changed

12 files changed

+607
-247
lines changed

include/mbedtls/check_config.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@
162162
#error "MBEDTLS_PKCS12_C defined, but not all prerequisites"
163163
#endif
164164

165-
#if defined(MBEDTLS_PKCS1_V21) && !defined(MBEDTLS_MD_C)
165+
#if defined(MBEDTLS_PKCS1_V21) && \
166+
!( defined(MBEDTLS_MD_C) || defined(MBEDTLS_PSA_CRYPTO_C) )
166167
#error "MBEDTLS_PKCS1_V21 defined, but not all prerequisites"
167168
#endif
168169

include/mbedtls/config_psa.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ extern "C" {
158158
#define MBEDTLS_BIGNUM_C
159159
#define MBEDTLS_OID_C
160160
#define MBEDTLS_PKCS1_V21
161-
#define MBEDTLS_MD_C
162161
#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_OAEP */
163162
#endif /* PSA_WANT_ALG_RSA_OAEP */
164163

@@ -189,7 +188,6 @@ extern "C" {
189188
#define MBEDTLS_BIGNUM_C
190189
#define MBEDTLS_OID_C
191190
#define MBEDTLS_PKCS1_V21
192-
#define MBEDTLS_MD_C
193191
#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_PSS */
194192
#endif /* PSA_WANT_ALG_RSA_PSS */
195193

include/mbedtls/mbedtls_config.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,10 @@
11411141
*
11421142
* Enable support for PKCS#1 v2.1 encoding.
11431143
*
1144-
* Requires: MBEDTLS_MD_C, MBEDTLS_RSA_C
1144+
* Requires: MBEDTLS_RSA_C and (MBEDTLS_MD_C or MBEDTLS_PSA_CRYPTO_C).
1145+
*
1146+
* \warning If building without MBEDTLS_MD_C, you must call psa_crypto_init()
1147+
* before doing any PKCS#1 v2.1 operation.
11451148
*
11461149
* This enables support for RSAES-OAEP and RSASSA-PSS operations.
11471150
*/

library/hash_info.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "hash_info.h"
2424
#include "legacy_or_psa.h"
25+
#include "mbedtls/error.h"
2526

2627
typedef struct
2728
{
@@ -107,3 +108,20 @@ mbedtls_md_type_t mbedtls_hash_info_md_from_psa( psa_algorithm_t psa_alg )
107108

108109
return entry->md_type;
109110
}
111+
112+
int mbedtls_md_error_from_psa( psa_status_t status )
113+
{
114+
switch( status )
115+
{
116+
case PSA_SUCCESS:
117+
return( 0 );
118+
case PSA_ERROR_NOT_SUPPORTED:
119+
return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE );
120+
case PSA_ERROR_INVALID_ARGUMENT:
121+
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
122+
case PSA_ERROR_INSUFFICIENT_MEMORY:
123+
return( MBEDTLS_ERR_MD_ALLOC_FAILED );
124+
default:
125+
return( MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED );
126+
}
127+
}

library/hash_info.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,12 @@ psa_algorithm_t mbedtls_hash_info_psa_from_md( mbedtls_md_type_t md_type );
7474
*/
7575
mbedtls_md_type_t mbedtls_hash_info_md_from_psa( psa_algorithm_t psa_alg );
7676

77+
/** Convert PSA status to MD error code.
78+
*
79+
* \param status PSA status.
80+
*
81+
* \return The corresponding MD error code,
82+
*/
83+
int mbedtls_md_error_from_psa( psa_status_t status );
84+
7785
#endif /* MBEDTLS_HASH_INFO_H */

library/legacy_or_psa.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
* - low-level module API (aes.h, sha256.h), or
2828
* - an abstraction layer (md.h, cipher.h);
2929
* - <condition> will be either:
30-
* - depending on what's available in the build, or
30+
* - depending on what's available in the build:
31+
* legacy API used if available, PSA otherwise
32+
* (this is done to ensure backwards compatibility); or
3133
* - depending on whether MBEDTLS_USE_PSA_CRYPTO is defined.
3234
*
3335
* Examples:
@@ -125,31 +127,38 @@
125127

126128
/* Hashes using MD or PSA based on availability */
127129
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_MD5_C) ) || \
128-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_MD5) )
130+
( !defined(MBEDTLS_MD_C) && \
131+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_MD5) )
129132
#define MBEDTLS_HAS_ALG_MD5_VIA_MD_OR_PSA
130133
#endif
131134
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_RIPEMD160_C) ) || \
132-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_RIPEMD160) )
135+
( !defined(MBEDTLS_MD_C) && \
136+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_RIPEMD160) )
133137
#define MBEDTLS_HAS_ALG_RIPEMD160_VIA_MD_OR_PSA
134138
#endif
135139
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_SHA1_C) ) || \
136-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_1) )
140+
( !defined(MBEDTLS_MD_C) && \
141+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_1) )
137142
#define MBEDTLS_HAS_ALG_SHA_1_VIA_MD_OR_PSA
138143
#endif
139144
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_SHA224_C) ) || \
140-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_224) )
145+
( !defined(MBEDTLS_MD_C) && \
146+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_224) )
141147
#define MBEDTLS_HAS_ALG_SHA_224_VIA_MD_OR_PSA
142148
#endif
143149
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_SHA256_C) ) || \
144-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_256) )
150+
( !defined(MBEDTLS_MD_C) && \
151+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_256) )
145152
#define MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA
146153
#endif
147154
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_SHA384_C) ) || \
148-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_384) )
155+
( !defined(MBEDTLS_MD_C) && \
156+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_384) )
149157
#define MBEDTLS_HAS_ALG_SHA_384_VIA_MD_OR_PSA
150158
#endif
151159
#if ( defined(MBEDTLS_MD_C) && defined(MBEDTLS_SHA512_C) ) || \
152-
( defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_512) )
160+
( !defined(MBEDTLS_MD_C) && \
161+
defined(MBEDTLS_PSA_CRYPTO_C) && defined(PSA_WANT_ALG_SHA_512) )
153162
#define MBEDTLS_HAS_ALG_SHA_512_VIA_MD_OR_PSA
154163
#endif
155164

0 commit comments

Comments
 (0)