5 #include "sw/device/silicon_creator/lib/cert/cert.h"
9 #include "sw/device/silicon_creator/lib/error.h"
11 static_assert(kCertX509Asn1SerialNumberSizeInBytes <= kHmacDigestNumBytes,
12 "The ASN.1 encoded X.509 serial number field should be <= the "
13 "size of a SHA256 digest.");
15 uint32_t cert_x509_asn1_decode_size_header(
const uint8_t *header) {
16 if (header[0] != 0x30 || header[1] != 0x82) {
19 return (((uint32_t)header[2]) << 8) + header[3] + 4 ;
22 rom_error_t cert_x509_asn1_check_serial_number(
const uint8_t *cert,
size_t size,
23 cert_key_id_t *expected_sn_bytes,
26 if (size < kDiceX509MinSizeBytes) {
27 return kErrorCertInvalidSize;
34 char expected_serial[kDiceX509SerialSizeBytes];
35 expected_serial[0] = 0x02;
36 expected_serial[1] = 0x15;
37 expected_serial[2] = 0x00;
40 memcpy(&expected_serial[kDiceX509SerialHeaderSizeBytes], expected_sn_bytes,
41 kCertKeyIdSizeInBytes);
42 expected_serial[kDiceX509SerialHeaderSizeBytes] |= 0x80;
45 const uint8_t *serial = cert + kDiceX509SerialOffsetBytes;
46 if (
memcmp(serial, expected_serial,
sizeof(expected_serial)) == 0) {