32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include "hw_sce_private.h"
36 #include "hw_sce_aes_private.h"
45 #if (RA2_CRYPTO_CIPHER_SUPPORT == ENABLED && AES_SUPPORT == ENABLED)
61 if(context == NULL || key == NULL)
85 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
108 if(context->
nr == 10)
112 (
const uint32_t *) input, (uint32_t *) output);
114 else if(context->
nr == 14)
118 (
const uint32_t *) input, (uint32_t *) output);
123 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
127 if(status != FSP_SUCCESS)
152 if(context->
nr == 10)
156 (
const uint32_t *) input, (uint32_t *) output);
158 else if(context->
nr == 14)
162 (
const uint32_t *) input, (uint32_t *) output);
167 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
171 if(status != FSP_SUCCESS)
181 #if (ECB_SUPPORT == ENABLED)
194 const uint8_t *
p, uint8_t *
c,
size_t length)
199 status = FSP_SUCCESS;
220 if(aesContext->
nr == 10)
223 status = HW_SCE_AES_128EcbEncrypt(aesContext->
ek,
length / 4,
224 (
const uint32_t *)
p, (uint32_t *)
c);
226 else if(aesContext->
nr == 14)
229 status = HW_SCE_AES_256EcbEncrypt(aesContext->
ek,
length / 4,
230 (
const uint32_t *)
p, (uint32_t *)
c);
235 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
244 status = FSP_ERR_CRYPTO_INVALID_SIZE;
264 status = FSP_ERR_CRYPTO_INVALID_SIZE;
284 const uint8_t *
c, uint8_t *
p,
size_t length)
289 status = FSP_SUCCESS;
310 if(aesContext->
nr == 10)
313 status = HW_SCE_AES_128EcbDecrypt(aesContext->
ek,
length / 4,
314 (
const uint32_t *)
c, (uint32_t *)
p);
316 else if(aesContext->
nr == 14)
319 status = HW_SCE_AES_256EcbDecrypt(aesContext->
ek,
length / 4,
320 (
const uint32_t *)
c, (uint32_t *)
p);
325 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
334 status = FSP_ERR_CRYPTO_INVALID_SIZE;
354 status = FSP_ERR_CRYPTO_INVALID_SIZE;
363 #if (CBC_SUPPORT == ENABLED)
377 uint8_t *
iv,
const uint8_t *
p, uint8_t *
c,
size_t length)
382 status = FSP_SUCCESS;
403 if(aesContext->
nr == 10)
406 status = HW_SCE_AES_128CbcEncrypt(aesContext->
ek,
407 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
408 (uint32_t *)
c, (uint32_t *)
iv);
410 else if(aesContext->
nr == 14)
413 status = HW_SCE_AES_256CbcEncrypt(aesContext->
ek,
414 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
415 (uint32_t *)
c, (uint32_t *)
iv);
420 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
429 status = FSP_ERR_CRYPTO_INVALID_SIZE;
461 status = FSP_ERR_CRYPTO_INVALID_SIZE;
482 uint8_t *
iv,
const uint8_t *
c, uint8_t *
p,
size_t length)
487 status = FSP_SUCCESS;
508 if(aesContext->
nr == 10)
511 status = HW_SCE_AES_128CbcDecrypt(aesContext->
ek,
512 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
513 (uint32_t *)
p, (uint32_t *)
iv);
515 else if(aesContext->
nr == 14)
518 status = HW_SCE_AES_256CbcDecrypt(aesContext->
ek,
519 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
520 (uint32_t *)
p, (uint32_t *)
iv);
525 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
534 status = FSP_ERR_CRYPTO_INVALID_SIZE;
569 status = FSP_ERR_CRYPTO_INVALID_SIZE;
578 #if (CTR_SUPPORT == ENABLED)
593 uint8_t *
t,
const uint8_t *
p, uint8_t *
c,
size_t length)
598 status = FSP_SUCCESS;
622 if(aesContext->
nr == 10)
625 status = HW_SCE_AES_128CtrEncrypt(aesContext->
ek,
626 (
const uint32_t *)
t,
length / 4, (
const uint32_t *)
p,
627 (uint32_t *)
c, (uint32_t *)
t);
629 else if(aesContext->
nr == 14)
632 status = HW_SCE_AES_256CtrEncrypt(aesContext->
ek,
633 (
const uint32_t *)
t,
length / 4, (
const uint32_t *)
p,
634 (uint32_t *)
c, (uint32_t *)
t);
639 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
648 status = FSP_ERR_CRYPTO_INVALID_SIZE;
654 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
681 for(i = 0; i <
n; i++)
687 for(temp = 1, i = 1; i <=
m; i++)
704 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
Collection of AEAD algorithms.
Block cipher modes of operation.
General definitions for cryptographic algorithms.
@ ERROR_FAILURE
Generic error code.
@ ERROR_INVALID_PARAMETER
Invalid parameter.
#define osMemset(p, value, length)
#define osMemcpy(dest, src, length)
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
RA2 hardware cryptographic accelerator (SCE)
error_t aesInit(AesContext *context, const uint8_t *key, size_t keyLen)
Key expansion.
error_t ctrEncrypt(const CipherAlgo *cipher, void *context, uint_t m, uint8_t *t, const uint8_t *p, uint8_t *c, size_t length)
CTR encryption.
error_t cbcEncrypt(const CipherAlgo *cipher, void *context, uint8_t *iv, const uint8_t *p, uint8_t *c, size_t length)
CBC encryption.
error_t cbcDecrypt(const CipherAlgo *cipher, void *context, uint8_t *iv, const uint8_t *c, uint8_t *p, size_t length)
CBC decryption.
void aesDecryptBlock(AesContext *context, const uint8_t *input, uint8_t *output)
Decrypt a 16-byte block using AES algorithm.
void aesEncryptBlock(AesContext *context, const uint8_t *input, uint8_t *output)
Encrypt a 16-byte block using AES algorithm.
error_t ecbEncrypt(const CipherAlgo *cipher, void *context, const uint8_t *p, uint8_t *c, size_t length)
ECB encryption.
error_t ecbDecrypt(const CipherAlgo *cipher, void *context, const uint8_t *c, uint8_t *p, size_t length)
ECB decryption.
RA2 cipher hardware accelerator.
Common interface for encryption algorithms.
CipherAlgoEncryptBlock encryptBlock
CipherAlgoDecryptBlock decryptBlock