|
Mbed TLS v4.0.0
|
Typedefs | |
| typedef struct psa_key_agreement_iop_s | psa_key_agreement_iop_t |
Functions | |
| uint32_t | psa_key_agreement_iop_get_num_ops (psa_key_agreement_iop_t *operation) |
Get the number of ops that a key agreement operation has taken so far. If the operation has completed, then this will represent the number of ops required for the entire operation. After initialization or calling psa_key_agreement_iop_abort() on the operation, a value of 0 will be returned. More... | |
| psa_status_t | psa_key_agreement_iop_setup (psa_key_agreement_iop_t *operation, mbedtls_svc_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length, psa_algorithm_t alg, const psa_key_attributes_t *attributes) |
| Start a key agreement operation, in an interruptible manner. More... | |
| psa_status_t | psa_key_agreement_iop_complete (psa_key_agreement_iop_t *operation, mbedtls_svc_key_id_t *key) |
| Continue and eventually complete the action of key agreement, in an interruptible manner. More... | |
| psa_status_t | psa_key_agreement_iop_abort (psa_key_agreement_iop_t *operation) |
| Abort a key agreement operation. More... | |
| typedef struct psa_key_agreement_iop_s psa_key_agreement_iop_t |
The type of the state data structure for interruptible key agreement operations.
Before calling any function on an interruptible key agreement object, the application must initialize it by any of the following means:
This is an implementation-defined struct. Applications should not make any assumptions about the content of this structure. Implementation details can change in future versions without notice.
| psa_status_t psa_key_agreement_iop_abort | ( | psa_key_agreement_iop_t * | operation | ) |
Abort a key agreement operation.
psa_key_agreement_iop_get_num_ops() if required before calling.psa_key_agreement_iop_setup() again.psa_key_agreement_iop_abort() after the operation has already been terminated by a call to psa_key_agreement_iop_abort() or psa_key_agreement_iop_complete() is safe.| [in,out] | operation | The psa_key_agreement_iop_t to use |
| PSA_SUCCESS | The operation was aborted successfully. |
| PSA_ERROR_BAD_STATE | The library has not been previously initialized by psa_crypto_init(). |
| psa_status_t psa_key_agreement_iop_complete | ( | psa_key_agreement_iop_t * | operation, |
| mbedtls_svc_key_id_t * | key | ||
| ) |
Continue and eventually complete the action of key agreement, in an interruptible manner.
psa_key_agreement_iop_setup() psa_key_agreement_iop_setup() is equivalent to psa_raw_key_agreement() but this function can return early and resume according to the limit set with psa_interruptible_set_max_ops() to reduce the maximum time spent in a function call.psa_key_agreement_iop_abort() at any point if they no longer want the result.psa_key_agreement_iop_abort().| [in,out] | operation | The psa_key_agreement_iop_t to use. This must be initialized first, and have had psa_key_agreement_iop_start() called with it first. |
| [out] | key | On success, an identifier for the newly created key. On failure this will be set to PSA_KEY_ID_NULL. |
| PSA_SUCCESS | The operation is complete and key contains the shared secret. If the key is persistent, the key material and the key's metadata have been saved to persistent storage. |
| PSA_OPERATION_INCOMPLETE | Operation was interrupted due to the setting of psa_interruptible_set_max_ops(). There is still work to be done. Call this function again with the same operation object. |
| PSA_ERROR_ALREADY_EXISTS | This is an attempt to create a persistent key, and there is already a persistent key with the given identifier. |
| PSA_ERROR_INVALID_SIGNATURE | The calculation was performed successfully, but the passed signature is not a valid signature. |
| PSA_ERROR_BAD_STATE | An operation was not previously started on this context via psa_key_agreement_iop_start(). |
| PSA_ERROR_NOT_SUPPORTED | |
| PSA_ERROR_INVALID_ARGUMENT | |
| PSA_ERROR_INSUFFICIENT_MEMORY | |
| PSA_ERROR_COMMUNICATION_FAILURE | |
| PSA_ERROR_HARDWARE_FAILURE | |
| PSA_ERROR_CORRUPTION_DETECTED | |
| PSA_ERROR_STORAGE_FAILURE | |
| PSA_ERROR_DATA_CORRUPT | |
| PSA_ERROR_DATA_INVALID | |
| PSA_ERROR_INSUFFICIENT_ENTROPY | |
| PSA_ERROR_BAD_STATE | The following conditions can result in this error:
|
| uint32_t psa_key_agreement_iop_get_num_ops | ( | psa_key_agreement_iop_t * | operation | ) |
Get the number of ops that a key agreement operation has taken so far. If the operation has completed, then this will represent the number of ops required for the entire operation. After initialization or calling psa_key_agreement_iop_abort() on the operation, a value of 0 will be returned.
This is a helper provided to help you tune the value passed to psa_interruptible_set_max_ops().
| operation | The psa_key_agreement_iop_t to use. This must be initialized first. |
| psa_status_t psa_key_agreement_iop_setup | ( | psa_key_agreement_iop_t * | operation, |
| mbedtls_svc_key_id_t | private_key, | ||
| const uint8_t * | peer_key, | ||
| size_t | peer_key_length, | ||
| psa_algorithm_t | alg, | ||
| const psa_key_attributes_t * | attributes | ||
| ) |
Start a key agreement operation, in an interruptible manner.
psa_key_agreement_iop_complete() psa_key_agreement_iop_complete() is equivalent to psa_raw_key_agreement() but psa_key_agreement_iop_complete() can return early and resume according to the limit set with psa_interruptible_set_max_ops() to reduce the maximum time spent in a function.psa_key_agreement_iop_complete() repeatedly on the same operation object after a successful call to this function until psa_key_agreement_iop_complete() either returns PSA_SUCCESS or an error. psa_key_agreement_iop_complete() will return PSA_OPERATION_INCOMPLETE if there is more work to do. Alternatively users can call psa_key_agreement_iop_abort() at any point if they no longer want the result.psa_key_agreement_iop_abort().| [in,out] | operation | The psa_key_agreement_iop_t to use. This must be initialized as per the documentation for psa_key_agreement_iop_t, and be inactive. |
| private_key | Identifier of the private key to use. It must allow the usage PSA_KEY_USAGE_DERIVE. | |
| [in] | peer_key | Public key of the peer. It must be in the same format that psa_import_key() accepts. The standard formats for public keys are documented in the documentation of psa_export_public_key(). The peer key data is parsed with the type PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) where type is the type of private_key, and with the same bit-size as private_key. |
| peer_key_length | Size of peer_key in bytes. | |
| alg | The key agreement algorithm to compute (a PSA_ALG_XXX value such that PSA_ALG_IS_KEY_AGREEMENT(alg) is true). | |
| [in] | attributes | The attributes for the new key. The following attributes are required for all keys:
|
attributes is an input parameter, it is not updated with the final key attributes. The final attributes of the new key can be queried by calling psa_get_key_attributes() with the key's identifier.psa_key_agreement_iop_get_num_ops() if required before calling.| PSA_SUCCESS | The operation started successfully. Call psa_key_agreement_iop_complete() with the same context to complete the operation. |
| PSA_ERROR_BAD_STATE | Another operation has already been started on this context, and is still in progress. |
| PSA_ERROR_NOT_PERMITTED | The following conditions can result in this error:
|
| PSA_ERROR_INVALID_HANDLE | private_key is not a valid key identifier. |
| PSA_ERROR_ALREADY_EXISTS | This is an attempt to create a persistent key, and there is already a persistent key with the given identifier. |
| PSA_ERROR_INVALID_ARGUMENT | The following conditions can result in this error:
|
| PSA_ERROR_NOT_SUPPORTED | The following conditions can result in this error:
|
| PSA_ERROR_INVALID_ARGUMENT | |
| PSA_ERROR_INSUFFICIENT_MEMORY | |
| PSA_ERROR_COMMUNICATION_FAILURE | |
| PSA_ERROR_HARDWARE_FAILURE | |
| PSA_ERROR_CORRUPTION_DETECTED | |
| PSA_ERROR_STORAGE_FAILURE | |
| PSA_ERROR_DATA_CORRUPT | |
| PSA_ERROR_DATA_INVALID | |
| PSA_ERROR_INSUFFICIENT_STORAGE | |
| PSA_ERROR_BAD_STATE | The following conditions can result in this error:
|
1.8.6