xref: /rk3399_ARM-atf/lib/psa/delegated_attestation.c (revision a1901c7d0d05ac02b254bf215fb889b9c0a9bc7d)
14b09ffefSTamas Ban /*
2d679cdecSManish V Badarkhe  * Copyright (c) 2022-2023, Arm Limited. All rights reserved.
34b09ffefSTamas Ban  *
44b09ffefSTamas Ban  * SPDX-License-Identifier: BSD-3-Clause
54b09ffefSTamas Ban  *
64b09ffefSTamas Ban  */
74b09ffefSTamas Ban 
84b09ffefSTamas Ban #include <delegated_attestation.h>
94b09ffefSTamas Ban #include <psa/client.h>
104b09ffefSTamas Ban #include <psa_manifest/sid.h>
114b09ffefSTamas Ban 
124b09ffefSTamas Ban psa_status_t
rse_delegated_attest_get_delegated_key(uint8_t ecc_curve,uint32_t key_bits,uint8_t * key_buf,size_t key_buf_size,size_t * key_size,uint32_t hash_algo)13*d797665cSTamas Ban rse_delegated_attest_get_delegated_key(uint8_t   ecc_curve,
144b09ffefSTamas Ban 				       uint32_t  key_bits,
154b09ffefSTamas Ban 				       uint8_t  *key_buf,
164b09ffefSTamas Ban 				       size_t    key_buf_size,
174b09ffefSTamas Ban 				       size_t   *key_size,
184b09ffefSTamas Ban 				       uint32_t  hash_algo)
194b09ffefSTamas Ban {
204b09ffefSTamas Ban 	psa_status_t status;
214b09ffefSTamas Ban 	psa_invec in_vec[] = {
224b09ffefSTamas Ban 		{&ecc_curve, sizeof(ecc_curve)},
234b09ffefSTamas Ban 		{&key_bits,  sizeof(key_bits)},
244b09ffefSTamas Ban 		{&hash_algo, sizeof(hash_algo)}
254b09ffefSTamas Ban 	};
264b09ffefSTamas Ban 	psa_outvec out_vec[] = {
274b09ffefSTamas Ban 		{key_buf, key_buf_size}
284b09ffefSTamas Ban 	};
294b09ffefSTamas Ban 
304b09ffefSTamas Ban 	if (key_size == NULL) {
314b09ffefSTamas Ban 		return PSA_ERROR_INVALID_ARGUMENT;
324b09ffefSTamas Ban 	}
334b09ffefSTamas Ban 
34*d797665cSTamas Ban 	status = psa_call(RSE_DELEGATED_SERVICE_HANDLE,
35*d797665cSTamas Ban 			  RSE_DELEGATED_ATTEST_GET_DELEGATED_KEY,
364b09ffefSTamas Ban 			  in_vec,  IOVEC_LEN(in_vec),
374b09ffefSTamas Ban 			  out_vec, IOVEC_LEN(out_vec));
384b09ffefSTamas Ban 	if (status == PSA_SUCCESS) {
394b09ffefSTamas Ban 		*key_size = out_vec[0].len;
404b09ffefSTamas Ban 	}
414b09ffefSTamas Ban 
424b09ffefSTamas Ban 	return status;
434b09ffefSTamas Ban }
444b09ffefSTamas Ban 
454b09ffefSTamas Ban psa_status_t
rse_delegated_attest_get_token(const uint8_t * dak_pub_hash,size_t dak_pub_hash_size,uint8_t * token_buf,size_t token_buf_size,size_t * token_size)46*d797665cSTamas Ban rse_delegated_attest_get_token(const uint8_t *dak_pub_hash,
474b09ffefSTamas Ban 			       size_t         dak_pub_hash_size,
484b09ffefSTamas Ban 			       uint8_t       *token_buf,
494b09ffefSTamas Ban 			       size_t         token_buf_size,
504b09ffefSTamas Ban 			       size_t        *token_size)
514b09ffefSTamas Ban {
524b09ffefSTamas Ban 	psa_status_t status;
534b09ffefSTamas Ban 	psa_invec in_vec[] = {
544b09ffefSTamas Ban 		{dak_pub_hash, dak_pub_hash_size}
554b09ffefSTamas Ban 	};
564b09ffefSTamas Ban 	psa_outvec out_vec[] = {
574b09ffefSTamas Ban 		{token_buf, token_buf_size}
584b09ffefSTamas Ban 	};
594b09ffefSTamas Ban 
604b09ffefSTamas Ban 	if (token_size == NULL) {
614b09ffefSTamas Ban 		return PSA_ERROR_INVALID_ARGUMENT;
624b09ffefSTamas Ban 	}
634b09ffefSTamas Ban 
64*d797665cSTamas Ban 	status = psa_call(RSE_DELEGATED_SERVICE_HANDLE,
65*d797665cSTamas Ban 			  RSE_DELEGATED_ATTEST_GET_PLATFORM_TOKEN,
664b09ffefSTamas Ban 			  in_vec, IOVEC_LEN(in_vec),
674b09ffefSTamas Ban 			  out_vec, IOVEC_LEN(out_vec));
684b09ffefSTamas Ban 	if (status == PSA_SUCCESS) {
694b09ffefSTamas Ban 		*token_size = out_vec[0].len;
704b09ffefSTamas Ban 	}
714b09ffefSTamas Ban 
724b09ffefSTamas Ban 	return status;
734b09ffefSTamas Ban }
74