ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rot.h
Go to the documentation of this file.
1
78
79#pragma once
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85#include <stdint.h>
86
87#include "ra8_attributes.h"
88#include "ra8_err.h"
89
105
116typedef enum : uint32_t {
118 k_ra8_rot_version = 0x00000001U,
119 k_ra8_rot_body_max = 0x00100000U,
121
150typedef struct {
151 uint32_t magic;
152 uint32_t version;
153 uint32_t img_version;
154 uint32_t body_len;
155 uint32_t sig_len;
159
160/* Five 32-bit metadata words (magic, version, img_version, body_len, sig_len)
161 * precede the digest + signature byte blocks; the assert pins the no-padding
162 * layout. The trailing ``+ sizeof(uint32_t)`` accounts for img_version (4 is in
163 * the magic-number ignore set; 5 is not, so it is summed via sizeof). */
164static_assert(sizeof(ra8_rot_trailer_t) == (4U * sizeof(uint32_t)) + sizeof(uint32_t) +
165 (uint32_t)k_ra8_rot_digest_bytes +
166 (uint32_t)k_ra8_rot_sig_bytes,
167 "ra8_rot_trailer_t must have no implicit padding");
168
219[[nodiscard]] ra8_err_t
220ra8_rot_verify_image(const uint8_t* body, uint32_t body_len, const ra8_rot_trailer_t* trailer);
221
248const ra8_rot_trailer_t* ra8_rot_trailer_after(const void* image_base, uint32_t body_len);
249
275RA8_TEST_HELPER ra8_err_t ra8_rot_root_public_key(const uint8_t** out_key, uint32_t* out_len);
276
277#ifdef __cplusplus
278}
279#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_TEST_HELPER
Mark a symbol as externally-linked but only callable from tests.
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_rot_const_t
Trailer magic / version and the body-length sanity cap.
Definition ra8_rot.h:116
@ k_ra8_rot_trailer_magic
ASCII "ROT1" – signed-image marker.
Definition ra8_rot.h:117
@ k_ra8_rot_body_max
Max signable body length (1 MiB cap).
Definition ra8_rot.h:119
@ k_ra8_rot_version
Trailer format version.
Definition ra8_rot.h:118
ra8_rot_size_t
Fixed byte-lengths of the cryptographic fields in a signed image.
Definition ra8_rot.h:100
@ k_ra8_rot_pubkey_bytes
Uncompressed P-256 public key (0x04||X||Y).
Definition ra8_rot.h:103
@ k_ra8_rot_sig_bytes
ECDSA-P256 raw r||s signature length.
Definition ra8_rot.h:102
@ k_ra8_rot_digest_bytes
SHA-256 digest length (FIPS 180-4).
Definition ra8_rot.h:101
ra8_err_t ra8_rot_verify_image(const uint8_t *body, uint32_t body_len, const ra8_rot_trailer_t *trailer)
Authenticate a signed image: SHA-256 + ECDSA-P256, default-deny.
const ra8_rot_trailer_t * ra8_rot_trailer_after(const void *image_base, uint32_t body_len)
Locate the trailer that immediately follows a signed image body.
ra8_err_t ra8_rot_root_public_key(const uint8_t **out_key, uint32_t *out_len)
Expose the provisioned root public key (host / test only).
Authenticity trailer appended after a signed image body.
Definition ra8_rot.h:150
uint32_t sig_len
Active signature length, bytes.
Definition ra8_rot.h:155
uint32_t body_len
Body length the digest covers.
Definition ra8_rot.h:154
uint32_t img_version
Monotonic anti-rollback image ver.
Definition ra8_rot.h:153
uint8_t sig[k_ra8_rot_sig_bytes]
ECDSA-P256 raw r||s over the digest.
Definition ra8_rot.h:157
uint32_t version
k_ra8_rot_version (trailer format).
Definition ra8_rot.h:152
uint32_t magic
k_ra8_rot_trailer_magic.
Definition ra8_rot.h:151
uint8_t digest[k_ra8_rot_digest_bytes]
SHA-256 of the body (pre-check).
Definition ra8_rot.h:156