Merge pull request #1006 from cconlon/mqx
Update MQX Classic, mmCAU Ports
This commit is contained in:
commit
e767d40656
@ -32,7 +32,8 @@
|
||||
/* Macro to disable benchmark */
|
||||
#ifndef NO_CRYPT_BENCHMARK
|
||||
|
||||
#ifdef XMALLOC_USER
|
||||
#if defined(XMALLOC_USER) || defined(FREESCALE_MQX)
|
||||
/* MQX classic needs for EXIT_FAILURE */
|
||||
#include <stdlib.h> /* we're using malloc / free direct here */
|
||||
#endif
|
||||
|
||||
|
@ -470,13 +470,32 @@
|
||||
* through the CAU/mmCAU library. Documentation located in
|
||||
* ColdFire/ColdFire+ CAU and Kinetis mmCAU Software Library User
|
||||
* Guide (See note in README). */
|
||||
#include "fsl_mmcau.h"
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
/* MMCAU 1.4 library used with non-KSDK / classic MQX builds */
|
||||
#include "cau_api.h"
|
||||
#else
|
||||
#include "fsl_mmcau.h"
|
||||
#endif
|
||||
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
int ret;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_encrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
MMCAU_AES_EncryptEcb(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_aes_encrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#else
|
||||
MMCAU_AES_EncryptEcb(inBlock, (byte*)aes->key, aes->rounds,
|
||||
outBlock);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
@ -484,9 +503,23 @@
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
static int wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
int ret;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_decrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
MMCAU_AES_DecryptEcb(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_aes_decrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#else
|
||||
MMCAU_AES_DecryptEcb(inBlock, (byte*)aes->key, aes->rounds,
|
||||
outBlock);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
@ -1824,7 +1857,11 @@ static void wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_aes_set_key(userKey, keylen*8, rk);
|
||||
#else
|
||||
MMCAU_AES_SetKey(userKey, keylen, rk);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
ret = wc_AesSetIV(aes, iv);
|
||||
|
@ -750,7 +750,11 @@
|
||||
* Documentation located in ColdFire/ColdFire+ CAU and Kinetis mmCAU
|
||||
* Software Library User Guide (See note in README).
|
||||
*/
|
||||
#include "fsl_mmcau.h"
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
#include "cau_api.h"
|
||||
#else
|
||||
#include "fsl_mmcau.h"
|
||||
#endif
|
||||
|
||||
const unsigned char parityLookup[128] = {
|
||||
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
||||
@ -815,6 +819,13 @@
|
||||
|
||||
iv = (byte*)des->reg;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)out % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_des_encrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
XMEMCPY(temp_block, in + offset, DES_BLOCK_SIZE);
|
||||
@ -827,7 +838,11 @@
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_des_encrypt(temp_block, (byte*)des->key, out + offset);
|
||||
#else
|
||||
MMCAU_DES_EncryptEcb(temp_block, (byte*)des->key, out + offset);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
len -= DES_BLOCK_SIZE;
|
||||
@ -851,6 +866,13 @@
|
||||
|
||||
iv = (byte*)des->reg;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)out % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_des_decrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
XMEMCPY(temp_block, in + offset, DES_BLOCK_SIZE);
|
||||
@ -859,7 +881,12 @@
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_des_decrypt(in + offset, (byte*)des->key, out + offset);
|
||||
#else
|
||||
MMCAU_DES_DecryptEcb(in + offset, (byte*)des->key, out + offset);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
/* XOR block with IV for CBC */
|
||||
@ -888,6 +915,13 @@
|
||||
|
||||
iv = (byte*)des->reg;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)out % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad 3ede cau_des_encrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
XMEMCPY(temp_block, in + offset, DES_BLOCK_SIZE);
|
||||
@ -900,9 +934,15 @@
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_des_encrypt(temp_block, (byte*)des->key[0], out + offset);
|
||||
cau_des_decrypt(out + offset, (byte*)des->key[1], out + offset);
|
||||
cau_des_encrypt(out + offset, (byte*)des->key[2], out + offset);
|
||||
#else
|
||||
MMCAU_DES_EncryptEcb(temp_block , (byte*)des->key[0], out + offset);
|
||||
MMCAU_DES_DecryptEcb(out + offset, (byte*)des->key[1], out + offset);
|
||||
MMCAU_DES_EncryptEcb(out + offset, (byte*)des->key[2], out + offset);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
len -= DES_BLOCK_SIZE;
|
||||
@ -927,6 +967,13 @@
|
||||
|
||||
iv = (byte*)des->reg;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)out % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad 3ede cau_des_decrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
XMEMCPY(temp_block, in + offset, DES_BLOCK_SIZE);
|
||||
@ -935,9 +982,15 @@
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
cau_des_decrypt(in + offset, (byte*)des->key[2], out + offset);
|
||||
cau_des_encrypt(out + offset, (byte*)des->key[1], out + offset);
|
||||
cau_des_decrypt(out + offset, (byte*)des->key[0], out + offset);
|
||||
#else
|
||||
MMCAU_DES_DecryptEcb(in + offset , (byte*)des->key[2], out + offset);
|
||||
MMCAU_DES_EncryptEcb(out + offset, (byte*)des->key[1], out + offset);
|
||||
MMCAU_DES_DecryptEcb(out + offset, (byte*)des->key[0], out + offset);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
/* XOR block with IV for CBC */
|
||||
|
@ -149,6 +149,8 @@ static void wolfssl_log(const int logLevel, const char *const logMessage)
|
||||
#elif defined(WOLFSSL_UTASKER)
|
||||
fnDebugMsg((char*)logMessage);
|
||||
fnDebugMsg("\r\n");
|
||||
#elif defined(MQX_USE_IO_OLD)
|
||||
fprintf(_mqxio_stderr, "%s\n", logMessage);
|
||||
#else
|
||||
fprintf(stderr, "%s\n", logMessage);
|
||||
#endif
|
||||
|
@ -174,7 +174,11 @@
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_md5_hash_n(data, 1, (unsigned char*)md5->digest);
|
||||
#else
|
||||
MMCAU_MD5_HashN(data, 1, (uint32_t*)md5->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
|
@ -886,6 +886,9 @@ int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
|
||||
case WC_PKCS12_ShroudedKeyBag: /* 668 */
|
||||
{
|
||||
byte* k;
|
||||
#ifdef FREESCALE_MQX
|
||||
byte* tmp;
|
||||
#endif
|
||||
WOLFSSL_MSG("PKCS12 Shrouded Key Bag found");
|
||||
if (data[idx++] !=
|
||||
(ASN_CONSTRUCTED | ASN_CONTEXT_SPECIFIC)) {
|
||||
@ -911,11 +914,24 @@ int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
|
||||
|
||||
if (ret < size) {
|
||||
/* shrink key buffer */
|
||||
#ifdef FREESCALE_MQX
|
||||
/* MQX classic has no realloc */
|
||||
tmp = (byte*)XMALLOC(ret, pkcs12->heap,
|
||||
DYNAMIC_TYPE_PUBLIC_KEY);
|
||||
if (tmp == NULL) {
|
||||
XFREE(k, pkcs12->heap, DYNAMIC_TYPE_PUBLIC_KEY);
|
||||
ERROR_OUT(MEMORY_E, exit_pk12par);
|
||||
}
|
||||
XMEMCPY(tmp, k, ret);
|
||||
XFREE(k, pkcs12->heap, DYNAMIC_TYPE_PUBLIC_KEY);
|
||||
k = tmp;
|
||||
#else
|
||||
k = (byte*)XREALLOC(k, ret, pkcs12->heap,
|
||||
DYNAMIC_TYPE_PUBLIC_KEY);
|
||||
if (k == NULL) {
|
||||
ERROR_OUT(MEMORY_E, exit_pk12par);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
size = ret;
|
||||
|
||||
|
@ -237,7 +237,12 @@
|
||||
|
||||
#elif defined(FREESCALE_MMCAU_SHA)
|
||||
|
||||
#include "fsl_mmcau.h"
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
#include "cau_api.h"
|
||||
#else
|
||||
#include "fsl_mmcau.h"
|
||||
#endif
|
||||
|
||||
#define USE_SHA_SOFTWARE_IMPL /* Only for API's, actual transform is here */
|
||||
#define XSHATRANSFORM ShaTransform
|
||||
|
||||
@ -248,7 +253,11 @@
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha1_initialize_output(sha->digest);
|
||||
#else
|
||||
MMCAU_SHA1_InitializeOutput((uint32_t*)sha->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
sha->buffLen = 0;
|
||||
@ -262,7 +271,11 @@
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha1_hash_n(data, 1, sha->digest);
|
||||
#else
|
||||
MMCAU_SHA1_HashN(data, 1, (uint32_t*)sha->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
@ -522,7 +535,7 @@ int wc_ShaFinal(Sha* sha, byte* hash)
|
||||
XMEMCPY(&local[SHA_PAD_SIZE], &sha->hiLen, sizeof(word32));
|
||||
XMEMCPY(&local[SHA_PAD_SIZE + sizeof(word32)], &sha->loLen, sizeof(word32));
|
||||
|
||||
#ifdef FREESCALE_MMCAU_SHA
|
||||
#if defined(FREESCALE_MMCAU_SHA)
|
||||
/* Kinetis requires only these bytes reversed */
|
||||
ByteReverseWords(&sha->buffer[SHA_PAD_SIZE/sizeof(word32)],
|
||||
&sha->buffer[SHA_PAD_SIZE/sizeof(word32)],
|
||||
|
@ -323,7 +323,13 @@ static int InitSha256(Sha256* sha256)
|
||||
}
|
||||
|
||||
#elif defined(FREESCALE_MMCAU_SHA)
|
||||
#include "fsl_mmcau.h"
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
#include "cau_api.h"
|
||||
#else
|
||||
#include "fsl_mmcau.h"
|
||||
#endif
|
||||
|
||||
#define XTRANSFORM(sha256, B) Transform(sha256, B)
|
||||
|
||||
int wc_InitSha256_ex(Sha256* sha256, void* heap, int devId)
|
||||
@ -337,7 +343,11 @@ static int InitSha256(Sha256* sha256)
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha256_initialize_output(sha256->digest);
|
||||
#else
|
||||
MMCAU_SHA256_InitializeOutput((uint32_t*)sha256->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
sha256->buffLen = 0;
|
||||
@ -351,7 +361,11 @@ static int InitSha256(Sha256* sha256)
|
||||
{
|
||||
int ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC_SHA
|
||||
cau_sha256_hash_n(buf, 1, sha256->digest);
|
||||
#else
|
||||
MMCAU_SHA256_HashN(buf, 1, sha256->digest);
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
@ -623,7 +637,7 @@ static int InitSha256(Sha256* sha256)
|
||||
sizeof(word32));
|
||||
|
||||
#if defined(FREESCALE_MMCAU_SHA) || defined(HAVE_INTEL_AVX1) || \
|
||||
defined(HAVE_INTEL_AVX2)
|
||||
defined(HAVE_INTEL_AVX2)
|
||||
/* Kinetis requires only these bytes reversed */
|
||||
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
|
||||
if (IS_INTEL_AVX1 || IS_INTEL_AVX2)
|
||||
|
@ -78,7 +78,7 @@ WOLFSSL_API int wolfSSL_BN_is_prime_ex(const WOLFSSL_BIGNUM*, int,
|
||||
WOLFSSL_BN_CTX*, WOLFSSL_BN_GENCB*);
|
||||
WOLFSSL_API WOLFSSL_BN_ULONG wolfSSL_BN_mod_word(const WOLFSSL_BIGNUM*,
|
||||
WOLFSSL_BN_ULONG);
|
||||
#ifndef NO_FILESYSTEM
|
||||
#if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
|
||||
WOLFSSL_API int wolfSSL_BN_print_fp(FILE*, const WOLFSSL_BIGNUM*);
|
||||
#endif
|
||||
WOLFSSL_API int wolfSSL_BN_rshift(WOLFSSL_BIGNUM*, const WOLFSSL_BIGNUM*, int);
|
||||
|
@ -686,6 +686,7 @@ extern void uITRON4_free(void *p) ;
|
||||
#include "mfs.h"
|
||||
#if MQX_USE_IO_OLD
|
||||
#include "fio.h"
|
||||
#define NO_STDIO_FILESYSTEM
|
||||
#else
|
||||
#include "nio.h"
|
||||
#endif
|
||||
@ -694,6 +695,7 @@ extern void uITRON4_free(void *p) ;
|
||||
#include "mutex.h"
|
||||
#endif
|
||||
|
||||
#define XMALLOC_OVERRIDE
|
||||
#define XMALLOC(s, h, t) (void *)_mem_alloc_system((s))
|
||||
#define XFREE(p, h, t) {void* xp = (p); if ((xp)) _mem_free((xp));}
|
||||
/* Note: MQX has no realloc, using fastmath above */
|
||||
@ -804,7 +806,8 @@ extern void uITRON4_free(void *p) ;
|
||||
|
||||
#ifdef FREESCALE_KSDK_1_3
|
||||
#include "fsl_device_registers.h"
|
||||
#else
|
||||
#elif !defined(FREESCALE_MQX)
|
||||
/* Classic MQX does not have fsl_common.h */
|
||||
#include "fsl_common.h"
|
||||
#endif
|
||||
|
||||
@ -849,6 +852,14 @@ extern void uITRON4_free(void *p) ;
|
||||
#endif
|
||||
#endif /* FREESCALE_COMMON */
|
||||
|
||||
/* Classic pre-KSDK mmCAU library */
|
||||
#ifdef FREESCALE_USE_MMCAU_CLASSIC
|
||||
#define FREESCALE_USE_MMCAU
|
||||
#define FREESCALE_MMCAU_CLASSIC
|
||||
#define FREESCALE_MMCAU_CLASSIC_SHA
|
||||
#endif
|
||||
|
||||
/* KSDK mmCAU library */
|
||||
#ifdef FREESCALE_USE_MMCAU
|
||||
/* AES and DES */
|
||||
#define FREESCALE_MMCAU
|
||||
@ -1276,9 +1287,14 @@ extern void uITRON4_free(void *p) ;
|
||||
#endif /* WOLFSSL_SGX */
|
||||
|
||||
/* FreeScale MMCAU hardware crypto has 4 byte alignment.
|
||||
However, fsl_mmcau.h gives API with no alignment requirements (4 byte alignment is managed internally by fsl_mmcau.c) */
|
||||
However, KSDK fsl_mmcau.h gives API with no alignment
|
||||
requirements (4 byte alignment is managed internally by fsl_mmcau.c) */
|
||||
#ifdef FREESCALE_MMCAU
|
||||
#define WOLFSSL_MMCAU_ALIGNMENT 0
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
#define WOLFSSL_MMCAU_ALIGNMENT 4
|
||||
#else
|
||||
#define WOLFSSL_MMCAU_ALIGNMENT 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* if using hardware crypto and have alignment requirements, specify the
|
||||
@ -1289,7 +1305,7 @@ extern void uITRON4_free(void *p) ;
|
||||
#define WOLFSSL_GENERAL_ALIGNMENT 16
|
||||
#elif defined(XSTREAM_ALIGN)
|
||||
#define WOLFSSL_GENERAL_ALIGNMENT 4
|
||||
#elif defined(FREESCALE_MMCAU)
|
||||
#elif defined(FREESCALE_MMCAU) || defined(FREESCALE_MMCAU_CLASSIC)
|
||||
#define WOLFSSL_GENERAL_ALIGNMENT WOLFSSL_MMCAU_ALIGNMENT
|
||||
#else
|
||||
#define WOLFSSL_GENERAL_ALIGNMENT 0
|
||||
|
@ -24,6 +24,7 @@
|
||||
#ifndef WOLF_CRYPT_PORT_H
|
||||
#define WOLF_CRYPT_PORT_H
|
||||
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
#include <wolfssl/wolfcrypt/visibility.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
Loading…
x
Reference in New Issue
Block a user