1 /* 2 * Copyright (c) 2022-2024, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef PSA_MEASURED_BOOT_H 9 #define PSA_MEASURED_BOOT_H 10 11 #include <stdbool.h> 12 #include <stddef.h> 13 #include <stdint.h> 14 15 #include "psa/error.h" 16 17 /** 18 * Extends and stores a measurement to the requested slot. 19 * 20 * index Slot number in which measurement is to be stored 21 * signer_id Pointer to signer_id buffer. 22 * signer_id_size Size of the signer_id in bytes. 23 * version Pointer to version buffer. 24 * version_size Size of the version string in bytes. 25 * measurement_algo Algorithm identifier used for measurement. 26 * sw_type Pointer to sw_type buffer. 27 * sw_type_size Size of the sw_type string in bytes. 28 * measurement_value Pointer to measurement_value buffer. 29 * measurement_value_size Size of the measurement_value in bytes. 30 * lock_measurement Boolean flag requesting whether the measurement 31 * is to be locked. 32 * 33 * PSA_SUCCESS: 34 * - Success. 35 * PSA_ERROR_INVALID_ARGUMENT: 36 * - The size of any argument is invalid OR 37 * - Input Measurement value is NULL OR 38 * - Input Signer ID is NULL OR 39 * - Requested slot index is invalid. 40 * PSA_ERROR_BAD_STATE: 41 * - Request to lock, when slot is already locked. 42 * PSA_ERROR_NOT_PERMITTED: 43 * - When the requested slot is not accessible to the caller. 44 */ 45 46 /* Not a standard PSA API, just an extension therefore use the 'rse_' prefix 47 * rather than the usual 'psa_'. 48 */ 49 psa_status_t 50 rse_measured_boot_extend_measurement(uint8_t index, 51 const uint8_t *signer_id, 52 size_t signer_id_size, 53 const uint8_t *version, 54 size_t version_size, 55 uint32_t measurement_algo, 56 const uint8_t *sw_type, 57 size_t sw_type_size, 58 const uint8_t *measurement_value, 59 size_t measurement_value_size, 60 bool lock_measurement); 61 62 /** 63 * Retrieves a measurement from the requested slot. 64 * 65 * index Slot number from which measurement is to be 66 * retrieved. 67 * signer_id Pointer to signer_id buffer. 68 * signer_id_size Size of the signer_id buffer in bytes. 69 * signer_id_len On success, number of bytes that make up 70 * signer_id. 71 * version Pointer to version buffer. 72 * version_size Size of the version buffer in bytes. 73 * version_len On success, number of bytes that makeup the 74 * version. 75 * measurement_algo Pointer to measurement_algo. 76 * sw_type Pointer to sw_type buffer. 77 * sw_type_size Size of the sw_type buffer in bytes. 78 * sw_type_len On success, number of bytes that makeup the 79 * sw_type. 80 * measurement_value Pointer to measurement_value buffer. 81 * measurement_value_size Size of the measurement_value buffer in bytes. 82 * measurement_value_len On success, number of bytes that make up the 83 * measurement_value. 84 * is_locked Pointer to lock status of requested measurement 85 * slot. 86 * 87 * PSA_SUCCESS 88 * - Success. 89 * PSA_ERROR_INVALID_ARGUMENT 90 * - The size of at least one of the output buffers is incorrect or the 91 * requested slot index is invalid. 92 * PSA_ERROR_DOES_NOT_EXIST 93 * - The requested slot is empty, does not contain a measurement. 94 */ 95 psa_status_t rse_measured_boot_read_measurement(uint8_t index, 96 uint8_t *signer_id, 97 size_t signer_id_size, 98 size_t *signer_id_len, 99 uint8_t *version, 100 size_t version_size, 101 size_t *version_len, 102 uint32_t *measurement_algo, 103 uint8_t *sw_type, 104 size_t sw_type_size, 105 size_t *sw_type_len, 106 uint8_t *measurement_value, 107 size_t measurement_value_size, 108 size_t *measurement_value_len, 109 bool *is_locked); 110 111 #endif /* PSA_MEASURED_BOOT_H */ 112