25#ifndef HAL_CRYPTO_LLD_H
26#define HAL_CRYPTO_LLD_H
28#if (HAL_USE_CRY == TRUE) || defined(__DOXYGEN__)
38#define CRY_LLD_SUPPORTS_AES TRUE
39#define CRY_LLD_SUPPORTS_AES_ECB TRUE
40#define CRY_LLD_SUPPORTS_AES_CBC TRUE
41#define CRY_LLD_SUPPORTS_AES_CFB TRUE
42#define CRY_LLD_SUPPORTS_AES_CTR TRUE
43#define CRY_LLD_SUPPORTS_AES_GCM TRUE
44#define CRY_LLD_SUPPORTS_DES TRUE
45#define CRY_LLD_SUPPORTS_DES_ECB TRUE
46#define CRY_LLD_SUPPORTS_DES_CBC TRUE
47#define CRY_LLD_SUPPORTS_SHA1 TRUE
48#define CRY_LLD_SUPPORTS_SHA256 TRUE
49#define CRY_LLD_SUPPORTS_SHA512 TRUE
50#define CRY_LLD_SUPPORTS_HMAC_SHA256 TRUE
51#define CRY_LLD_SUPPORTS_HMAC_SHA512 TRUE
67#if !defined(PLATFORM_CRY_USE_CRY1) || defined(__DOXYGEN__)
68#define PLATFORM_CRY_USE_CRY1 FALSE
110#if defined(CRY_DRIVER_EXT_FIELDS)
111 CRY_DRIVER_EXT_FIELDS
116#if (CRY_LLD_SUPPORTS_SHA1 == TRUE) || defined(__DOXYGEN__)
125#if (CRY_LLD_SUPPORTS_SHA256 == TRUE) || defined(__DOXYGEN__)
134#if (CRY_LLD_SUPPORTS_SHA512 == TRUE) || defined(__DOXYGEN__)
143#if (CRY_LLD_SUPPORTS_HMAC_SHA256 == TRUE) || defined(__DOXYGEN__)
152#if (CRY_LLD_SUPPORTS_HMAC_SHA512 == TRUE) || defined(__DOXYGEN__)
169#if (PLATFORM_CRY_USE_CRY1 == TRUE) && !defined(__DOXYGEN__)
179#if (CRY_LLD_SUPPORTS_AES == TRUE) || \
180 (CRY_LLD_SUPPORTS_AES_ECB == TRUE) || \
181 (CRY_LLD_SUPPORTS_AES_CBC == TRUE) || \
182 (CRY_LLD_SUPPORTS_AES_CFB == TRUE) || \
183 (CRY_LLD_SUPPORTS_AES_CTR == TRUE) || \
184 (CRY_LLD_SUPPORTS_AES_GCM == TRUE) || \
188 const uint8_t *keyp);
190#if (CRY_LLD_SUPPORTS_AES == TRUE) || defined(__DOXYGEN__)
200#if (CRY_LLD_SUPPORTS_AES_ECB == TRUE) || defined(__DOXYGEN__)
212#if (CRY_LLD_SUPPORTS_AES_CBC == TRUE) || defined(__DOXYGEN__)
226#if (CRY_LLD_SUPPORTS_AES_CFB == TRUE) || defined(__DOXYGEN__)
240#if (CRY_LLD_SUPPORTS_AES_CTR == TRUE) || defined(__DOXYGEN__)
254#if (CRY_LLD_SUPPORTS_AES_GCM == TRUE) || defined(__DOXYGEN__)
258 const uint8_t *auth_in,
260 const uint8_t *text_in,
268 const uint8_t *auth_in,
270 const uint8_t *text_in,
274 const uint8_t *tag_in);
276#if (CRY_LLD_SUPPORTS_DES == TRUE) || \
277 (CRY_LLD_SUPPORTS_DES_ECB == TRUE) || \
278 (CRY_LLD_SUPPORTS_DES_CBC == TRUE) || \
282 const uint8_t *keyp);
284#if (CRY_LLD_SUPPORTS_DES == TRUE) || defined(__DOXYGEN__)
294#if (CRY_LLD_SUPPORTS_DES_ECB == TRUE) || defined(__DOXYGEN__)
306#if (CRY_LLD_SUPPORTS_DES_CBC == TRUE) || defined(__DOXYGEN__)
320#if (CRY_LLD_SUPPORTS_SHA1 == TRUE) || defined(__DOXYGEN__)
323 size_t size,
const uint8_t *
in);
327#if (CRY_LLD_SUPPORTS_SHA256 == TRUE) || defined(__DOXYGEN__)
330 size_t size,
const uint8_t *
in);
334#if (CRY_LLD_SUPPORTS_SHA512 == TRUE) || defined(__DOXYGEN__)
337 size_t size,
const uint8_t *
in);
341#if (CRY_LLD_SUPPORTS_HMAC_SHA256 == TRUE) || \
342 (CRY_LLD_SUPPORTS_HMAC_SHA512 == TRUE) || \
346 const uint8_t *keyp);
348#if (CRY_LLD_SUPPORTS_HMAC_SHA256 == TRUE) || defined(__DOXYGEN__)
353 size_t size,
const uint8_t *
in);
358#if (CRY_LLD_SUPPORTS_HMAC_SHA512 == TRUE) || defined(__DOXYGEN__)
363 size_t size,
const uint8_t *
in);
cryerror_t cry_lld_decrypt_AES_ECB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out)
Decryption operation using AES-ECB.
cryerror_t cry_lld_encrypt_AES_ECB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out)
Encryption operation using AES-ECB.
cryerror_t cry_lld_HMACSHA256_init(CRYDriver *cryp, HMACSHA256Context *hmacsha256ctxp)
Hash initialization using HMAC_SHA256.
cryerror_t cry_lld_decrypt_AES_CTR(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Decryption operation using AES-CTR.
cryerror_t cry_lld_HMACSHA512_final(CRYDriver *cryp, HMACSHA512Context *hmacsha512ctxp, uint8_t *out)
Hash finalization using HMAC.
void cry_lld_start(CRYDriver *cryp)
Configures and activates the crypto peripheral.
cryerror_t cry_lld_encrypt_DES_CBC(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Encryption operation using (T)DES-CBC.
cryerror_t cry_lld_encrypt_AES_CBC(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Encryption operation using AES-CBC.
cryerror_t cry_lld_SHA1_update(CRYDriver *cryp, SHA1Context *sha1ctxp, size_t size, const uint8_t *in)
Hash update using SHA1.
cryerror_t cry_lld_decrypt_DES(CRYDriver *cryp, crykey_t key_id, const uint8_t *in, uint8_t *out)
Decryption of a single block using (T)DES.
CRYDriver CRYD1
CRY1 driver identifier.
cryerror_t cry_lld_decrypt_AES(CRYDriver *cryp, crykey_t key_id, const uint8_t *in, uint8_t *out)
Decryption of a single block using AES.
cryerror_t cry_lld_encrypt_AES_GCM(CRYDriver *cryp, crykey_t key_id, size_t auth_size, const uint8_t *auth_in, size_t text_size, const uint8_t *text_in, uint8_t *text_out, const uint8_t *iv, size_t tag_size, uint8_t *tag_out)
Encryption operation using AES-GCM.
cryerror_t cry_lld_SHA512_init(CRYDriver *cryp, SHA512Context *sha512ctxp)
Hash initialization using SHA512.
cryerror_t cry_lld_SHA256_update(CRYDriver *cryp, SHA256Context *sha256ctxp, size_t size, const uint8_t *in)
Hash update using SHA256.
cryerror_t cry_lld_decrypt_AES_CBC(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Decryption operation using AES-CBC.
void cry_lld_init(void)
Low level crypto driver initialization.
cryerror_t cry_lld_aes_loadkey(CRYDriver *cryp, size_t size, const uint8_t *keyp)
Initializes the AES transient key.
cryerror_t cry_lld_des_loadkey(CRYDriver *cryp, size_t size, const uint8_t *keyp)
Initializes the DES transient key.
uint32_t crykey_t
CRY key identifier type.
cryerror_t cry_lld_HMACSHA256_final(CRYDriver *cryp, HMACSHA256Context *hmacsha256ctxp, uint8_t *out)
Hash finalization using HMAC.
cryerror_t cry_lld_encrypt_AES_CFB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Encryption operation using AES-CFB.
cryerror_t cry_lld_HMACSHA256_update(CRYDriver *cryp, HMACSHA256Context *hmacsha256ctxp, size_t size, const uint8_t *in)
Hash update using HMAC.
cryerror_t cry_lld_encrypt_DES(CRYDriver *cryp, crykey_t key_id, const uint8_t *in, uint8_t *out)
Encryption of a single block using (T)DES.
cryerror_t cry_lld_HMACSHA512_update(CRYDriver *cryp, HMACSHA512Context *hmacsha512ctxp, size_t size, const uint8_t *in)
Hash update using HMAC.
cryerror_t cry_lld_decrypt_AES_CFB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Decryption operation using AES-CFB.
cryerror_t cry_lld_decrypt_DES_ECB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out)
Decryption operation using (T)DES-ECB.
cryerror_t cry_lld_encrypt_AES(CRYDriver *cryp, crykey_t key_id, const uint8_t *in, uint8_t *out)
Encryption of a single block using AES.
cryerror_t cry_lld_hmac_loadkey(CRYDriver *cryp, size_t size, const uint8_t *keyp)
Initializes the HMAC transient key.
crystate_t
Driver state machine possible states.
cryerror_t cry_lld_encrypt_AES_CTR(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Encryption operation using AES-CTR.
cryerror_t cry_lld_SHA256_init(CRYDriver *cryp, SHA256Context *sha256ctxp)
Hash initialization using SHA256.
cryerror_t cry_lld_encrypt_DES_ECB(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out)
Encryption operation using (T)DES-ECB.
cryerror_t cry_lld_SHA512_update(CRYDriver *cryp, SHA512Context *sha512ctxp, size_t size, const uint8_t *in)
Hash update using SHA512.
cryerror_t cry_lld_decrypt_DES_CBC(CRYDriver *cryp, crykey_t key_id, size_t size, const uint8_t *in, uint8_t *out, const uint8_t *iv)
Decryption operation using (T)DES-CBC.
cryerror_t cry_lld_SHA1_final(CRYDriver *cryp, SHA1Context *sha1ctxp, uint8_t *out)
Hash finalization using SHA1.
cryerror_t cry_lld_SHA512_final(CRYDriver *cryp, SHA512Context *sha512ctxp, uint8_t *out)
Hash finalization using SHA512.
void cry_lld_stop(CRYDriver *cryp)
Deactivates the crypto peripheral.
cryerror_t
Driver error codes.
cryerror_t cry_lld_decrypt_AES_GCM(CRYDriver *cryp, crykey_t key_id, size_t auth_size, const uint8_t *auth_in, size_t text_size, const uint8_t *text_in, uint8_t *text_out, const uint8_t *iv, size_t tag_size, const uint8_t *tag_in)
Decryption operation using AES-GCM.
cryerror_t cry_lld_SHA256_final(CRYDriver *cryp, SHA256Context *sha256ctxp, uint8_t *out)
Hash finalization using SHA256.
cryerror_t cry_lld_HMACSHA512_init(CRYDriver *cryp, HMACSHA512Context *hmacsha512ctxp)
Hash initialization using HMAC_SHA512.
cryerror_t cry_lld_SHA1_init(CRYDriver *cryp, SHA1Context *sha1ctxp)
Hash initialization using SHA1.
USBOutEndpointState out
OUT EP0 state.
USBInEndpointState in
IN EP0 state.
Driver configuration structure.
Structure representing an CRY driver.
const CRYConfig * config
Current configuration data.
crystate_t state
Driver state.
Type of a HMAC_SHA256 context.
Type of a HMAC_SHA512 context.
Type of a SHA256 context.
Type of a SHA512 context.