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