ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rsip_keys.h
Go to the documentation of this file.
1
27
28#pragma once
29
30#include <stdint.h>
31
32#include "ra8_err.h"
33#include "ra8_rsip_regs.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* =============================================================================
40 * Wrapped-key handle type (opaque to callers)
41 * =============================================================================
42 */
43
66typedef struct {
67 uint32_t alg;
68 uint32_t body_words;
71
72/* =============================================================================
73 * Key install -- plaintext (development) flow
74 * =============================================================================
75 */
76
106[[nodiscard]] ra8_err_t ra8_rsip_aes128_install_plain(const uint8_t* key,
108
130[[nodiscard]] ra8_err_t ra8_rsip_aes192_install_plain(const uint8_t* key,
132
154[[nodiscard]] ra8_err_t ra8_rsip_aes256_install_plain(const uint8_t* key,
156
178[[nodiscard]] ra8_err_t ra8_rsip_chacha20_install_plain(const uint8_t* key,
180
212 const uint8_t* key,
213 uint32_t key_len,
215
216/* =============================================================================
217 * Key install -- OEM (provisioning) flow
218 * =============================================================================
219 */
220
255 const uint8_t* iv,
256 const uint8_t* oem_blob,
257 uint32_t blob_len,
259
260/* =============================================================================
261 * AES symmetric cipher -- ECB / CBC / CTR / XTS / CMAC / GMAC
262 * =============================================================================
263 */
264
305 const uint8_t* iv,
306 const uint8_t* in,
307 uint8_t* out,
308 uint32_t len);
309
310/* =============================================================================
311 * AES authenticated modes -- GCM / CCM
312 * =============================================================================
313 */
314
352[[nodiscard]] ra8_err_t ra8_rsip_aes_gcm(const ra8_rsip_key_handle_t* key,
354 const uint8_t* iv,
355 const uint8_t* aad,
356 uint32_t aad_len,
357 const uint8_t* in,
358 uint8_t* out,
359 uint32_t in_len,
360 uint8_t* tag);
361
392[[nodiscard]] ra8_err_t ra8_rsip_aes_ccm(const ra8_rsip_key_handle_t* key,
394 const uint8_t* iv,
395 const uint8_t* aad,
396 uint32_t aad_len,
397 const uint8_t* in,
398 uint8_t* out,
399 uint32_t in_len,
400 uint8_t* tag);
401
402/* =============================================================================
403 * ChaCha20 + Poly1305
404 * =============================================================================
405 */
406
432[[nodiscard]] ra8_err_t ra8_rsip_chacha20(const ra8_rsip_key_handle_t* key,
434 const uint8_t* nonce,
435 uint32_t counter,
436 const uint8_t* in,
437 uint8_t* out,
438 uint32_t len);
439
471 const uint8_t* nonce,
472 const uint8_t* aad,
473 uint32_t aad_len,
474 const uint8_t* in,
475 uint8_t* out,
476 uint32_t in_len,
477 uint8_t* tag);
478
501[[nodiscard]] ra8_err_t
502ra8_rsip_poly1305(const uint8_t* one_time_key, const uint8_t* msg, uint32_t msg_len, uint8_t* tag);
503
504/* =============================================================================
505 * Hash family -- generic SHA-2 / SHA-3 / SHAKE
506 * =============================================================================
507 */
508
544 const uint8_t* msg,
545 uint32_t msg_len,
546 uint8_t* digest,
547 uint32_t digest_len);
548
572[[nodiscard]] ra8_err_t ra8_rsip_hmac(const ra8_rsip_key_handle_t* key,
573 const uint8_t* msg,
574 uint32_t msg_len,
575 uint8_t* mac,
576 uint32_t mac_len);
577
578/* =============================================================================
579 * Asymmetric crypto -- RSA + ECDSA + ECDH
580 * =============================================================================
581 */
582
607[[nodiscard]] ra8_err_t ra8_rsip_rsa_sign(const ra8_rsip_key_handle_t* key,
609 const uint8_t* digest,
610 uint32_t digest_len,
611 uint8_t* signature);
612
640 const uint8_t* digest,
641 uint32_t digest_len,
642 const uint8_t* signature);
643
684 const uint8_t* plaintext,
685 uint32_t plaintext_len,
686 uint8_t* ciphertext);
687
729 const uint8_t* ciphertext,
730 uint8_t* plaintext,
731 uint32_t plaintext_cap,
732 uint32_t* recovered_len);
733
765 ra8_rsip_curve_t curve,
766 const uint8_t* digest,
767 uint32_t digest_len,
768 uint8_t* signature);
769
802 ra8_rsip_curve_t curve,
803 const uint8_t* digest,
804 uint32_t digest_len,
805 const uint8_t* signature);
806
851 const uint8_t* msg,
852 uint32_t msg_len,
853 uint8_t* signature);
854
896 const uint8_t* msg,
897 uint32_t msg_len,
898 const uint8_t* signature);
899
931 ra8_rsip_curve_t curve,
932 const uint8_t* peer_x,
933 const uint8_t* peer_y,
935
936#ifdef __cplusplus
937}
938#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_oem_install(ra8_rsip_oem_cmd_t cmd, const uint8_t *iv, const uint8_t *oem_blob, uint32_t blob_len, ra8_rsip_key_handle_t *out)
Install an OEM-encrypted key blob into the wrapped vault.
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_chacha20_poly1305(const ra8_rsip_key_handle_t *key, ra8_rsip_aes_dir_t dir, const uint8_t *nonce, const uint8_t *aad, uint32_t aad_len, const uint8_t *in, uint8_t *out, uint32_t in_len, uint8_t *tag)
ChaCha20-Poly1305 AEAD encrypt or decrypt (RFC 7539).
ra8_err_t ra8_rsip_aes256_install_plain(const uint8_t *key, ra8_rsip_key_handle_t *out)
Wrap a 32-byte AES-256 key (see ra8_rsip_aes128_install_plain).
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_aes_cipher(const ra8_rsip_key_handle_t *key, ra8_rsip_aes_mode_t mode, ra8_rsip_aes_dir_t dir, const uint8_t *iv, const uint8_t *in, uint8_t *out, uint32_t len)
Encrypt or decrypt a buffer with AES in a non-AEAD mode.
ra8_err_t ra8_rsip_rsa_decrypt(const ra8_rsip_key_handle_t *key, ra8_rsip_rsa_size_t size, ra8_rsip_rsa_pad_t pad, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t plaintext_cap, uint32_t *recovered_len)
RSA private-key decrypt a ciphertext (RSAES-OAEP / PKCS1).
ra8_err_t ra8_rsip_hmac(const ra8_rsip_key_handle_t *key, const uint8_t *msg, uint32_t msg_len, uint8_t *mac, uint32_t mac_len)
HMAC-SHA-2 / HMAC-SHA-3 over a buffer using a wrapped key.
ra8_err_t ra8_rsip_hash(ra8_rsip_hash_alg_t alg, const uint8_t *msg, uint32_t msg_len, uint8_t *digest, uint32_t digest_len)
Compute a hash of an in-memory buffer using the selected algorithm.
ra8_err_t ra8_rsip_rsa_verify(const ra8_rsip_key_handle_t *key, ra8_rsip_rsa_size_t size, const uint8_t *digest, uint32_t digest_len, const uint8_t *signature)
RSA verify a signature against a digest using a wrapped pubkey.
ra8_err_t ra8_rsip_poly1305(const uint8_t *one_time_key, const uint8_t *msg, uint32_t msg_len, uint8_t *tag)
Poly1305 MAC over a buffer using a 32-byte one-time key.
ra8_err_t ra8_rsip_hmac_install_plain(ra8_rsip_oem_cmd_t alg, const uint8_t *key, uint32_t key_len, ra8_rsip_key_handle_t *out)
Wrap an HMAC key for use by the HMAC engine.
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_chacha20(const ra8_rsip_key_handle_t *key, ra8_rsip_aes_dir_t dir, const uint8_t *nonce, uint32_t counter, const uint8_t *in, uint8_t *out, uint32_t len)
ChaCha20 stream encrypt or decrypt (RFC 7539, no AEAD).
ra8_err_t ra8_rsip_aes128_install_plain(const uint8_t *key, ra8_rsip_key_handle_t *out)
Wrap a 16-byte AES-128 key for use by the engine.
ra8_err_t ra8_rsip_chacha20_install_plain(const uint8_t *key, ra8_rsip_key_handle_t *out)
Wrap a 32-byte ChaCha20 key.
ra8_err_t ra8_rsip_aes_gcm(const ra8_rsip_key_handle_t *key, ra8_rsip_aes_dir_t dir, const uint8_t *iv, const uint8_t *aad, uint32_t aad_len, const uint8_t *in, uint8_t *out, uint32_t in_len, uint8_t *tag)
AES-GCM encrypt or decrypt with associated data.
ra8_err_t ra8_rsip_aes192_install_plain(const uint8_t *key, ra8_rsip_key_handle_t *out)
Wrap a 24-byte AES-192 key (see ra8_rsip_aes128_install_plain).
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_rsa_sign(const ra8_rsip_key_handle_t *key, ra8_rsip_rsa_size_t size, const uint8_t *digest, uint32_t digest_len, uint8_t *signature)
RSA sign a digest with a wrapped private key.
ra8_err_t ra8_rsip_aes_ccm(const ra8_rsip_key_handle_t *key, ra8_rsip_aes_dir_t dir, const uint8_t *iv, const uint8_t *aad, uint32_t aad_len, const uint8_t *in, uint8_t *out, uint32_t in_len, uint8_t *tag)
AES-CCM encrypt or decrypt with associated data.
ra8_err_t ra8_rsip_rsa_encrypt(const ra8_rsip_key_handle_t *key, ra8_rsip_rsa_size_t size, ra8_rsip_rsa_pad_t pad, const uint8_t *plaintext, uint32_t plaintext_len, uint8_t *ciphertext)
RSA public-key encrypt a short message (RSAES-OAEP / PKCS1).
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).
Renesas Secure IP (RSIP-E50D) register layout for the RA8D2.
@ k_ra8_rsip_handle_words_rsa4096_priv
RSA-4096 wrapped private.
ra8_rsip_aes_dir_t
Direction selector for symmetric ciphers.
ra8_rsip_curve_t
ECC curve selector (HUM Ch 52.1 Table 52.1 "ECC" p 3302).
ra8_rsip_hash_alg_t
Algorithm selector value written to the HASH CTRL word.
ra8_rsip_oem_cmd_t
OEM-key install opcode written to OEM_CTRL.
ra8_rsip_rsa_size_t
RSA key-size selector (HUM Ch 52.1 Table 52.1 "RSA" p 3302).
ra8_rsip_rsa_pad_t
RSA encryption padding-scheme selector written to ASYM_ARG.
ra8_rsip_aes_mode_t
Block-cipher mode selector for the AES engine.
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.