Loading...
Searching...
No Matches
crypto_extra.h File Reference

PSA cryptography module: Mbed TLS vendor extensions. More...

`#include "mbedtls/private_access.h"`
`#include "crypto_types.h"`
`#include "crypto_compat.h"`
Include dependency graph for crypto_extra.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | mbedtls_psa_stats_s
| Statistics about resource consumption related to the PSA keystore. More...
struct | psa_pake_cipher_suite_s
struct | psa_crypto_driver_pake_inputs_s
struct | psa_jpake_computation_stage_s
struct | psa_pake_operation_s

## Macros

#define | PSA_CRYPTO_ITS_RANDOM_SEED_UID 0xFFFFFF52
#define | PSA_KEY_TYPE_DSA_PUBLIC_KEY ((psa_key_type_t) 0x4002)
#define | PSA_KEY_TYPE_DSA_KEY_PAIR ((psa_key_type_t) 0x7002)
#define | PSA_KEY_TYPE_IS_DSA(type) (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY)
#define | PSA_ALG_DSA_BASE ((psa_algorithm_t) 0x06000400)
#define | PSA_ALG_DSA(hash_alg) (PSA_ALG_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
#define | PSA_ALG_DETERMINISTIC_DSA_BASE ((psa_algorithm_t) 0x06000500)
#define | PSA_ALG_DSA_DETERMINISTIC_FLAG PSA_ALG_ECDSA_DETERMINISTIC_FLAG
#define | PSA_ALG_DETERMINISTIC_DSA(hash_alg) (PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
#define | PSA_ALG_IS_DSA(alg)
#define | PSA_ALG_DSA_IS_DETERMINISTIC(alg) (((alg) & PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)
#define | PSA_ALG_IS_DETERMINISTIC_DSA(alg) (PSA_ALG_IS_DSA(alg) && PSA_ALG_DSA_IS_DETERMINISTIC(alg))
#define | PSA_ALG_IS_RANDOMIZED_DSA(alg) (PSA_ALG_IS_DSA(alg) && !PSA_ALG_DSA_IS_DETERMINISTIC(alg))
#define | PSA_ALG_IS_VENDOR_HASH_AND_SIGN(alg) PSA_ALG_IS_DSA(alg)
#define | PSA_PAKE_OPERATION_STAGE_SETUP 0
#define | PSA_PAKE_OPERATION_STAGE_COLLECT_INPUTS 1
#define | PSA_PAKE_OPERATION_STAGE_COMPUTATION 2
#define | MBEDTLS_PSA_KEY_ID_BUILTIN_MIN ((psa_key_id_t) 0x7fff0000)
#define | MBEDTLS_PSA_KEY_ID_BUILTIN_MAX ((psa_key_id_t) 0x7fffefff)
#define | PSA_ALG_CATEGORY_PAKE ((psa_algorithm_t) 0x0a000000)
#define | PSA_ALG_IS_PAKE(alg) (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_PAKE)
#define | PSA_ALG_JPAKE ((psa_algorithm_t) 0x0a000100)
#define | PSA_PAKE_ROLE_NONE ((psa_pake_role_t) 0x00)
#define | PSA_PAKE_ROLE_FIRST ((psa_pake_role_t) 0x01)
#define | PSA_PAKE_ROLE_SECOND ((psa_pake_role_t) 0x02)
#define | PSA_PAKE_ROLE_CLIENT ((psa_pake_role_t) 0x11)
#define | PSA_PAKE_ROLE_SERVER ((psa_pake_role_t) 0x12)
#define | PSA_PAKE_PRIMITIVE_TYPE_ECC ((psa_pake_primitive_type_t) 0x01)
#define | PSA_PAKE_PRIMITIVE_TYPE_DH ((psa_pake_primitive_type_t) 0x02)
#define | PSA_PAKE_PRIMITIVE(pake_type, pake_family, pake_bits)
#define | PSA_PAKE_STEP_KEY_SHARE ((psa_pake_step_t) 0x01)
#define | PSA_PAKE_STEP_ZK_PUBLIC ((psa_pake_step_t) 0x02)
#define | PSA_PAKE_STEP_ZK_PROOF ((psa_pake_step_t) 0x03)
#define | PSA_PAKE_OUTPUT_SIZE(alg, primitive, output_step)
#define | PSA_PAKE_INPUT_SIZE(alg, primitive, input_step)
#define | PSA_PAKE_OUTPUT_MAX_SIZE 65
#define | PSA_PAKE_INPUT_MAX_SIZE 65
#define | PSA_PAKE_CIPHER_SUITE_INIT { PSA_ALG_NONE, 0, 0, 0, PSA_ALG_NONE }
#define | PSA_PAKE_OPERATION_INIT
#define | PSA_JPAKE_EXPECTED_INPUTS(round)
#define | PSA_JPAKE_EXPECTED_OUTPUTS(round)
SECTION: Module configuration options
This section allows for the setting of module specific sizes and configuration options. The default values are already present in the relevant header files and should suffice for the regular use cases. Our advice is to enable options and change their values here only if you have a good reason and know the consequences.
#define | MBEDTLS_PSA_KEY_SLOT_COUNT 32

## Typedefs

typedef struct mbedtls_psa_stats_s | mbedtls_psa_stats_t
| Statistics about resource consumption related to the PSA keystore.
typedef uint64_t | psa_drv_slot_number_t
typedef uint8_t | psa_pake_role_t
| Encoding of the application role of PAKE.
typedef uint8_t | psa_pake_step_t
typedef uint8_t | psa_pake_primitive_type_t
typedef uint8_t | psa_pake_family_t
| Encoding of the family of the primitive associated with the PAKE.
typedef uint32_t | psa_pake_primitive_t
| Encoding of the primitive associated with the PAKE.
typedef struct psa_pake_cipher_suite_s | psa_pake_cipher_suite_t
typedef struct psa_pake_operation_s | psa_pake_operation_t
typedef struct psa_crypto_driver_pake_inputs_s | psa_crypto_driver_pake_inputs_t
typedef struct psa_jpake_computation_stage_s | psa_jpake_computation_stage_t
typedef enum psa_crypto_driver_pake_step | psa_crypto_driver_pake_step_t
typedef enum psa_jpake_round | psa_jpake_round_t
typedef enum psa_jpake_io_mode | psa_jpake_io_mode_t

## Enumerations

enum

psa_crypto_driver_pake_step {
PSA_JPAKE_STEP_INVALID = 0 , PSA_JPAKE_X1_STEP_KEY_SHARE = 1 , PSA_JPAKE_X1_STEP_ZK_PUBLIC = 2 , PSA_JPAKE_X1_STEP_ZK_PROOF = 3 ,
PSA_JPAKE_X2_STEP_KEY_SHARE = 4 , PSA_JPAKE_X2_STEP_ZK_PUBLIC = 5 , PSA_JPAKE_X2_STEP_ZK_PROOF = 6 , PSA_JPAKE_X2S_STEP_KEY_SHARE = 7 ,
PSA_JPAKE_X2S_STEP_ZK_PUBLIC = 8 , PSA_JPAKE_X2S_STEP_ZK_PROOF = 9 , PSA_JPAKE_X4S_STEP_KEY_SHARE = 10 , PSA_JPAKE_X4S_STEP_ZK_PUBLIC = 11 ,
PSA_JPAKE_X4S_STEP_ZK_PROOF = 12
}

enum | psa_jpake_round { PSA_JPAKE_FIRST = 0 , PSA_JPAKE_SECOND = 1 , PSA_JPAKE_FINISHED = 2 }
enum | psa_jpake_io_mode { PSA_JPAKE_INPUT = 0 , PSA_JPAKE_OUTPUT = 1 }

## Functions

static void | psa_set_key_enrollment_algorithm (psa_key_attributes_t *attributes, psa_algorithm_t alg2)
| Declare the enrollment algorithm for a key.
static psa_algorithm_t | psa_get_key_enrollment_algorithm (const psa_key_attributes_t *attributes)
void | mbedtls_psa_crypto_free (void)
| Library deinitialization.
void | mbedtls_psa_get_stats (mbedtls_psa_stats_t *stats)
| Get statistics about resource consumption related to the PSA keystore.
psa_status_t | mbedtls_psa_inject_entropy (const uint8_t *seed, size_t seed_size)
| Inject an initial entropy seed for the random generator into secure storage.
static psa_pake_cipher_suite_t | psa_pake_cipher_suite_init (void)
static psa_algorithm_t | psa_pake_cs_get_algorithm (const psa_pake_cipher_suite_t *cipher_suite)
static void | psa_pake_cs_set_algorithm (psa_pake_cipher_suite_t *cipher_suite, psa_algorithm_t algorithm)
static psa_pake_primitive_t | psa_pake_cs_get_primitive (const psa_pake_cipher_suite_t *cipher_suite)
static void | psa_pake_cs_set_primitive (psa_pake_cipher_suite_t *cipher_suite, psa_pake_primitive_t primitive)
static psa_pake_family_t | psa_pake_cs_get_family (const psa_pake_cipher_suite_t *cipher_suite)
static uint16_t | psa_pake_cs_get_bits (const psa_pake_cipher_suite_t *cipher_suite)
static psa_algorithm_t | psa_pake_cs_get_hash (const psa_pake_cipher_suite_t *cipher_suite)
static void | psa_pake_cs_set_hash (psa_pake_cipher_suite_t *cipher_suite, psa_algorithm_t hash)
static psa_pake_operation_t | psa_pake_operation_init (void)
psa_status_t | psa_crypto_driver_pake_get_password_len (const psa_crypto_driver_pake_inputs_t *inputs, size_t *password_len)
psa_status_t | psa_crypto_driver_pake_get_password (const psa_crypto_driver_pake_inputs_t *inputs, uint8_t *buffer, size_t buffer_size, size_t *buffer_length)
psa_status_t | psa_crypto_driver_pake_get_user_len (const psa_crypto_driver_pake_inputs_t *inputs, size_t *user_len)
psa_status_t | psa_crypto_driver_pake_get_peer_len (const psa_crypto_driver_pake_inputs_t *inputs, size_t *peer_len)
psa_status_t | psa_crypto_driver_pake_get_user (const psa_crypto_driver_pake_inputs_t *inputs, uint8_t *user_id, size_t user_id_size, size_t *user_id_len)
psa_status_t | psa_crypto_driver_pake_get_peer (const psa_crypto_driver_pake_inputs_t *inputs, uint8_t *peer_id, size_t peer_id_size, size_t *peer_id_length)
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)
psa_status_t | psa_pake_setup (psa_pake_operation_t *operation, const psa_pake_cipher_suite_t *cipher_suite)
psa_status_t | psa_pake_set_password_key (psa_pake_operation_t *operation, mbedtls_svc_key_id_t password)
psa_status_t | psa_pake_set_user (psa_pake_operation_t *operation, const uint8_t *user_id, size_t user_id_len)
psa_status_t | psa_pake_set_peer (psa_pake_operation_t *operation, const uint8_t *peer_id, size_t peer_id_len)
psa_status_t | psa_pake_set_role (psa_pake_operation_t *operation, psa_pake_role_t role)
psa_status_t | psa_pake_output (psa_pake_operation_t *operation, psa_pake_step_t step, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t | psa_pake_input (psa_pake_operation_t *operation, psa_pake_step_t step, const uint8_t *input, size_t input_length)
psa_status_t | psa_pake_get_implicit_key (psa_pake_operation_t *operation, psa_key_derivation_operation_t *output)
psa_status_t | psa_pake_abort (psa_pake_operation_t *operation)

## Detailed Description

PSA cryptography module: Mbed TLS vendor extensions.

Note
  This file may not be included directly. Applications must include psa/crypto.h.

This file is reserved for vendor-specific definitions.

Definition in file crypto_extra.h.

## Macro Definition Documentation

## MBEDTLS_PSA_KEY_SLOT_COUNT

#define MBEDTLS_PSA_KEY_SLOT_COUNT 32

Use HMAC_DRBG with the specified hash algorithm for HMAC_DRBG for the PSA crypto subsystem.

If this option is unset, the library chooses a hash (currently between MBEDTLS_MD_SHA512 and MBEDTLS_MD_SHA256) based on availability and unspecified heuristics.

Note
  The PSA crypto subsystem uses the first available mechanism amongst the following:
  - #MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG if enabled;
  - Entropy from MBEDTLS_ENTROPY_C plus CTR_DRBG with AES if MBEDTLS_CTR_DRBG_C is enabled;
  - Entropy from MBEDTLS_ENTROPY_C plus HMAC_DRBG.

A future version may reevaluate the prioritization of DRBG mechanisms.

When MBEDTLS_PSA_KEY_STORE_DYNAMIC is disabled, the maximum amount of PSA keys simultaneously in memory. This counts all volatile keys, plus loaded persistent keys.

When MBEDTLS_PSA_KEY_STORE_DYNAMIC is enabled, the maximum number of loaded persistent keys.

Currently, persistent keys do not need to be loaded all the time while a multipart operation is in progress, only while the operation is being set up. This may change in future versions of the library.

Currently, the library traverses of the whole table on each access to a persistent key. Therefore large values may cause poor performance.

This option has no effect when MBEDTLS_PSA_CRYPTO_C is disabled.

Definition at line 32 of file crypto_extra.h.

## PSA_CRYPTO_ITS_RANDOM_SEED_UID

#define PSA_CRYPTO_ITS_RANDOM_SEED_UID 0xFFFFFF52

Definition at line 28 of file crypto_extra.h.

## PSA_JPAKE_EXPECTED_INPUTS

#define PSA_JPAKE_EXPECTED_INPUTS | ( |  | round | ) |

Value:
((round) == PSA_JPAKE_FINISHED ? 0 : \
((round) == PSA_JPAKE_FIRST ? 2 : 1))
PSA_JPAKE_FINISHED
@ PSA_JPAKE_FINISHED
Definition crypto_extra.h:1817
PSA_JPAKE_FIRST
@ PSA_JPAKE_FIRST
Definition crypto_extra.h:1815

Definition at line 1838 of file crypto_extra.h.

## PSA_JPAKE_EXPECTED_OUTPUTS

#define PSA_JPAKE_EXPECTED_OUTPUTS | ( |  | round | ) |

Value:
((round) == PSA_JPAKE_FINISHED ? 0 : \
((round) == PSA_JPAKE_FIRST ? 2 : 1))

Definition at line 1840 of file crypto_extra.h.

## PSA_PAKE_CIPHER_SUITE_INIT

#define PSA_PAKE_CIPHER_SUITE_INIT { PSA_ALG_NONE, 0, 0, 0, PSA_ALG_NONE }

Returns a suitable initializer for a PAKE cipher suite object of type psa_pake_cipher_suite_t.

Definition at line 1706 of file crypto_extra.h.

## PSA_PAKE_INPUT_MAX_SIZE

#define PSA_PAKE_INPUT_MAX_SIZE 65

Input buffer size for psa_pake_input() for any of the supported PAKE algorithm and primitive suites and input step.

This macro must expand to a compile-time constant integer.

The value of this macro must be at least as large as the largest value returned by PSA_PAKE_INPUT_SIZE()

See also PSA_PAKE_INPUT_SIZE(`alg`, `primitive`, `output_step`).

Definition at line 1701 of file crypto_extra.h.

## PSA_PAKE_INPUT_SIZE

#define PSA_PAKE_INPUT_SIZE | ( |  | alg,
|  |  | primitive,
|  |  | input_step
| ) |  |

Value:
(alg == PSA_ALG_JPAKE && \
primitive == PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, \
PSA_ECC_FAMILY_SECP_R1, 256) ? \
( \
input_step == PSA_PAKE_STEP_KEY_SHARE ? 65 : \
input_step == PSA_PAKE_STEP_ZK_PUBLIC ? 65 : \
32 \
) : \
0)
PSA_ECC_FAMILY_SECP_R1
#define PSA_ECC_FAMILY_SECP_R1
Definition crypto_values.h:617
PSA_ALG_JPAKE
#define PSA_ALG_JPAKE
Definition crypto_extra.h:709
PSA_PAKE_STEP_KEY_SHARE
#define PSA_PAKE_STEP_KEY_SHARE
Definition crypto_extra.h:876
PSA_PAKE_PRIMITIVE_TYPE_ECC
#define PSA_PAKE_PRIMITIVE_TYPE_ECC
Definition crypto_extra.h:818
PSA_PAKE_STEP_ZK_PUBLIC
#define PSA_PAKE_STEP_ZK_PUBLIC
Definition crypto_extra.h:893
PSA_PAKE_PRIMITIVE
#define PSA_PAKE_PRIMITIVE(pake_type, pake_family, pake_bits)
Definition crypto_extra.h:859

A sufficient input buffer size for psa_pake_input().

The value returned by this macro is guaranteed to be large enough for any valid input to psa_pake_input() in an operation with the specified parameters.

See also PSA_PAKE_INPUT_MAX_SIZE

Parameters

  alg | A PAKE algorithm (`PSA_ALG_XXX` value such that PSA_ALG_IS_PAKE(`alg`) is true).
  primitive | A primitive of type psa_pake_primitive_t that is compatible with algorithm `alg`.
  input_step | A value of type psa_pake_step_t that is valid for the algorithm `alg`.

Returns
  A sufficient input buffer size for the specified input, cipher suite and algorithm. If the cipher suite, the input type or PAKE algorithm is not recognized, or the parameters are incompatible, return 0.

Definition at line 1668 of file crypto_extra.h.

## PSA_PAKE_OPERATION_INIT

#define PSA_PAKE_OPERATION_INIT

Value:
{ 0, PSA_ALG_NONE, 0, PSA_PAKE_OPERATION_STAGE_SETUP, \
{ 0 }, { { 0 } } }
PSA_PAKE_OPERATION_STAGE_SETUP
#define PSA_PAKE_OPERATION_STAGE_SETUP
Definition crypto_extra.h:420
PSA_ALG_NONE
#define PSA_ALG_NONE
Definition crypto_values.h:911

Returns a suitable initializer for a PAKE operation object of type psa_pake_operation_t.

Definition at line 1714 of file crypto_extra.h.

## PSA_PAKE_OUTPUT_MAX_SIZE

#define PSA_PAKE_OUTPUT_MAX_SIZE 65

Output buffer size for psa_pake_output() for any of the supported PAKE algorithm and primitive suites and output step.

This macro must expand to a compile-time constant integer.

The value of this macro must be at least as large as the largest value returned by PSA_PAKE_OUTPUT_SIZE()

See also PSA_PAKE_OUTPUT_SIZE(`alg`, `primitive`, `output_step`).

Definition at line 1689 of file crypto_extra.h.

## PSA_PAKE_OUTPUT_SIZE

#define PSA_PAKE_OUTPUT_SIZE | ( |  | alg,
|  |  | primitive,
|  |  | output_step
| ) |  |

Value:
(alg == PSA_ALG_JPAKE && \
primitive == PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, \
PSA_ECC_FAMILY_SECP_R1, 256) ? \
( \
output_step == PSA_PAKE_STEP_KEY_SHARE ? 65 : \
output_step == PSA_PAKE_STEP_ZK_PUBLIC ? 65 : \
32 \
) : \
0)

A sufficient output buffer size for psa_pake_output().

If the size of the output buffer is at least this large, it is guaranteed that psa_pake_output() will not fail due to an insufficient output buffer size. The actual size of the output might be smaller in any given call.

See also PSA_PAKE_OUTPUT_MAX_SIZE

Parameters

  alg | A PAKE algorithm (`PSA_ALG_XXX` value such that PSA_ALG_IS_PAKE(`alg`) is true).
  primitive | A primitive of type psa_pake_primitive_t that is compatible with algorithm `alg`.
  output_step | A value of type psa_pake_step_t that is valid for the algorithm `alg`.

Returns
  A sufficient output buffer size for the specified PAKE algorithm, primitive, and output step. If the PAKE algorithm, primitive, or output step is not recognized, or the parameters are incompatible, return 0.

Definition at line 1638 of file crypto_extra.h.

## Typedef Documentation

## mbedtls_psa_stats_t

typedef struct mbedtls_psa_stats_s mbedtls_psa_stats_t

Statistics about resource consumption related to the PSA keystore.

Note
  The content of this structure is not part of the stable API and ABI of Mbed TLS and may change arbitrarily from version to version.

## psa_crypto_driver_pake_step_t

typedef enum psa_crypto_driver_pake_step psa_crypto_driver_pake_step_t

## psa_jpake_io_mode_t

typedef enum psa_jpake_io_mode psa_jpake_io_mode_t

## psa_jpake_round_t

typedef enum psa_jpake_round psa_jpake_round_t

## Enumeration Type Documentation

## psa_crypto_driver_pake_step

enum psa_crypto_driver_pake_step

Enumerator
PSA_JPAKE_STEP_INVALID |
PSA_JPAKE_X1_STEP_KEY_SHARE |
PSA_JPAKE_X1_STEP_ZK_PUBLIC |
PSA_JPAKE_X1_STEP_ZK_PROOF |
PSA_JPAKE_X2_STEP_KEY_SHARE |
PSA_JPAKE_X2_STEP_ZK_PUBLIC |
PSA_JPAKE_X2_STEP_ZK_PROOF |
PSA_JPAKE_X2S_STEP_KEY_SHARE |
PSA_JPAKE_X2S_STEP_ZK_PUBLIC |
PSA_JPAKE_X2S_STEP_ZK_PROOF |
PSA_JPAKE_X4S_STEP_KEY_SHARE |
PSA_JPAKE_X4S_STEP_ZK_PUBLIC |
PSA_JPAKE_X4S_STEP_ZK_PROOF |

Definition at line 1798 of file crypto_extra.h.

## psa_jpake_io_mode

enum psa_jpake_io_mode

Enumerator
PSA_JPAKE_INPUT |
PSA_JPAKE_OUTPUT |

Definition at line 1820 of file crypto_extra.h.

## psa_jpake_round

enum psa_jpake_round

Enumerator
PSA_JPAKE_FIRST |
PSA_JPAKE_SECOND |
PSA_JPAKE_FINISHED |

Definition at line 1814 of file crypto_extra.h.

## Function Documentation

## mbedtls_psa_crypto_free()

void mbedtls_psa_crypto_free | ( | void |  | ) |

Library deinitialization.

This function clears all data associated with the PSA layer, including the whole key store. This function is not thread safe, it wipes every key slot regardless of state and reader count. It should only be called when no slot is in use.

This is an Mbed TLS extension.

## mbedtls_psa_get_stats()

void mbedtls_psa_get_stats | ( | mbedtls_psa_stats_t * | stats | ) |

Get statistics about resource consumption related to the PSA keystore.

Note
  When Mbed TLS is built as part of a service, with isolation between the application and the keystore, the service may or may not expose this function.

## mbedtls_psa_inject_entropy()

psa_status_t mbedtls_psa_inject_entropy | ( | const uint8_t * | seed,
|  | size_t | seed_size
| ) |  |

Inject an initial entropy seed for the random generator into secure storage.

This function injects data to be used as a seed for the random generator used by the PSA Crypto implementation. On devices that lack a trusted entropy source (preferably a hardware random number generator), the Mbed PSA Crypto implementation uses this value to seed its random generator.

On devices without a trusted entropy source, this function must be called exactly once in the lifetime of the device. On devices with a trusted entropy source, calling this function is optional. In all cases, this function may only be called before calling any other function in the PSA Crypto API, including psa_crypto_init().

When this function returns successfully, it populates a file in persistent storage. Once the file has been created, this function can no longer succeed.

If any error occurs, this function does not change the system state. You can call this function again after correcting the reason for the error if possible.

Warning
  This function can fail! Callers MUST check the return status.
  If you use this function, you should use it as part of a factory provisioning process. The value of the injected seed is critical to the security of the device. It must be secret, unpredictable and (statistically) unique per device. You should be generate it randomly using a cryptographically secure random generator seeded from trusted entropy sources. You should transmit it securely to the device and ensure that its value is not leaked or stored anywhere beyond the needs of transmitting it from the point of generation to the call of this function, and erase all copies of the value once this function returns.

This is an Mbed TLS extension.

Note
  This function is only available on the following platforms:
  - If the compile-time option MBEDTLS_PSA_INJECT_ENTROPY is enabled. Note that you must provide compatible implementations of mbedtls_nv_seed_read and mbedtls_nv_seed_write.
  - In a client-server integration of PSA Cryptography, on the client side, if the server supports this feature.

Parameters

  [in] | seed | Buffer containing the seed value to inject.
  [in] | seed_size | Size of the `seed` buffer. The size of the seed in bytes must be greater or equal to both MBEDTLS_ENTROPY_BLOCK_SIZE and the value of `MBEDTLS_ENTROPY_MIN_PLATFORM` in `library/entropy_poll.h` in the Mbed TLS source code. It must be less or equal to MBEDTLS_ENTROPY_MAX_SEED_SIZE.

Return values

  PSA_SUCCESS | The seed value was injected successfully. The random generator of the PSA Crypto implementation is now ready for use. You may now call psa_crypto_init() and use the PSA Crypto implementation.
  PSA_ERROR_INVALID_ARGUMENT | `seed_size` is out of range.
  PSA_ERROR_STORAGE_FAILURE | There was a failure reading or writing from storage.
  PSA_ERROR_NOT_PERMITTED | The library has already been initialized. It is no longer possible to call this function.