60static const char*
s_tag =
"RSIP";
77#if defined(RA8_INSECURE_STUB_CRYPTO) || defined(RA8_OFF_TARGET)
83typedef enum : uint32_t {
84 k_ra8_rsip_curve_bytes_192 = 24U,
85 k_ra8_rsip_curve_bytes_224 = 28U,
86 k_ra8_rsip_curve_bytes_256 = 32U,
87 k_ra8_rsip_curve_bytes_384 = 48U,
88 k_ra8_rsip_curve_bytes_512 = 64U,
89 k_ra8_rsip_curve_bytes_521 = 66U,
90} ra8_rsip_curve_bytes_t;
120 return k_ra8_rsip_curve_bytes_192;
122 return k_ra8_rsip_curve_bytes_224;
127 return k_ra8_rsip_curve_bytes_256;
130 return k_ra8_rsip_curve_bytes_384;
132 return k_ra8_rsip_curve_bytes_512;
134 return k_ra8_rsip_curve_bytes_521;
142 const uint8_t* digest,
155 const uint32_t curve_bytes = internal_curve_bytes(curve);
156 if (curve_bytes == 0U) {
176 const uint8_t* digest,
178 const uint8_t* signature)
188 const uint32_t curve_bytes = internal_curve_bytes(curve);
189 if (curve_bytes == 0U) {
206typedef enum : uint32_t {
207 k_ra8_rsip_ed25519_comp_bytes = 32U,
208 k_ra8_rsip_ed25519_sig_bytes = 64U,
209} ra8_rsip_ed25519_size_t;
218 if ((msg ==
nullptr) && (msg_len != 0U)) {
240 (uint32_t)k_ra8_rsip_ed25519_sig_bytes);
247 const uint8_t* signature)
251 if ((msg ==
nullptr) && (msg_len != 0U)) {
295 for (uint32_t w = 0U; w < out->
body_words; ++w) {
303 const uint8_t* peer_x,
304 const uint8_t* peer_y,
311 const uint32_t curve_bytes = internal_curve_bytes(curve);
312 if (curve_bytes == 0U) {
326 internal_ecdh_pull_shared(out);
342 const uint8_t* digest,
356 const uint8_t* digest,
358 const uint8_t* signature)
383 const uint8_t* signature)
394 const uint8_t* peer_x,
395 const uint8_t* peer_y,
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Lightweight Logging Interface for ra8-firmware.
Renesas Secure IP (RSIP-E50D) HAL driver – public API.
Cross-TU surface shared by the RSIP asymmetric + RSA split.
void internal_zero_handle_tail(ra8_rsip_key_handle_t *handle, uint32_t words)
Zero-fill the unused tail of a key-handle body buffer.
void internal_asym_push(ra8_rsip_off_t off, const uint8_t *buf, uint32_t len)
Stream a byte buffer into an asymmetric input lane.
void internal_asym_pull(ra8_rsip_off_t off, uint8_t *buf, uint32_t len)
Pull a byte buffer back through an asymmetric output lane.
void priv_load_handle(const ra8_rsip_key_handle_t *handle)
Stream a wrapped-key body into the engine input FIFO.
ra8_err_t priv_complete(uint32_t done_mask)
Drive a single mailbox completion (DONE poll + ack).
ra8_err_t ra8_rsip_ecdsa_verify(const ra8_rsip_key_handle_t *key, ra8_rsip_curve_t curve, const uint8_t *digest, uint32_t digest_len, const uint8_t *signature)
ECDSA verify a signature with a peer public key.
ra8_err_t ra8_rsip_eddsa_sign(const ra8_rsip_key_handle_t *key, const uint8_t *msg, uint32_t msg_len, uint8_t *signature)
Ed25519 PureEdDSA sign a message (RFC 8032).
ra8_err_t ra8_rsip_ecdh_compute(const ra8_rsip_key_handle_t *key, ra8_rsip_curve_t curve, const uint8_t *peer_x, const uint8_t *peer_y, ra8_rsip_key_handle_t *out)
ECDH shared-secret derivation.
ra8_err_t ra8_rsip_ecdsa_sign(const ra8_rsip_key_handle_t *key, ra8_rsip_curve_t curve, const uint8_t *digest, uint32_t digest_len, uint8_t *signature)
ECDSA sign a digest with a wrapped private key.
ra8_err_t ra8_rsip_eddsa_verify(const ra8_rsip_key_handle_t *key, const uint8_t *msg, uint32_t msg_len, const uint8_t *signature)
Ed25519 PureEdDSA verify a signature (RFC 8032).
Cross-TU surface for the ra8_rsip driver split.
Renesas Secure IP (RSIP-E50D) register layout for the RA8D2.
@ k_ra8_rsip_handle_words_hmac_sha256
HMAC-SHA-256 wrapped key.
ra8_rsip_curve_t
ECC curve selector (HUM Ch 52.1 Table 52.1 "ECC" p 3302).
@ k_ra8_rsip_curve_secp384r1
NIST P-384.
@ k_ra8_rsip_curve_brain384r1
Brainpool P-384r1.
@ k_ra8_rsip_curve_secp521r1
NIST P-521.
@ k_ra8_rsip_curve_brain512r1
Brainpool P-512r1.
@ k_ra8_rsip_curve_brain256r1
Brainpool P-256r1.
@ k_ra8_rsip_curve_ed25519
Ed25519.
@ k_ra8_rsip_curve_secp256r1
NIST P-256.
@ k_ra8_rsip_curve_secp192r1
NIST P-192.
@ k_ra8_rsip_curve_secp256k1
secp256k1.
@ k_ra8_rsip_curve_secp224r1
NIST P-224.
@ k_ra8_rsip_oem_cmd_hmac_sha256
HMAC-SHA-256.
@ k_ra8_rsip_oem_cmd_ecc_ed25519_priv
Ed25519 private.
@ k_ra8_rsip_asym_op_ecdh_compute
ECDH shared secret.
@ k_ra8_rsip_asym_op_eddsa_verify
Ed25519 PureEdDSA verify.
@ k_ra8_rsip_asym_op_eddsa_sign
Ed25519 PureEdDSA sign.
@ k_ra8_rsip_asym_op_ecdsa_sign
ECDSA signature gen.
@ k_ra8_rsip_asym_op_ecdsa_verify
ECDSA signature ver.
static volatile uint32_t * ra8_rsip_reg32(ra8_rsip_off_t offset)
Volatile pointer to a 32-bit RSIP register at offset.
@ k_ra8_rsip_mask_isr_asym_done
ISR.ASYM_DONE bit.
@ k_ra8_rsip_off_asym_sig_out
Signature output lane.
@ k_ra8_rsip_off_asym_msg_in
Message / digest input port.
@ k_ra8_rsip_off_asym_curve
ECC curve selector.
@ k_ra8_rsip_off_asym_shared
ECDH shared-secret handle.
@ k_ra8_rsip_off_asym_pub_x
ECC peer X / RSA pubkey lane.
@ k_ra8_rsip_off_mbox_op
Opcode written by host.
@ k_ra8_rsip_off_asym_ctrl
Asymmetric command word.
@ k_ra8_rsip_off_asym_sig_in
Signature input lane.
@ k_ra8_rsip_off_asym_pub_y
ECC peer Y lane.
Opaque wrapped-key handle.
uint32_t body_words
Number of body words (1..261).
uint32_t body[k_ra8_rsip_handle_words_rsa4096_priv]
Wrapped body.
uint32_t alg
OEM-cmd algorithm selector.