ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rsip_core.h
Go to the documentation of this file.
1
26
27#pragma once
28
29#include <stdint.h>
30
31#include "ra8_err.h"
32#include "ra8_rsip_regs.h"
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
51typedef struct {
52 bool run_bist;
54
64typedef void (*ra8_rsip_event_fn_t)(void* ctx, uint32_t isr);
65
66/* =============================================================================
67 * Lifecycle
68 * =============================================================================
69 */
70
118[[nodiscard]] ra8_err_t ra8_rsip_init(const ra8_rsip_config_t* cfg);
119
146[[nodiscard]] ra8_err_t ra8_rsip_deinit(void);
147
148/* =============================================================================
149 * Status / IRQ
150 * =============================================================================
151 */
152
175[[nodiscard]] ra8_err_t ra8_rsip_get_status(uint32_t* out);
176
204[[nodiscard]] ra8_err_t ra8_rsip_clear_status(uint32_t mask);
205
234[[nodiscard]] ra8_err_t ra8_rsip_attach_handler(ra8_rsip_event_fn_t fn, void* ctx);
235
260void ra8_rsip_dispatch(void);
261
262/* =============================================================================
263 * TRNG
264 * =============================================================================
265 */
266
309[[nodiscard]] ra8_err_t ra8_rsip_trng_read(uint8_t* buf, uint32_t len);
310
311/* =============================================================================
312 * SHA-256
313 * =============================================================================
314 */
315
350[[nodiscard]] ra8_err_t ra8_rsip_sha256(const uint8_t* msg, uint32_t msg_len, uint8_t* digest);
351
352/* =============================================================================
353 * SHA-256 incremental (init / update / final)
354 * =============================================================================
355 */
356
373
389
422
448[[nodiscard]] ra8_err_t
449ra8_rsip_sha256_update(ra8_rsip_sha256_ctx_t* ctx, const uint8_t* data, uint32_t len);
450
472[[nodiscard]] ra8_err_t ra8_rsip_sha256_final(ra8_rsip_sha256_ctx_t* ctx, uint8_t* digest_out);
473
474/* =============================================================================
475 * HMAC-SHA-256 incremental (init / update / final)
476 * =============================================================================
477 */
478
495
518[[nodiscard]] ra8_err_t
519ra8_rsip_hmac_sha256_init(ra8_rsip_hmac_sha256_ctx_t* ctx, const uint8_t* key, uint32_t key_len);
520
545[[nodiscard]] ra8_err_t
546ra8_rsip_hmac_sha256_update(ra8_rsip_hmac_sha256_ctx_t* ctx, const uint8_t* data, uint32_t len);
547
571 uint8_t* mac_out);
572
573/* =============================================================================
574 * Power transition
575 * =============================================================================
576 */
577
603[[nodiscard]] ra8_err_t ra8_rsip_enter_stop(void);
604
630[[nodiscard]] ra8_err_t ra8_rsip_exit_stop(void);
631
632#ifdef __cplusplus
633}
634#endif
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_err_t ra8_rsip_hmac_sha256_final(ra8_rsip_hmac_sha256_ctx_t *ctx, uint8_t *mac_out)
Emit the MAC of a streaming HMAC-SHA-256 context.
Definition ra8_rsip.c:927
ra8_err_t ra8_rsip_get_status(uint32_t *out)
Snapshot the STATUS mailbox word.
Definition ra8_rsip.c:284
ra8_err_t ra8_rsip_enter_stop(void)
Park the engine for software-standby entry.
Definition ra8_rsip.c:947
ra8_err_t ra8_rsip_sha256_final(ra8_rsip_sha256_ctx_t *ctx, uint8_t *digest_out)
Emit the digest of a streaming SHA-256 context.
Definition ra8_rsip.c:794
ra8_err_t ra8_rsip_deinit(void)
Power off the RSIP engine.
Definition ra8_rsip.c:267
ra8_err_t ra8_rsip_hmac_sha256_update(ra8_rsip_hmac_sha256_ctx_t *ctx, const uint8_t *data, uint32_t len)
Absorb additional bytes into a streaming HMAC-SHA-256 context.
Definition ra8_rsip.c:874
ra8_rsip_sha_buf_t
Fixed geometry for the incremental SHA / HMAC state.
@ k_ra8_rsip_sha256_state_words
SHA-256 chaining-state words.
@ k_ra8_rsip_sha256_block
SHA-256 message-block byte length.
@ k_ra8_rsip_hmac_inner_pad
RFC 2104 inner-pad fill byte.
@ k_ra8_rsip_hmac_outer_pad
RFC 2104 outer-pad fill byte.
ra8_err_t ra8_rsip_init(const ra8_rsip_config_t *cfg)
Power on the RSIP engine and (optionally) run BIST.
Definition ra8_rsip.c:234
ra8_err_t ra8_rsip_clear_status(uint32_t mask)
Acknowledge ISR bits via write-1-to-clear.
Definition ra8_rsip.c:293
ra8_err_t ra8_rsip_hmac_sha256_init(ra8_rsip_hmac_sha256_ctx_t *ctx, const uint8_t *key, uint32_t key_len)
Initialise a streaming HMAC-SHA-256 context.
Definition ra8_rsip.c:846
ra8_err_t ra8_rsip_sha256_update(ra8_rsip_sha256_ctx_t *ctx, const uint8_t *data, uint32_t len)
Absorb additional bytes into a streaming SHA-256 context.
Definition ra8_rsip.c:759
ra8_err_t ra8_rsip_exit_stop(void)
Re-enable the engine after software-standby exit.
Definition ra8_rsip.c:955
ra8_err_t ra8_rsip_trng_read(uint8_t *buf, uint32_t len)
Drain len bytes from the RSIP true RNG – fail-closed, no backend.
Definition ra8_rsip.c:338
void ra8_rsip_dispatch(void)
Run the attached callback with the current ISR snapshot.
Definition ra8_rsip.c:315
ra8_err_t ra8_rsip_sha256(const uint8_t *msg, uint32_t msg_len, uint8_t *digest)
Compute SHA-256 of an in-memory buffer.
Definition ra8_rsip.c:397
void(* ra8_rsip_event_fn_t)(void *ctx, uint32_t isr)
RSIP interrupt callback.
ra8_err_t ra8_rsip_sha256_init(ra8_rsip_sha256_ctx_t *ctx)
Initialise a streaming SHA-256 context.
Definition ra8_rsip.c:747
ra8_err_t ra8_rsip_attach_handler(ra8_rsip_event_fn_t fn, void *ctx)
Attach a single shared interrupt callback.
Definition ra8_rsip.c:307
Renesas Secure IP (RSIP-E50D) register layout for the RA8D2.
Initial configuration for ra8_rsip_init.
bool run_bist
true -> arm BIST after MSTP release.
Streaming state for incremental HMAC-SHA-256.
ra8_rsip_sha256_ctx_t inner
Running inner-hash state.
uint8_t key_block[k_ra8_rsip_sha256_block]
Prepared 64-byte key block.
uint8_t initialized
1 = ready, 0 = unset.
Streaming state for incremental SHA-256.
uint32_t state[k_ra8_rsip_sha256_state_words]
Chaining words H0..H7.
uint8_t block[k_ra8_rsip_sha256_block]
Partial message block.
uint32_t used
Bytes in block.
uint8_t initialized
1 = ready, 0 = unset.
uint64_t total_bytes
Bytes absorbed so far.