Skip to content

Commit 825641d

Browse files
sandrine-bailleux-armTrustedFirmware Code Review
authored andcommitted
Merge changes Ida9abfd5,Iec447d97 into integration
* changes: build: enable adding MbedTLS files for platform feat(lib/psa): add read_measurement API
2 parents ca32548 + 3be9c27 commit 825641d

File tree

4 files changed

+141
-1
lines changed

4 files changed

+141
-1
lines changed

drivers/auth/mbedtls/mbedtls_common.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ $(eval $(call add_define,MBEDTLS_CONFIG_FILE))
2222
MBEDTLS_SOURCES += drivers/auth/mbedtls/mbedtls_common.c
2323

2424

25-
LIBMBEDTLS_SRCS := $(addprefix ${MBEDTLS_DIR}/library/, \
25+
LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \
2626
aes.c \
2727
asn1parse.c \
2828
asn1write.c \

include/lib/psa/measured_boot.h

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,53 @@ rss_measured_boot_extend_measurement(uint8_t index,
7474
size_t measurement_value_size,
7575
bool lock_measurement);
7676

77+
/**
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+
*/
110+
psa_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+
77126
#endif /* PSA_MEASURED_BOOT_H */

lib/psa/measured_boot.c

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,61 @@ rss_measured_boot_extend_measurement(uint8_t index,
111111
NULL, 0);
112112
}
113113

114+
psa_status_t rss_measured_boot_read_measurement(uint8_t index,
115+
uint8_t *signer_id,
116+
size_t signer_id_size,
117+
size_t *signer_id_len,
118+
uint8_t *version,
119+
size_t version_size,
120+
size_t *version_len,
121+
uint32_t *measurement_algo,
122+
uint8_t *sw_type,
123+
size_t sw_type_size,
124+
size_t *sw_type_len,
125+
uint8_t *measurement_value,
126+
size_t measurement_value_size,
127+
size_t *measurement_value_len,
128+
bool *is_locked)
129+
{
130+
psa_status_t status;
131+
struct measured_boot_read_iovec_in_t read_iov_in = {
132+
.index = index,
133+
.sw_type_size = sw_type_size,
134+
.version_size = version_size,
135+
};
136+
137+
struct measured_boot_read_iovec_out_t read_iov_out;
138+
139+
psa_invec in_vec[] = {
140+
{.base = &read_iov_in,
141+
.len = sizeof(struct measured_boot_read_iovec_in_t)},
142+
};
143+
144+
psa_outvec out_vec[] = {
145+
{.base = &read_iov_out,
146+
.len = sizeof(struct measured_boot_read_iovec_out_t)},
147+
{.base = signer_id, .len = signer_id_size},
148+
{.base = measurement_value, .len = measurement_value_size}
149+
};
150+
151+
status = psa_call(RSS_MEASURED_BOOT_HANDLE, RSS_MEASURED_BOOT_READ,
152+
in_vec, IOVEC_LEN(in_vec),
153+
out_vec, IOVEC_LEN(out_vec));
154+
155+
if (status == PSA_SUCCESS) {
156+
*is_locked = read_iov_out.is_locked;
157+
*measurement_algo = read_iov_out.measurement_algo;
158+
*sw_type_len = read_iov_out.sw_type_len;
159+
*version_len = read_iov_out.version_len;
160+
memcpy(sw_type, read_iov_out.sw_type, read_iov_out.sw_type_len);
161+
memcpy(version, read_iov_out.version, read_iov_out.version_len);
162+
*signer_id_len = out_vec[1].len;
163+
*measurement_value_len = out_vec[2].len;
164+
}
165+
166+
return status;
167+
}
168+
114169
#else /* !PLAT_RSS_NOT_SUPPORTED */
115170

116171
psa_status_t
@@ -133,4 +188,24 @@ rss_measured_boot_extend_measurement(uint8_t index,
133188

134189
return PSA_SUCCESS;
135190
}
191+
192+
psa_status_t rss_measured_boot_read_measurement(uint8_t index,
193+
uint8_t *signer_id,
194+
size_t signer_id_size,
195+
size_t *signer_id_len,
196+
uint8_t *version,
197+
size_t version_size,
198+
size_t *version_len,
199+
uint32_t *measurement_algo,
200+
uint8_t *sw_type,
201+
size_t sw_type_size,
202+
size_t *sw_type_len,
203+
uint8_t *measurement_value,
204+
size_t measurement_value_size,
205+
size_t *measurement_value_len,
206+
bool *is_locked)
207+
{
208+
return PSA_SUCCESS;
209+
}
210+
136211
#endif /* !PLAT_RSS_NOT_SUPPORTED */

lib/psa/measured_boot_private.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,24 @@
1111
#include <stdint.h>
1212

1313
/* Measured boot message types that distinguish its services */
14+
#define RSS_MEASURED_BOOT_READ 1001U
1415
#define RSS_MEASURED_BOOT_EXTEND 1002U
1516

17+
struct measured_boot_read_iovec_in_t {
18+
uint8_t index;
19+
uint8_t sw_type_size;
20+
uint8_t version_size;
21+
};
22+
23+
struct measured_boot_read_iovec_out_t {
24+
uint8_t is_locked;
25+
uint32_t measurement_algo;
26+
uint8_t sw_type[SW_TYPE_MAX_SIZE];
27+
uint8_t sw_type_len;
28+
uint8_t version[VERSION_MAX_SIZE];
29+
uint8_t version_len;
30+
};
31+
1632
struct measured_boot_extend_iovec_t {
1733
uint8_t index;
1834
uint8_t lock_measurement;

0 commit comments

Comments
 (0)