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