blob: af624a6fc6133719c6162723306014b8b1923b6c [file] [log] [blame]
Tamas Banf5492752022-01-18 16:19:17 +01001/*
2 * Copyright (c) 2022, 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/* Minimum measurement value size that can be requested to store */
18#define MEASUREMENT_VALUE_MIN_SIZE 32U
19/* Maximum measurement value size that can be requested to store */
20#define MEASUREMENT_VALUE_MAX_SIZE 64U
21/* Minimum signer id size that can be requested to store */
22#define SIGNER_ID_MIN_SIZE MEASUREMENT_VALUE_MIN_SIZE
23/* Maximum signer id size that can be requested to store */
24#define SIGNER_ID_MAX_SIZE MEASUREMENT_VALUE_MAX_SIZE
25/* The theoretical maximum image version is: "255.255.65535\0" */
26#define VERSION_MAX_SIZE 14U
27/* Example sw_type: "BL_2, BL_33, etc." */
28#define SW_TYPE_MAX_SIZE 20U
29#define NUM_OF_MEASUREMENT_SLOTS 32U
30
31
32/**
33 * Extends and stores a measurement to the requested slot.
34 *
35 * index Slot number in which measurement is to be stored
36 * signer_id Pointer to signer_id buffer.
David Vincze28572702022-11-04 18:28:12 +010037 * signer_id_size Size of the signer_id in bytes.
Tamas Banf5492752022-01-18 16:19:17 +010038 * version Pointer to version buffer.
Jimmy Brisson0100a612023-03-20 09:00:30 -050039 * version_size Size of the version string in bytes.
Tamas Banf5492752022-01-18 16:19:17 +010040 * measurement_algo Algorithm identifier used for measurement.
41 * sw_type Pointer to sw_type buffer.
Jimmy Brisson0100a612023-03-20 09:00:30 -050042 * sw_type_size Size of the sw_type string in bytes.
Tamas Banf5492752022-01-18 16:19:17 +010043 * measurement_value Pointer to measurement_value buffer.
David Vincze28572702022-11-04 18:28:12 +010044 * measurement_value_size Size of the measurement_value in bytes.
Tamas Banf5492752022-01-18 16:19:17 +010045 * lock_measurement Boolean flag requesting whether the measurement
46 * is to be locked.
47 *
48 * PSA_SUCCESS:
49 * - Success.
50 * PSA_ERROR_INVALID_ARGUMENT:
51 * - The size of any argument is invalid OR
52 * - Input Measurement value is NULL OR
53 * - Input Signer ID is NULL OR
54 * - Requested slot index is invalid.
55 * PSA_ERROR_BAD_STATE:
56 * - Request to lock, when slot is already locked.
57 * PSA_ERROR_NOT_PERMITTED:
58 * - When the requested slot is not accessible to the caller.
59 */
60
61/* Not a standard PSA API, just an extension therefore use the 'rss_' prefix
62 * rather than the usual 'psa_'.
63 */
64psa_status_t
65rss_measured_boot_extend_measurement(uint8_t index,
66 const uint8_t *signer_id,
67 size_t signer_id_size,
68 const uint8_t *version,
69 size_t version_size,
70 uint32_t measurement_algo,
71 const uint8_t *sw_type,
72 size_t sw_type_size,
73 const uint8_t *measurement_value,
74 size_t measurement_value_size,
75 bool lock_measurement);
76
Mate Toth-Pal445ee112022-10-24 15:15:10 +020077/**
78 * Retrieves a measurement from the requested slot.
79 *
80 * index Slot number from which measurement is to be
81 * retrieved.
82 * signer_id Pointer to signer_id buffer.
83 * signer_id_size Size of the signer_id buffer in bytes.
84 * signer_id_len On success, number of bytes that make up
85 * signer_id.
86 * version Pointer to version buffer.
87 * version_size Size of the version buffer in bytes.
88 * version_len On success, number of bytes that makeup the
89 * version.
90 * measurement_algo Pointer to measurement_algo.
91 * sw_type Pointer to sw_type buffer.
92 * sw_type_size Size of the sw_type buffer in bytes.
93 * sw_type_len On success, number of bytes that makeup the
94 * sw_type.
95 * measurement_value Pointer to measurement_value buffer.
96 * measurement_value_size Size of the measurement_value buffer in bytes.
97 * measurement_value_len On success, number of bytes that make up the
98 * measurement_value.
99 * is_locked Pointer to lock status of requested measurement
100 * slot.
101 *
102 * PSA_SUCCESS
103 * - Success.
104 * PSA_ERROR_INVALID_ARGUMENT
105 * - The size of at least one of the output buffers is incorrect or the
106 * requested slot index is invalid.
107 * PSA_ERROR_DOES_NOT_EXIST
108 * - The requested slot is empty, does not contain a measurement.
109 */
110psa_status_t rss_measured_boot_read_measurement(uint8_t index,
111 uint8_t *signer_id,
112 size_t signer_id_size,
113 size_t *signer_id_len,
114 uint8_t *version,
115 size_t version_size,
116 size_t *version_len,
117 uint32_t *measurement_algo,
118 uint8_t *sw_type,
119 size_t sw_type_size,
120 size_t *sw_type_len,
121 uint8_t *measurement_value,
122 size_t measurement_value_size,
123 size_t *measurement_value_len,
124 bool *is_locked);
125
Tamas Banf5492752022-01-18 16:19:17 +0100126#endif /* PSA_MEASURED_BOOT_H */