test_driver_key_agreement.c (4852B)
1 /* 2 * Test driver for key agreement functions. 3 */ 4 /* Copyright The Mbed TLS Contributors 5 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6 */ 7 8 #include <test/helpers.h> 9 10 #if defined(PSA_CRYPTO_DRIVER_TEST) 11 12 #include "psa/crypto.h" 13 #include "psa_crypto_core.h" 14 #include "psa_crypto_ecp.h" 15 #include "psa_crypto_ffdh.h" 16 17 #include "test/drivers/key_agreement.h" 18 #include "test/drivers/test_driver.h" 19 20 #include <string.h> 21 22 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) 23 #if MBEDTLS_VERSION_MAJOR < 4 24 #include "libtestdriver1/include/psa/crypto.h" 25 #include "libtestdriver1/library/psa_crypto_ecp.h" 26 #include "libtestdriver1/library/psa_crypto_ffdh.h" 27 #else 28 #include "libtestdriver1/tf-psa-crypto/include/psa/crypto.h" 29 #include "libtestdriver1/tf-psa-crypto/drivers/builtin/src/psa_crypto_ecp.h" 30 #include "libtestdriver1/tf-psa-crypto/drivers/builtin/src/psa_crypto_ffdh.h" 31 #endif 32 #endif 33 34 mbedtls_test_driver_key_agreement_hooks_t 35 mbedtls_test_driver_key_agreement_hooks = MBEDTLS_TEST_DRIVER_KEY_AGREEMENT_INIT; 36 37 psa_status_t mbedtls_test_transparent_key_agreement( 38 const psa_key_attributes_t *attributes, 39 const uint8_t *key_buffer, 40 size_t key_buffer_size, 41 psa_algorithm_t alg, 42 const uint8_t *peer_key, 43 size_t peer_key_length, 44 uint8_t *shared_secret, 45 size_t shared_secret_size, 46 size_t *shared_secret_length) 47 { 48 mbedtls_test_driver_key_agreement_hooks.hits++; 49 50 if (mbedtls_test_driver_key_agreement_hooks.forced_status != PSA_SUCCESS) { 51 return mbedtls_test_driver_key_agreement_hooks.forced_status; 52 } 53 54 if (mbedtls_test_driver_key_agreement_hooks.forced_output != NULL) { 55 if (mbedtls_test_driver_key_agreement_hooks.forced_output_length > shared_secret_size) { 56 return PSA_ERROR_BUFFER_TOO_SMALL; 57 } 58 59 memcpy(shared_secret, mbedtls_test_driver_key_agreement_hooks.forced_output, 60 mbedtls_test_driver_key_agreement_hooks.forced_output_length); 61 *shared_secret_length = mbedtls_test_driver_key_agreement_hooks.forced_output_length; 62 63 return PSA_SUCCESS; 64 } 65 66 if (PSA_ALG_IS_ECDH(alg)) { 67 #if (defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 68 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_ALG_ECDH)) 69 return libtestdriver1_mbedtls_psa_key_agreement_ecdh( 70 (const libtestdriver1_psa_key_attributes_t *) attributes, 71 key_buffer, key_buffer_size, 72 alg, peer_key, peer_key_length, 73 shared_secret, shared_secret_size, 74 shared_secret_length); 75 #elif defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH) 76 return mbedtls_psa_key_agreement_ecdh( 77 attributes, 78 key_buffer, key_buffer_size, 79 alg, peer_key, peer_key_length, 80 shared_secret, shared_secret_size, 81 shared_secret_length); 82 #else 83 (void) attributes; 84 (void) key_buffer; 85 (void) key_buffer_size; 86 (void) peer_key; 87 (void) peer_key_length; 88 (void) shared_secret; 89 (void) shared_secret_size; 90 (void) shared_secret_length; 91 return PSA_ERROR_NOT_SUPPORTED; 92 #endif 93 } 94 if (PSA_ALG_IS_FFDH(alg)) { 95 #if (defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 96 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_ALG_FFDH)) 97 return libtestdriver1_mbedtls_psa_ffdh_key_agreement( 98 (const libtestdriver1_psa_key_attributes_t *) attributes, 99 peer_key, peer_key_length, 100 key_buffer, key_buffer_size, 101 shared_secret, shared_secret_size, 102 shared_secret_length); 103 #elif defined(MBEDTLS_PSA_BUILTIN_ALG_FFDH) 104 return mbedtls_psa_ffdh_key_agreement( 105 attributes, 106 peer_key, 107 peer_key_length, 108 key_buffer, 109 key_buffer_size, 110 shared_secret, 111 shared_secret_size, 112 shared_secret_length); 113 #else 114 (void) attributes; 115 (void) key_buffer; 116 (void) key_buffer_size; 117 (void) peer_key; 118 (void) peer_key_length; 119 (void) shared_secret; 120 (void) shared_secret_size; 121 (void) shared_secret_length; 122 return PSA_ERROR_NOT_SUPPORTED; 123 #endif 124 } else { 125 return PSA_ERROR_INVALID_ARGUMENT; 126 } 127 128 } 129 130 psa_status_t mbedtls_test_opaque_key_agreement( 131 const psa_key_attributes_t *attributes, 132 const uint8_t *key_buffer, 133 size_t key_buffer_size, 134 psa_algorithm_t alg, 135 const uint8_t *peer_key, 136 size_t peer_key_length, 137 uint8_t *shared_secret, 138 size_t shared_secret_size, 139 size_t *shared_secret_length) 140 { 141 (void) attributes; 142 (void) key_buffer; 143 (void) key_buffer_size; 144 (void) alg; 145 (void) peer_key; 146 (void) peer_key_length; 147 (void) shared_secret; 148 (void) shared_secret_size; 149 (void) shared_secret_length; 150 return PSA_ERROR_NOT_SUPPORTED; 151 } 152 153 #endif /* PSA_CRYPTO_DRIVER_TEST */