99#include <assert.h>
1010
1111#include <mbedtls/aes.h>
12+
13+ #ifdef MBEDTLS_PSA_CRYPTO_C
14+ #include <psa/crypto.h>
15+ #else
1216#include <mbedtls/entropy.h>
1317#include <mbedtls/ctr_drbg.h>
18+ #endif
1419
1520#include <osdp.h>
1621
17- mbedtls_aes_context aes_ctx ;
18- mbedtls_entropy_context entropy_ctx ;
19- mbedtls_ctr_drbg_context ctr_drbg_ctx ;
22+ static mbedtls_aes_context aes_ctx ;
23+
24+ #ifndef MBEDTLS_PSA_CRYPTO_C
25+ static mbedtls_entropy_context entropy_ctx ;
26+ static mbedtls_ctr_drbg_context ctr_drbg_ctx ;
27+ #endif
2028
2129void osdp_crypt_setup ()
2230{
31+ mbedtls_aes_init (& aes_ctx );
32+
33+ #ifdef MBEDTLS_PSA_CRYPTO_C
34+ psa_status_t status = psa_crypto_init ();
35+ assert (status == PSA_SUCCESS );
36+ #else
2337 int rc ;
24- const char * version ;
38+ const char * version = osdp_get_version () ;
2539
26- version = osdp_get_version ();
27- mbedtls_aes_init (& aes_ctx );
2840 mbedtls_entropy_init (& entropy_ctx );
2941 mbedtls_ctr_drbg_init (& ctr_drbg_ctx );
30-
3142 rc = mbedtls_ctr_drbg_seed (& ctr_drbg_ctx ,
3243 mbedtls_entropy_func ,
3344 & entropy_ctx ,
3445 (const unsigned char * )version ,
3546 strlen (version ));
3647 assert (rc == 0 );
48+ #endif
3749}
3850
3951void osdp_encrypt (uint8_t * key , uint8_t * iv , uint8_t * data , int len )
4052{
4153 int rc ;
4254
4355 if (iv != NULL ) {
44- /* encrypt multiple block with AES in CBC mode */
4556 rc = mbedtls_aes_setkey_enc (& aes_ctx , key , 128 );
4657 assert (rc == 0 );
4758 rc = mbedtls_aes_crypt_cbc (& aes_ctx , MBEDTLS_AES_ENCRYPT ,
4859 len , iv , data , data );
4960 assert (rc == 0 );
5061 } else {
51- /* encrypt one block with AES in ECB mode */
5262 assert (len <= 16 );
5363 rc = mbedtls_aes_setkey_enc (& aes_ctx , key , 128 );
5464 assert (rc == 0 );
@@ -63,14 +73,12 @@ void osdp_decrypt(uint8_t *key, uint8_t *iv, uint8_t *data, int len)
6373 int rc ;
6474
6575 if (iv != NULL ) {
66- /* decrypt multiple block with AES in CBC mode */
6776 rc = mbedtls_aes_setkey_dec (& aes_ctx , key , 128 );
6877 assert (rc == 0 );
6978 rc = mbedtls_aes_crypt_cbc (& aes_ctx , MBEDTLS_AES_DECRYPT ,
7079 len , iv , data , data );
7180 assert (rc == 0 );
7281 } else {
73- /* decrypt one block with AES in ECB mode */
7482 assert (len <= 16 );
7583 rc = mbedtls_aes_setkey_dec (& aes_ctx , key , 128 );
7684 assert (rc == 0 );
@@ -82,15 +90,20 @@ void osdp_decrypt(uint8_t *key, uint8_t *iv, uint8_t *data, int len)
8290
8391void osdp_fill_random (uint8_t * buf , int len )
8492{
85- int rc ;
86-
87- rc = mbedtls_ctr_drbg_random (& ctr_drbg_ctx , buf , len );
93+ #ifdef MBEDTLS_PSA_CRYPTO_C
94+ psa_status_t status = psa_generate_random (buf , len );
95+ assert (status == PSA_SUCCESS );
96+ #else
97+ int rc = mbedtls_ctr_drbg_random (& ctr_drbg_ctx , buf , len );
8898 assert (rc == 0 );
99+ #endif
89100}
90101
91102void osdp_crypt_teardown ()
92103{
104+ #ifndef MBEDTLS_PSA_CRYPTO_C
93105 mbedtls_ctr_drbg_free (& ctr_drbg_ctx );
94106 mbedtls_entropy_free (& entropy_ctx );
107+ #endif
95108 mbedtls_aes_free (& aes_ctx );
96109}
0 commit comments