1 /*
2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <psa/crypto.h>
8 #include "psa_crypto_client.h"
9 #include "crypto_caller_selector.h"
10
psa_key_derivation_setup(psa_key_derivation_operation_t * operation,psa_algorithm_t alg)11 psa_status_t psa_key_derivation_setup(
12 psa_key_derivation_operation_t *operation,
13 psa_algorithm_t alg)
14 {
15 if (psa_crypto_client_instance.init_status != PSA_SUCCESS)
16 return psa_crypto_client_instance.init_status;
17
18 return crypto_caller_key_derivation_setup(&psa_crypto_client_instance.base,
19 &operation->handle, alg);
20 }
21
psa_key_derivation_get_capacity(const psa_key_derivation_operation_t * operation,size_t * capacity)22 psa_status_t psa_key_derivation_get_capacity(
23 const psa_key_derivation_operation_t *operation,
24 size_t *capacity)
25 {
26 return crypto_caller_key_derivation_get_capacity(&psa_crypto_client_instance.base,
27 operation->handle, capacity);
28 }
29
psa_key_derivation_set_capacity(psa_key_derivation_operation_t * operation,size_t capacity)30 psa_status_t psa_key_derivation_set_capacity(
31 psa_key_derivation_operation_t *operation,
32 size_t capacity)
33 {
34 return crypto_caller_key_derivation_set_capacity(&psa_crypto_client_instance.base,
35 operation->handle, capacity);
36 }
37
psa_key_derivation_input_bytes(psa_key_derivation_operation_t * operation,psa_key_derivation_step_t step,const uint8_t * data,size_t data_length)38 psa_status_t psa_key_derivation_input_bytes(
39 psa_key_derivation_operation_t *operation,
40 psa_key_derivation_step_t step,
41 const uint8_t *data,
42 size_t data_length)
43 {
44 return crypto_caller_key_derivation_input_bytes(&psa_crypto_client_instance.base,
45 operation->handle, step,
46 data, data_length);
47 }
48
psa_key_derivation_input_key(psa_key_derivation_operation_t * operation,psa_key_derivation_step_t step,psa_key_id_t key)49 psa_status_t psa_key_derivation_input_key(
50 psa_key_derivation_operation_t *operation,
51 psa_key_derivation_step_t step,
52 psa_key_id_t key)
53 {
54 return crypto_caller_key_derivation_input_key(&psa_crypto_client_instance.base,
55 operation->handle, step, key);
56 }
57
psa_key_derivation_output_bytes(psa_key_derivation_operation_t * operation,uint8_t * output,size_t output_length)58 psa_status_t psa_key_derivation_output_bytes(
59 psa_key_derivation_operation_t *operation,
60 uint8_t *output,
61 size_t output_length)
62 {
63 return crypto_caller_key_derivation_output_bytes(&psa_crypto_client_instance.base,
64 operation->handle,
65 output, output_length);
66 }
67
psa_key_derivation_output_key(const psa_key_attributes_t * attributes,psa_key_derivation_operation_t * operation,psa_key_id_t * key)68 psa_status_t psa_key_derivation_output_key(
69 const psa_key_attributes_t *attributes,
70 psa_key_derivation_operation_t *operation,
71 psa_key_id_t *key)
72 {
73 return crypto_caller_key_derivation_output_key(&psa_crypto_client_instance.base,
74 attributes, operation->handle,
75 key);
76 }
77
psa_key_derivation_abort(psa_key_derivation_operation_t * operation)78 psa_status_t psa_key_derivation_abort(
79 psa_key_derivation_operation_t *operation)
80 {
81 return crypto_caller_key_derivation_abort(&psa_crypto_client_instance.base,
82 operation->handle);
83 }
84
psa_key_derivation_key_agreement(psa_key_derivation_operation_t * operation,psa_key_derivation_step_t step,psa_key_id_t private_key,const uint8_t * peer_key,size_t peer_key_length)85 psa_status_t psa_key_derivation_key_agreement(
86 psa_key_derivation_operation_t *operation,
87 psa_key_derivation_step_t step,
88 psa_key_id_t private_key,
89 const uint8_t *peer_key,
90 size_t peer_key_length)
91 {
92 return crypto_caller_key_derivation_key_agreement(&psa_crypto_client_instance.base,
93 operation->handle, step,
94 private_key, peer_key, peer_key_length);
95 }
96
psa_raw_key_agreement(psa_algorithm_t alg,psa_key_id_t private_key,const uint8_t * peer_key,size_t peer_key_length,uint8_t * output,size_t output_size,size_t * output_length)97 psa_status_t psa_raw_key_agreement(psa_algorithm_t alg,
98 psa_key_id_t private_key,
99 const uint8_t *peer_key,
100 size_t peer_key_length,
101 uint8_t *output,
102 size_t output_size,
103 size_t *output_length)
104 {
105 return crypto_caller_raw_key_agreement(&psa_crypto_client_instance.base,
106 alg,
107 private_key, peer_key, peer_key_length,
108 output, output_size, output_length);
109 }
110