Skip to content

Commit 0ca2001

Browse files
committed
nrf_security: Include key wrap in psa_crypto_driver_wrappers.c
Required when using linker options to keep all sections: zephyr_ld_options(-Wl,--no-gc-sections) zephyr_ld_options(-Wl,--orphan-handling=place) Signed-off-by: Magne Værnes <magne.varnes@nordicsemi.no>
1 parent 55d0fe2 commit 0ca2001

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

subsys/nrf_security/src/psa_crypto_driver_wrappers.c

+72
Original file line numberDiff line numberDiff line change
@@ -2814,6 +2814,78 @@ psa_status_t psa_driver_wrapper_init_random(psa_driver_random_context_t *context
28142814
#endif
28152815
}
28162816

2817+
/*
2818+
* Key wrapping functions.
2819+
*/
2820+
psa_status_t psa_driver_wrapper_wrap_key(const psa_key_attributes_t *wrapping_key_attributes,
2821+
const uint8_t *wrapping_key_data, size_t wrapping_key_size,
2822+
psa_algorithm_t alg,
2823+
const psa_key_attributes_t *key_attributes,
2824+
const uint8_t *key_data, size_t key_size, uint8_t *data,
2825+
size_t data_size, size_t *data_length)
2826+
{
2827+
switch (PSA_KEY_LIFETIME_GET_LOCATION(wrapping_key_attributes->lifetime)) {
2828+
case PSA_KEY_LOCATION_LOCAL_STORAGE:
2829+
/* Add cases for transparent drivers here */
2830+
#ifdef PSA_NEED_OBERON_KEY_WRAP_DRIVER
2831+
return oberon_wrap_key(wrapping_key_attributes, wrapping_key_data,
2832+
wrapping_key_size, alg, key_attributes, key_data, key_size,
2833+
data, data_size, data_length);
2834+
#endif /* PSA_NEED_OBERON_KEY_WRAP_DRIVER */
2835+
return PSA_ERROR_NOT_SUPPORTED;
2836+
2837+
/* Add cases for opaque drivers here */
2838+
2839+
default:
2840+
/* Key is declared with a lifetime not known to us */
2841+
(void)key_attributes;
2842+
(void)key_data;
2843+
(void)key_size;
2844+
(void)wrapping_key_data;
2845+
(void)wrapping_key_size;
2846+
(void)alg;
2847+
(void)data;
2848+
(void)data_size;
2849+
(void)data_length;
2850+
return PSA_ERROR_INVALID_ARGUMENT;
2851+
}
2852+
}
2853+
2854+
psa_status_t psa_driver_wrapper_unwrap_key(const psa_key_attributes_t *attributes,
2855+
const psa_key_attributes_t *wrapping_key_attributes,
2856+
const uint8_t *wrapping_key_data,
2857+
size_t wrapping_key_size, psa_algorithm_t alg,
2858+
const uint8_t *data, size_t data_length, uint8_t *key,
2859+
size_t key_size, size_t *key_length)
2860+
{
2861+
switch (PSA_KEY_LIFETIME_GET_LOCATION(wrapping_key_attributes->lifetime)) {
2862+
case PSA_KEY_LOCATION_LOCAL_STORAGE:
2863+
/* Add cases for transparent drivers here */
2864+
#ifdef PSA_NEED_OBERON_KEY_WRAP_DRIVER
2865+
return oberon_unwrap_key(attributes, wrapping_key_attributes, wrapping_key_data,
2866+
wrapping_key_size, alg, data, data_length, key, key_size,
2867+
key_length);
2868+
#endif /* PSA_NEED_OBERON_KEY_WRAP_DRIVER */
2869+
return PSA_ERROR_NOT_SUPPORTED;
2870+
2871+
/* Add cases for opaque drivers here */
2872+
2873+
default:
2874+
/* Key is declared with a lifetime not known to us */
2875+
(void)attributes;
2876+
(void)key_size;
2877+
(void)wrapping_key_data;
2878+
(void)wrapping_key_size;
2879+
(void)alg;
2880+
(void)data;
2881+
(void)data_length;
2882+
(void)key;
2883+
(void)key_size;
2884+
(void)key_length;
2885+
return PSA_ERROR_INVALID_ARGUMENT;
2886+
}
2887+
}
2888+
28172889
psa_status_t psa_driver_wrapper_get_random(psa_driver_random_context_t *context, uint8_t *output,
28182890
size_t output_size)
28192891
{

0 commit comments

Comments
 (0)