diff --git a/include/psa/crypto_extra.h b/include/psa/crypto_extra.h index f6fdcfeba5..5357be8de0 100644 --- a/include/psa/crypto_extra.h +++ b/include/psa/crypto_extra.h @@ -1347,6 +1347,70 @@ psa_status_t psa_crypto_driver_pake_get_role( const psa_crypto_driver_pake_inputs_t *inputs, psa_pake_role_t *role); +/** Get the lengths of the user in bytes from given inputs. + * + * \param[in] inputs Operation inputs. + * \param[out] user_len Return buffer for user length. + * + * \retval #PSA_SUCCESS + * Success. + * \retval #PSA_ERROR_BAD_STATE + * User hasn't been set yet. + */ +psa_status_t psa_crypto_driver_pake_get_user_len( + const psa_crypto_driver_pake_inputs_t *inputs, + size_t *user_len); + +/** Get the lengths of the peer in bytes from given inputs. + * + * \param[in] inputs Operation inputs. + * \param[out] peer_len Return buffer for peer length. + * + * \retval #PSA_SUCCESS + * Success. + * \retval #PSA_ERROR_BAD_STATE + * Peer hasn't been set yet. + */ +psa_status_t psa_crypto_driver_pake_get_peer_len( + const psa_crypto_driver_pake_inputs_t *inputs, + size_t *peer_len); + +/** Get the user from given inputs. + * + * \param[in] inputs Operation inputs. + * \param[out] buffer Return buffer for user. + * \param buffer_size Size of the return buffer in bytes. + * \param[out] buffer_length Actual size of the password in bytes. + * + * \retval #PSA_SUCCESS + * Success. + * \retval #PSA_ERROR_BAD_STATE + * User hasn't been set yet. + * \retval #PSA_ERROR_BUFFER_TOO_SMALL + * The size of the \p buffer is too small. + */ +psa_status_t psa_crypto_driver_pake_get_user( + const psa_crypto_driver_pake_inputs_t *inputs, + uint8_t *buffer, size_t buffer_size, size_t *buffer_length); + +/** Get the peer from given inputs. + * + * \param[in] inputs Operation inputs. + * \param[out] buffer Return buffer for user. + * \param buffer_size Size of the return buffer in bytes. + * \param[out] buffer_length Actual size of the password in bytes. + * + * \retval #PSA_SUCCESS + * Success. + * \retval #PSA_ERROR_BAD_STATE + * Peer hasn't been set yet. + * \retval #PSA_ERROR_BUFFER_TOO_SMALL + * The size of the \p buffer is too small. + */ +psa_status_t psa_crypto_driver_pake_get_peer( + const psa_crypto_driver_pake_inputs_t *inputs, + uint8_t *buffer, size_t buffer_size, size_t *buffer_length); + /** Get the cipher suite from given inputs. * * \param[in] inputs Operation inputs. diff --git a/library/psa_crypto.c b/library/psa_crypto.c index 31df082e15..7422cbb596 100644 --- a/library/psa_crypto.c +++ b/library/psa_crypto.c @@ -7209,6 +7209,68 @@ psa_status_t psa_crypto_driver_pake_get_role( return PSA_SUCCESS; } +psa_status_t psa_crypto_driver_pake_get_user_len( + const psa_crypto_driver_pake_inputs_t *inputs, + size_t *user_len) +{ + if (inputs->user_len == 0) { + return PSA_ERROR_BAD_STATE; + } + + *user_len = inputs->user_len; + + return PSA_SUCCESS; +} + +psa_status_t psa_crypto_driver_pake_get_user( + const psa_crypto_driver_pake_inputs_t *inputs, + uint8_t *buffer, size_t buffer_size, size_t *buffer_length) +{ + if (inputs->user_len == 0) { + return PSA_ERROR_BAD_STATE; + } + + if (buffer_size < inputs->user_len) { + return PSA_ERROR_BUFFER_TOO_SMALL; + } + + memcpy(buffer, inputs->user, inputs->user_len); + *buffer_length = inputs->user_len; + + return PSA_SUCCESS; +} + +psa_status_t psa_crypto_driver_pake_get_peer_len( + const psa_crypto_driver_pake_inputs_t *inputs, + size_t *peer_len) +{ + if (inputs->peer_len == 0) { + return PSA_ERROR_BAD_STATE; + } + + *peer_len = inputs->peer_len; + + return PSA_SUCCESS; +} + +psa_status_t psa_crypto_driver_pake_get_peer( + const psa_crypto_driver_pake_inputs_t *inputs, + uint8_t *buffer, size_t buffer_size, size_t *buffer_length) +{ + if (inputs->peer_len == 0) { + return PSA_ERROR_BAD_STATE; + } + + if (buffer_size < inputs->peer_len) { + return PSA_ERROR_BUFFER_TOO_SMALL; + } + + memcpy(buffer, inputs->peer, inputs->peer_len); + *buffer_length = inputs->peer_len; + + return PSA_SUCCESS; +} + psa_status_t psa_crypto_driver_pake_get_cipher_suite( const psa_crypto_driver_pake_inputs_t *inputs, psa_pake_cipher_suite_t *cipher_suite)