From 98010ab4898685ac32e8a27bb010c0872c401610 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 12 May 2016 18:38:51 +0200 Subject: kernel: remove ocf support, cryptodev-linux should be used instead Signed-off-by: Felix Fietkau --- .../files/crypto/ocf/kirkwood/cesa/AES/mvAes.h | 62 - .../files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.c | 317 -- .../files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.h | 19 - .../files/crypto/ocf/kirkwood/cesa/AES/mvAesApi.c | 312 -- .../crypto/ocf/kirkwood/cesa/AES/mvAesBoxes.dat | 123 - .../files/crypto/ocf/kirkwood/cesa/mvCesa.c | 3126 -------------------- .../files/crypto/ocf/kirkwood/cesa/mvCesa.h | 412 --- .../files/crypto/ocf/kirkwood/cesa/mvCesaDebug.c | 484 --- .../files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h | 357 --- .../files/crypto/ocf/kirkwood/cesa/mvCesaTest.c | 3096 ------------------- .../files/crypto/ocf/kirkwood/cesa/mvCompVer.txt | 4 - .../generic/files/crypto/ocf/kirkwood/cesa/mvLru.c | 158 - .../generic/files/crypto/ocf/kirkwood/cesa/mvLru.h | 112 - .../generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c | 349 --- .../generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h | 93 - .../files/crypto/ocf/kirkwood/cesa/mvSHA1.c | 239 -- .../files/crypto/ocf/kirkwood/cesa/mvSHA1.h | 88 - 17 files changed, 9351 deletions(-) delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAes.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesApi.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesBoxes.dat delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaDebug.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaTest.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCompVer.txt delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c delete mode 100644 target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h (limited to 'target/linux/generic/files/crypto/ocf/kirkwood/cesa') diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAes.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAes.h deleted file mode 100644 index 07a8601f82..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAes.h +++ /dev/null @@ -1,62 +0,0 @@ -/* mvAes.h v2.0 August '99 - * Reference ANSI C code - */ - -/* AES Cipher header file for ANSI C Submissions - Lawrence E. Bassham III - Computer Security Division - National Institute of Standards and Technology - - April 15, 1998 - - This sample is to assist implementers developing to the Cryptographic -API Profile for AES Candidate Algorithm Submissions. Please consult this -document as a cross-reference. - - ANY CHANGES, WHERE APPROPRIATE, TO INFORMATION PROVIDED IN THIS FILE -MUST BE DOCUMENTED. CHANGES ARE ONLY APPROPRIATE WHERE SPECIFIED WITH -THE STRING "CHANGE POSSIBLE". FUNCTION CALLS AND THEIR PARAMETERS CANNOT -BE CHANGED. STRUCTURES CAN BE ALTERED TO ALLOW IMPLEMENTERS TO INCLUDE -IMPLEMENTATION SPECIFIC INFORMATION. -*/ - -/* Includes: - Standard include files -*/ - -#include "mvOs.h" - - -/* Error Codes - CHANGE POSSIBLE: inclusion of additional error codes */ - -/* Key direction is invalid, e.g., unknown value */ -#define AES_BAD_KEY_DIR -1 - -/* Key material not of correct length */ -#define AES_BAD_KEY_MAT -2 - -/* Key passed is not valid */ -#define AES_BAD_KEY_INSTANCE -3 - -/* Params struct passed to cipherInit invalid */ -#define AES_BAD_CIPHER_MODE -4 - -/* Cipher in wrong state (e.g., not initialized) */ -#define AES_BAD_CIPHER_STATE -5 - -#define AES_BAD_CIPHER_INSTANCE -7 - - -/* Function protoypes */ -/* CHANGED: makeKey(): parameter blockLen added - this parameter is absolutely necessary if you want to - setup the round keys in a variable block length setting - cipherInit(): parameter blockLen added (for obvious reasons) - */ -int aesMakeKey(MV_U8 *expandedKey, MV_U8 *keyMaterial, int keyLen, int blockLen); -int aesBlockEncrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen, - MV_U32 *plain, int numBlocks, MV_U32 *cipher); -int aesBlockDecrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen, - MV_U32 *plain, int numBlocks, MV_U32 *cipher); - - diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.c b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.c deleted file mode 100644 index a65dc28932..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.c +++ /dev/null @@ -1,317 +0,0 @@ -/* rijndael-alg-ref.c v2.0 August '99 - * Reference ANSI C code - * authors: Paulo Barreto - * Vincent Rijmen, K.U.Leuven - * - * This code is placed in the public domain. - */ - -#include "mvOs.h" - -#include "mvAesAlg.h" - -#include "mvAesBoxes.dat" - - -MV_U8 mul1(MV_U8 aa, MV_U8 bb); -void KeyAddition(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC], MV_U8 BC); -void ShiftRow128Enc(MV_U8 a[4][MAXBC]); -void ShiftRow128Dec(MV_U8 a[4][MAXBC]); -void Substitution(MV_U8 a[4][MAXBC], MV_U8 box[256]); -void MixColumn(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC]); -void InvMixColumn(MV_U8 a[4][MAXBC]); - - -#define mul(aa, bb) (mask[bb] & Alogtable[aa + Logtable[bb]]) - -MV_U8 mul1(MV_U8 aa, MV_U8 bb) -{ - return mask[bb] & Alogtable[aa + Logtable[bb]]; -} - - -void KeyAddition(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC], MV_U8 BC) -{ - /* Exor corresponding text input and round key input bytes - */ - ((MV_U32*)(&(a[0][0])))[0] ^= ((MV_U32*)(&(rk[0][0])))[0]; - ((MV_U32*)(&(a[1][0])))[0] ^= ((MV_U32*)(&(rk[1][0])))[0]; - ((MV_U32*)(&(a[2][0])))[0] ^= ((MV_U32*)(&(rk[2][0])))[0]; - ((MV_U32*)(&(a[3][0])))[0] ^= ((MV_U32*)(&(rk[3][0])))[0]; - -} - -void ShiftRow128Enc(MV_U8 a[4][MAXBC]) { - /* Row 0 remains unchanged - * The other three rows are shifted a variable amount - */ - MV_U8 tmp[MAXBC]; - - tmp[0] = a[1][1]; - tmp[1] = a[1][2]; - tmp[2] = a[1][3]; - tmp[3] = a[1][0]; - - ((MV_U32*)(&(a[1][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[1][0] = tmp[0]; - a[1][1] = tmp[1]; - a[1][2] = tmp[2]; - a[1][3] = tmp[3]; - */ - tmp[0] = a[2][2]; - tmp[1] = a[2][3]; - tmp[2] = a[2][0]; - tmp[3] = a[2][1]; - - ((MV_U32*)(&(a[2][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[2][0] = tmp[0]; - a[2][1] = tmp[1]; - a[2][2] = tmp[2]; - a[2][3] = tmp[3]; - */ - tmp[0] = a[3][3]; - tmp[1] = a[3][0]; - tmp[2] = a[3][1]; - tmp[3] = a[3][2]; - - ((MV_U32*)(&(a[3][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[3][0] = tmp[0]; - a[3][1] = tmp[1]; - a[3][2] = tmp[2]; - a[3][3] = tmp[3]; - */ -} - -void ShiftRow128Dec(MV_U8 a[4][MAXBC]) { - /* Row 0 remains unchanged - * The other three rows are shifted a variable amount - */ - MV_U8 tmp[MAXBC]; - - tmp[0] = a[1][3]; - tmp[1] = a[1][0]; - tmp[2] = a[1][1]; - tmp[3] = a[1][2]; - - ((MV_U32*)(&(a[1][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[1][0] = tmp[0]; - a[1][1] = tmp[1]; - a[1][2] = tmp[2]; - a[1][3] = tmp[3]; - */ - - tmp[0] = a[2][2]; - tmp[1] = a[2][3]; - tmp[2] = a[2][0]; - tmp[3] = a[2][1]; - - ((MV_U32*)(&(a[2][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[2][0] = tmp[0]; - a[2][1] = tmp[1]; - a[2][2] = tmp[2]; - a[2][3] = tmp[3]; - */ - - tmp[0] = a[3][1]; - tmp[1] = a[3][2]; - tmp[2] = a[3][3]; - tmp[3] = a[3][0]; - - ((MV_U32*)(&(a[3][0])))[0] = ((MV_U32*)(&(tmp[0])))[0]; - /* - a[3][0] = tmp[0]; - a[3][1] = tmp[1]; - a[3][2] = tmp[2]; - a[3][3] = tmp[3]; - */ -} - -void Substitution(MV_U8 a[4][MAXBC], MV_U8 box[256]) { - /* Replace every byte of the input by the byte at that place - * in the nonlinear S-box - */ - int i, j; - - for(i = 0; i < 4; i++) - for(j = 0; j < 4; j++) a[i][j] = box[a[i][j]] ; -} - -void MixColumn(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC]) { - /* Mix the four bytes of every column in a linear way - */ - MV_U8 b[4][MAXBC]; - int i, j; - - for(j = 0; j < 4; j++){ - b[0][j] = mul(25,a[0][j]) ^ mul(1,a[1][j]) ^ a[2][j] ^ a[3][j]; - b[1][j] = mul(25,a[1][j]) ^ mul(1,a[2][j]) ^ a[3][j] ^ a[0][j]; - b[2][j] = mul(25,a[2][j]) ^ mul(1,a[3][j]) ^ a[0][j] ^ a[1][j]; - b[3][j] = mul(25,a[3][j]) ^ mul(1,a[0][j]) ^ a[1][j] ^ a[2][j]; - } - for(i = 0; i < 4; i++) - /*for(j = 0; j < BC; j++) a[i][j] = b[i][j];*/ - ((MV_U32*)(&(a[i][0])))[0] = ((MV_U32*)(&(b[i][0])))[0] ^ ((MV_U32*)(&(rk[i][0])))[0];; -} - -void InvMixColumn(MV_U8 a[4][MAXBC]) { - /* Mix the four bytes of every column in a linear way - * This is the opposite operation of Mixcolumn - */ - MV_U8 b[4][MAXBC]; - int i, j; - - for(j = 0; j < 4; j++){ - b[0][j] = mul(223,a[0][j]) ^ mul(104,a[1][j]) ^ mul(238,a[2][j]) ^ mul(199,a[3][j]); - b[1][j] = mul(223,a[1][j]) ^ mul(104,a[2][j]) ^ mul(238,a[3][j]) ^ mul(199,a[0][j]); - b[2][j] = mul(223,a[2][j]) ^ mul(104,a[3][j]) ^ mul(238,a[0][j]) ^ mul(199,a[1][j]); - b[3][j] = mul(223,a[3][j]) ^ mul(104,a[0][j]) ^ mul(238,a[1][j]) ^ mul(199,a[2][j]); - } - for(i = 0; i < 4; i++) - /*for(j = 0; j < BC; j++) a[i][j] = b[i][j];*/ - ((MV_U32*)(&(a[i][0])))[0] = ((MV_U32*)(&(b[i][0])))[0]; -} - -int rijndaelKeySched (MV_U8 k[4][MAXKC], int keyBits, int blockBits, MV_U8 W[MAXROUNDS+1][4][MAXBC]) -{ - /* Calculate the necessary round keys - * The number of calculations depends on keyBits and blockBits - */ - int KC, BC, ROUNDS; - int i, j, t, rconpointer = 0; - MV_U8 tk[4][MAXKC]; - - switch (keyBits) { - case 128: KC = 4; break; - case 192: KC = 6; break; - case 256: KC = 8; break; - default : return (-1); - } - - switch (blockBits) { - case 128: BC = 4; break; - case 192: BC = 6; break; - case 256: BC = 8; break; - default : return (-2); - } - - switch (keyBits >= blockBits ? keyBits : blockBits) { - case 128: ROUNDS = 10; break; - case 192: ROUNDS = 12; break; - case 256: ROUNDS = 14; break; - default : return (-3); /* this cannot happen */ - } - - - for(j = 0; j < KC; j++) - for(i = 0; i < 4; i++) - tk[i][j] = k[i][j]; - t = 0; - /* copy values into round key array */ - for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++) - for(i = 0; i < 4; i++) W[t / BC][i][t % BC] = tk[i][j]; - - while (t < (ROUNDS+1)*BC) { /* while not enough round key material calculated */ - /* calculate new values */ - for(i = 0; i < 4; i++) - tk[i][0] ^= S[tk[(i+1)%4][KC-1]]; - tk[0][0] ^= rcon[rconpointer++]; - - if (KC != 8) - for(j = 1; j < KC; j++) - for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1]; - else { - for(j = 1; j < KC/2; j++) - for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1]; - for(i = 0; i < 4; i++) tk[i][KC/2] ^= S[tk[i][KC/2 - 1]]; - for(j = KC/2 + 1; j < KC; j++) - for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1]; - } - /* copy values into round key array */ - for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++) - for(i = 0; i < 4; i++) W[t / BC][i][t % BC] = tk[i][j]; - } - - return 0; -} - - - -int rijndaelEncrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds) -{ - /* Encryption of one block. - */ - int r, BC, ROUNDS; - - BC = 4; - ROUNDS = rounds; - - /* begin with a key addition - */ - - KeyAddition(a,rk[0],BC); - - /* ROUNDS-1 ordinary rounds - */ - for(r = 1; r < ROUNDS; r++) { - Substitution(a,S); - ShiftRow128Enc(a); - MixColumn(a, rk[r]); - /*KeyAddition(a,rk[r],BC);*/ - } - - /* Last round is special: there is no MixColumn - */ - Substitution(a,S); - ShiftRow128Enc(a); - KeyAddition(a,rk[ROUNDS],BC); - - return 0; -} - - -int rijndaelDecrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds) -{ - int r, BC, ROUNDS; - - BC = 4; - ROUNDS = rounds; - - /* To decrypt: apply the inverse operations of the encrypt routine, - * in opposite order - * - * (KeyAddition is an involution: it 's equal to its inverse) - * (the inverse of Substitution with table S is Substitution with the inverse table of S) - * (the inverse of Shiftrow is Shiftrow over a suitable distance) - */ - - /* First the special round: - * without InvMixColumn - * with extra KeyAddition - */ - KeyAddition(a,rk[ROUNDS],BC); - ShiftRow128Dec(a); - Substitution(a,Si); - - /* ROUNDS-1 ordinary rounds - */ - for(r = ROUNDS-1; r > 0; r--) { - KeyAddition(a,rk[r],BC); - InvMixColumn(a); - ShiftRow128Dec(a); - Substitution(a,Si); - - } - - /* End with the extra key addition - */ - - KeyAddition(a,rk[0],BC); - - return 0; -} - diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.h deleted file mode 100644 index ec81e403fa..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesAlg.h +++ /dev/null @@ -1,19 +0,0 @@ -/* rijndael-alg-ref.h v2.0 August '99 - * Reference ANSI C code - * authors: Paulo Barreto - * Vincent Rijmen, K.U.Leuven - */ -#ifndef __RIJNDAEL_ALG_H -#define __RIJNDAEL_ALG_H - -#define MAXBC (128/32) -#define MAXKC (256/32) -#define MAXROUNDS 14 - - -int rijndaelKeySched (MV_U8 k[4][MAXKC], int keyBits, int blockBits, MV_U8 rk[MAXROUNDS+1][4][MAXBC]); - -int rijndaelEncrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds); -int rijndaelDecrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds); - -#endif /* __RIJNDAEL_ALG_H */ diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesApi.c b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesApi.c deleted file mode 100644 index b432dc6e66..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/AES/mvAesApi.c +++ /dev/null @@ -1,312 +0,0 @@ -/* rijndael-api-ref.c v2.1 April 2000 - * Reference ANSI C code - * authors: v2.0 Paulo Barreto - * Vincent Rijmen, K.U.Leuven - * v2.1 Vincent Rijmen, K.U.Leuven - * - * This code is placed in the public domain. - */ -#include "mvOs.h" - -#include "mvAes.h" -#include "mvAesAlg.h" - - -/* Defines: - Add any additional defines you need -*/ - -#define MODE_ECB 1 /* Are we ciphering in ECB mode? */ -#define MODE_CBC 2 /* Are we ciphering in CBC mode? */ -#define MODE_CFB1 3 /* Are we ciphering in 1-bit CFB mode? */ - - -int aesMakeKey(MV_U8 *expandedKey, MV_U8 *keyMaterial, int keyLen, int blockLen) -{ - MV_U8 W[MAXROUNDS+1][4][MAXBC]; - MV_U8 k[4][MAXKC]; - MV_U8 j; - int i, rounds, KC; - - if (expandedKey == NULL) - { - return AES_BAD_KEY_INSTANCE; - } - - if (!((keyLen == 128) || (keyLen == 192) || (keyLen == 256))) - { - return AES_BAD_KEY_MAT; - } - - if (keyMaterial == NULL) - { - return AES_BAD_KEY_MAT; - } - - /* initialize key schedule: */ - for(i=0; i= 3) -MV_U32 cesaChainLength = 0; -int chainReqNum = 0; -MV_U32 chainIndex = 0; -MV_CESA_REQ* pNextActiveChain = 0; -MV_CESA_REQ* pEndCurrChain = 0; -MV_BOOL isFirstReq = MV_TRUE; -#endif - -static INLINE MV_U8* mvCesaSramAddrGet(void) -{ -#ifdef MV_CESA_NO_SRAM - return (MV_U8*)cesaSramVirtPtr; -#else - return (MV_U8*)cesaCryptEngBase; -#endif /* MV_CESA_NO_SRAM */ -} - -static INLINE MV_ULONG mvCesaSramVirtToPhys(void* pDev, MV_U8* pSramVirt) -{ -#ifdef MV_CESA_NO_SRAM - return (MV_ULONG)mvOsIoVirtToPhy(NULL, pSramVirt); -#else - return (MV_ULONG)pSramVirt; -#endif /* MV_CESA_NO_SRAM */ -} - -/* Internal Function prototypes */ - -static INLINE void mvCesaSramDescrBuild(MV_U32 config, int frag, - int cryptoOffset, int ivOffset, int cryptoLength, - int macOffset, int digestOffset, int macLength, int macTotalLen, - MV_CESA_REQ *pCesaReq, MV_DMA_DESC* pDmaDesc); - -static INLINE void mvCesaSramSaUpdate(short sid, MV_DMA_DESC *pDmaDesc); - -static INLINE int mvCesaDmaCopyPrepare(MV_CESA_MBUF* pMbuf, MV_U8* pSramBuf, - MV_DMA_DESC* pDmaDesc, MV_BOOL isToMbuf, - int offset, int copySize, MV_BOOL skipFlush); - -static void mvCesaHmacIvGet(MV_CESA_MAC_MODE macMode, unsigned char key[], int keyLength, - unsigned char innerIV[], unsigned char outerIV[]); - -static MV_STATUS mvCesaFragAuthComplete(MV_CESA_REQ* pReq, MV_CESA_SA* pSA, - int macDataSize); - -static MV_CESA_COMMAND* mvCesaCtrModeInit(void); - -static MV_STATUS mvCesaCtrModePrepare(MV_CESA_COMMAND *pCtrModeCmd, MV_CESA_COMMAND *pCmd); -static MV_STATUS mvCesaCtrModeComplete(MV_CESA_COMMAND *pOrgCmd, MV_CESA_COMMAND *pCmd); -static void mvCesaCtrModeFinish(MV_CESA_COMMAND *pCmd); - -static INLINE MV_STATUS mvCesaReqProcess(MV_CESA_REQ* pReq); -static MV_STATUS mvCesaFragReqProcess(MV_CESA_REQ* pReq, MV_U8 frag); - -static INLINE MV_STATUS mvCesaParamCheck(MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd, MV_U8* pFixOffset); -static INLINE MV_STATUS mvCesaFragParamCheck(MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd); - -static INLINE void mvCesaFragSizeFind(MV_CESA_SA* pSA, MV_CESA_REQ* pReq, - int cryptoOffset, int macOffset, - int* pCopySize, int* pCryptoDataSize, int* pMacDataSize); -static MV_STATUS mvCesaMbufCacheUnmap(MV_CESA_MBUF* pMbuf, int offset, int size); - - -/* Go to the next request in the request queue */ -static INLINE MV_CESA_REQ* MV_CESA_REQ_NEXT_PTR(MV_CESA_REQ* pReq) -{ - if(pReq == pCesaReqLast) - return pCesaReqFirst; - - return pReq+1; -} - -#if (MV_CESA_VERSION >= 3) -/* Go to the previous request in the request queue */ -static INLINE MV_CESA_REQ* MV_CESA_REQ_PREV_PTR(MV_CESA_REQ* pReq) -{ - if(pReq == pCesaReqFirst) - return pCesaReqLast; - - return pReq-1; -} - -#endif - - -static INLINE void mvCesaReqProcessStart(MV_CESA_REQ* pReq) -{ - int frag; - -#if (MV_CESA_VERSION >= 3) - pReq->state = MV_CESA_CHAIN; -#else - pReq->state = MV_CESA_PROCESS; -#endif - cesaStats.startCount++; - - if(pReq->fragMode == MV_CESA_FRAG_NONE) - { - frag = 0; - } - else - { - frag = pReq->frags.nextFrag; - pReq->frags.nextFrag++; - } -#if (MV_CESA_VERSION >= 2) - /* Enable TDMA engine */ - MV_REG_WRITE(MV_CESA_TDMA_CURR_DESC_PTR_REG, 0); - MV_REG_WRITE(MV_CESA_TDMA_NEXT_DESC_PTR_REG, - (MV_U32)mvCesaVirtToPhys(&pReq->dmaDescBuf, pReq->dma[frag].pDmaFirst)); -#else - /* Enable IDMA engine */ - MV_REG_WRITE(IDMA_CURR_DESC_PTR_REG(0), 0); - MV_REG_WRITE(IDMA_NEXT_DESC_PTR_REG(0), - (MV_U32)mvCesaVirtToPhys(&pReq->dmaDescBuf, pReq->dma[frag].pDmaFirst)); -#endif /* MV_CESA_VERSION >= 2 */ - -#if defined(MV_BRIDGE_SYNC_REORDER) - mvOsBridgeReorderWA(); -#endif - - /* Start Accelerator */ - MV_REG_WRITE(MV_CESA_CMD_REG, MV_CESA_CMD_CHAN_ENABLE_MASK); -} - - -/******************************************************************************* -* mvCesaHalInit - Initialize the CESA driver -* -* DESCRIPTION: -* This function initialize the CESA driver. -* 1) Session database -* 2) Request queue -* 4) DMA descriptor lists - one list per request. Each list -* has MV_CESA_MAX_DMA_DESC descriptors. -* -* INPUT: -* numOfSession - maximum number of supported sessions -* queueDepth - number of elements in the request queue. -* pSramBase - virtual address of Sram -* osHandle - A handle used by the OS to allocate memory for the -* module (Passed to the OS Services layer) -* -* RETURN: -* MV_OK - Success -* MV_NO_RESOURCE - Fail, can't allocate resources: -* Session database, request queue, -* DMA descriptors list, LRU cache database. -* MV_NOT_ALIGNED - Sram base address is not 8 byte aligned. -* -*******************************************************************************/ -MV_STATUS mvCesaHalInit (int numOfSession, int queueDepth, char* pSramBase, MV_U32 cryptEngBase, - void *osHandle) -{ - int i, req; - MV_U32 descOffsetReg, configReg; - MV_CESA_SRAM_SA *pSramSA; - - - mvOsPrintf("mvCesaInit: sessions=%d, queue=%d, pSram=%p\n", - numOfSession, queueDepth, pSramBase); - - cesaOsHandle = osHandle; - /* Create Session database */ - pCesaSAD = mvOsMalloc(sizeof(MV_CESA_SA)*numOfSession); - if(pCesaSAD == NULL) - { - mvOsPrintf("mvCesaInit: Can't allocate %u bytes for %d SAs\n", - sizeof(MV_CESA_SA)*numOfSession, numOfSession); - mvCesaFinish(); - return MV_NO_RESOURCE; - } - memset(pCesaSAD, 0, sizeof(MV_CESA_SA)*numOfSession); - cesaMaxSA = numOfSession; - - /* Allocate imag of sramSA in the DRAM */ - cesaSramSaBuf.bufSize = sizeof(MV_CESA_SRAM_SA)*numOfSession + - CPU_D_CACHE_LINE_SIZE; - - cesaSramSaBuf.bufVirtPtr = mvOsIoCachedMalloc(osHandle,cesaSramSaBuf.bufSize, - &cesaSramSaBuf.bufPhysAddr, - &cesaSramSaBuf.memHandle); - - if(cesaSramSaBuf.bufVirtPtr == NULL) - { - mvOsPrintf("mvCesaInit: Can't allocate %d bytes for sramSA structures\n", - cesaSramSaBuf.bufSize); - mvCesaFinish(); - return MV_NO_RESOURCE; - } - memset(cesaSramSaBuf.bufVirtPtr, 0, cesaSramSaBuf.bufSize); - pSramSA = (MV_CESA_SRAM_SA*)MV_ALIGN_UP((MV_ULONG)cesaSramSaBuf.bufVirtPtr, - CPU_D_CACHE_LINE_SIZE); - for(i=0; i= 3) - cesaChainLength = MAX_CESA_CHAIN_LENGTH; -#endif - /* pSramBase must be 8 byte aligned */ - if( MV_IS_NOT_ALIGN((MV_ULONG)pSramBase, 8) ) - { - mvOsPrintf("mvCesaInit: pSramBase (%p) must be 8 byte aligned\n", - pSramBase); - mvCesaFinish(); - return MV_NOT_ALIGNED; - } - cesaSramVirtPtr = (MV_CESA_SRAM_MAP*)pSramBase; - - cesaCryptEngBase = cryptEngBase; - - /*memset(cesaSramVirtPtr, 0, sizeof(MV_CESA_SRAM_MAP));*/ - - /* Clear registers */ - MV_REG_WRITE( MV_CESA_CFG_REG, 0); - MV_REG_WRITE( MV_CESA_ISR_CAUSE_REG, 0); - MV_REG_WRITE( MV_CESA_ISR_MASK_REG, 0); - - /* Initialize DMA descriptor lists for all requests in Request queue */ - descOffsetReg = configReg = 0; - for(req=0; reqcesaDescBuf.bufSize = sizeof(MV_CESA_DESC)*MV_CESA_MAX_REQ_FRAGS + - CPU_D_CACHE_LINE_SIZE; - - pReq->cesaDescBuf.bufVirtPtr = - mvOsIoCachedMalloc(osHandle,pReq->cesaDescBuf.bufSize, - &pReq->cesaDescBuf.bufPhysAddr, - &pReq->cesaDescBuf.memHandle); - - if(pReq->cesaDescBuf.bufVirtPtr == NULL) - { - mvOsPrintf("mvCesaInit: req=%d, Can't allocate %d bytes for CESA descriptors\n", - req, pReq->cesaDescBuf.bufSize); - mvCesaFinish(); - return MV_NO_RESOURCE; - } - memset(pReq->cesaDescBuf.bufVirtPtr, 0, pReq->cesaDescBuf.bufSize); - pReq->pCesaDesc = (MV_CESA_DESC*)MV_ALIGN_UP((MV_ULONG)pReq->cesaDescBuf.bufVirtPtr, - CPU_D_CACHE_LINE_SIZE); - - pReq->dmaDescBuf.bufSize = sizeof(MV_DMA_DESC)*MV_CESA_MAX_DMA_DESC*MV_CESA_MAX_REQ_FRAGS + - CPU_D_CACHE_LINE_SIZE; - - pReq->dmaDescBuf.bufVirtPtr = - mvOsIoCachedMalloc(osHandle,pReq->dmaDescBuf.bufSize, - &pReq->dmaDescBuf.bufPhysAddr, - &pReq->dmaDescBuf.memHandle); - - if(pReq->dmaDescBuf.bufVirtPtr == NULL) - { - mvOsPrintf("mvCesaInit: req=%d, Can't allocate %d bytes for DMA descriptor list\n", - req, pReq->dmaDescBuf.bufSize); - mvCesaFinish(); - return MV_NO_RESOURCE; - } - memset(pReq->dmaDescBuf.bufVirtPtr, 0, pReq->dmaDescBuf.bufSize); - pDmaDesc = (MV_DMA_DESC*)MV_ALIGN_UP((MV_ULONG)pReq->dmaDescBuf.bufVirtPtr, - CPU_D_CACHE_LINE_SIZE); - - for(frag=0; fragdma[frag]; - - pDma->pDmaFirst = pDmaDesc; - pDma->pDmaLast = NULL; - - for(i=0; ipDmaFirst[i].phyNextDescPtr = - MV_32BIT_LE(mvCesaVirtToPhys(&pReq->dmaDescBuf, &pDmaDesc[i+1])); - } - pDma->pDmaFirst[i].phyNextDescPtr = 0; - mvOsCacheFlush(NULL, &pDma->pDmaFirst[0], MV_CESA_MAX_DMA_DESC*sizeof(MV_DMA_DESC)); - - pDmaDesc += MV_CESA_MAX_DMA_DESC; - } - } - /*mvCesaCryptoIvSet(NULL, MV_CESA_MAX_IV_LENGTH);*/ - descOffsetReg = (MV_U16)((MV_U8*)&cesaSramVirtPtr->desc - mvCesaSramAddrGet()); - MV_REG_WRITE(MV_CESA_CHAN_DESC_OFFSET_REG, descOffsetReg); - - configReg |= (MV_CESA_CFG_WAIT_DMA_MASK | MV_CESA_CFG_ACT_DMA_MASK); -#if (MV_CESA_VERSION >= 3) - configReg |= MV_CESA_CFG_CHAIN_MODE_MASK; -#endif - -#if (MV_CESA_VERSION >= 2) - /* Initialize TDMA engine */ - MV_REG_WRITE(MV_CESA_TDMA_CTRL_REG, MV_CESA_TDMA_CTRL_VALUE); - MV_REG_WRITE(MV_CESA_TDMA_BYTE_COUNT_REG, 0); - MV_REG_WRITE(MV_CESA_TDMA_CURR_DESC_PTR_REG, 0); -#else - /* Initialize IDMA #0 engine */ - MV_REG_WRITE(IDMA_CTRL_LOW_REG(0), 0); - MV_REG_WRITE(IDMA_BYTE_COUNT_REG(0), 0); - MV_REG_WRITE(IDMA_CURR_DESC_PTR_REG(0), 0); - MV_REG_WRITE(IDMA_CTRL_HIGH_REG(0), ICCHR_ENDIAN_LITTLE -#ifdef MV_CPU_LE - | ICCHR_DESC_BYTE_SWAP_EN -#endif - ); - /* Clear Cause Byte of IDMA channel to be used */ - MV_REG_WRITE( IDMA_CAUSE_REG, ~ICICR_CAUSE_MASK_ALL(0)); - MV_REG_WRITE(IDMA_CTRL_LOW_REG(0), MV_CESA_IDMA_CTRL_LOW_VALUE); -#endif /* (MV_CESA_VERSION >= 2) */ - - /* Set CESA configuration registers */ - MV_REG_WRITE( MV_CESA_CFG_REG, configReg); - mvCesaDebugStatsClear(); - - return MV_OK; -} - -/******************************************************************************* -* mvCesaFinish - Shutdown the CESA driver -* -* DESCRIPTION: -* This function shutdown the CESA driver and free all allocted resources. -* -* INPUT: None -* -* RETURN: -* MV_OK - Success -* Other - Fail -* -*******************************************************************************/ -MV_STATUS mvCesaFinish (void) -{ - int req; - MV_CESA_REQ* pReq; - - mvOsPrintf("mvCesaFinish: \n"); - - cesaSramVirtPtr = NULL; - - /* Free all resources: DMA list, etc. */ - for(req=0; reqdmaDescBuf.bufVirtPtr != NULL) - { - mvOsIoCachedFree(cesaOsHandle,pReq->dmaDescBuf.bufSize, - pReq->dmaDescBuf.bufPhysAddr, - pReq->dmaDescBuf.bufVirtPtr, - pReq->dmaDescBuf.memHandle); - } - if(pReq->cesaDescBuf.bufVirtPtr != NULL) - { - mvOsIoCachedFree(cesaOsHandle,pReq->cesaDescBuf.bufSize, - pReq->cesaDescBuf.bufPhysAddr, - pReq->cesaDescBuf.bufVirtPtr, - pReq->cesaDescBuf.memHandle); - } - } -#if (MV_CESA_VERSION < 2) - MV_REG_WRITE(IDMA_CTRL_LOW_REG(0), 0); -#endif /* (MV_CESA_VERSION < 2) */ - - /* Free request queue */ - if(pCesaReqFirst != NULL) - { - mvOsFree(pCesaReqFirst); - pCesaReqFirst = pCesaReqLast = NULL; - pCesaReqEmpty = pCesaReqProcess = NULL; - cesaQueueDepth = cesaReqResources = 0; - } - /* Free SA database */ - if(pCesaSAD != NULL) - { - mvOsFree(pCesaSAD); - pCesaSAD = NULL; - cesaMaxSA = 0; - } - MV_REG_WRITE( MV_CESA_CFG_REG, 0); - MV_REG_WRITE( MV_CESA_ISR_CAUSE_REG, 0); - MV_REG_WRITE( MV_CESA_ISR_MASK_REG, 0); - - return MV_OK; -} - -/******************************************************************************* -* mvCesaCryptoIvSet - Set IV value for Crypto algorithm working in CBC mode -* -* DESCRIPTION: -* This function set IV value using by Crypto algorithms in CBC mode. -* Each channel has its own IV value. -* This function gets IV value from the caller. If no IV value passed from -* the caller or only part of IV passed, the function will init the rest part -* of IV value (or the whole IV) by random value. -* -* INPUT: -* MV_U8* pIV - Pointer to IV value supplied by user. If pIV==NULL -* the function will generate random IV value. -* int ivSize - size (in bytes) of IV provided by user. If ivSize is -* smaller than maximum IV size, the function will complete -* IV by random value. -* -* RETURN: -* MV_OK - Success -* Other - Fail -* -*******************************************************************************/ -MV_STATUS mvCesaCryptoIvSet(MV_U8* pIV, int ivSize) -{ - MV_U8* pSramIV; -#if defined(MV646xx) - mvOsPrintf("mvCesaCryptoIvSet: ERR. shouldn't use this call on MV64660\n"); -#endif - pSramIV = cesaSramVirtPtr->cryptoIV; - if(ivSize > MV_CESA_MAX_IV_LENGTH) - { - mvOsPrintf("mvCesaCryptoIvSet: ivSize (%d) is too large\n", ivSize); - ivSize = MV_CESA_MAX_IV_LENGTH; - } - if(pIV != NULL) - { - memcpy(pSramIV, pIV, ivSize); - ivSize = MV_CESA_MAX_IV_LENGTH - ivSize; - pSramIV += ivSize; - } - - while(ivSize > 0) - { - int size, mv_random = mvOsRand(); - - size = MV_MIN(ivSize, sizeof(mv_random)); - memcpy(pSramIV, (void*)&mv_random, size); - - pSramIV += size; - ivSize -= size; - } -/* - mvOsCacheFlush(NULL, cesaSramVirtPtr->cryptoIV, - MV_CESA_MAX_IV_LENGTH); - mvOsCacheInvalidate(NULL, cesaSramVirtPtr->cryptoIV, - MV_CESA_MAX_IV_LENGTH); -*/ - return MV_OK; -} - -/******************************************************************************* -* mvCesaSessionOpen - Open new uni-directional crypto session -* -* DESCRIPTION: -* This function open new session. -* -* INPUT: -* MV_CESA_OPEN_SESSION *pSession - pointer to new session input parameters -* -* OUTPUT: -* short *pSid - session ID, should be used for all future -* requests over this session. -* -* RETURN: -* MV_OK - Session opend successfully. -* MV_FULL - All sessions are in use, no free place in -* SA database. -* MV_BAD_PARAM - One of session input parameters is invalid. -* -*******************************************************************************/ -MV_STATUS mvCesaSessionOpen(MV_CESA_OPEN_SESSION *pSession, short* pSid) -{ - short sid; - MV_U32 config = 0; - int digestSize; - - cesaStats.openedCount++; - - /* Find free entry in SAD */ - for(sid=0; sidoperation >= MV_CESA_MAX_OPERATION) - { - mvOsPrintf("mvCesaSessionOpen: Unexpected operation %d\n", - pSession->operation); - return MV_BAD_PARAM; - } - config |= (pSession->operation << MV_CESA_OPERATION_OFFSET); - - if( (pSession->direction != MV_CESA_DIR_ENCODE) && - (pSession->direction != MV_CESA_DIR_DECODE) ) - { - mvOsPrintf("mvCesaSessionOpen: Unexpected direction %d\n", - pSession->direction); - return MV_BAD_PARAM; - } - config |= (pSession->direction << MV_CESA_DIRECTION_BIT); - /* Clear SA entry */ - /* memset(&pCesaSAD[sid], 0, sizeof(pCesaSAD[sid])); */ - - /* Check AUTH parameters and update SA entry */ - if(pSession->operation != MV_CESA_CRYPTO_ONLY) - { - /* For HMAC (MD5 and SHA1) - Maximum Key size is 64 bytes */ - if( (pSession->macMode == MV_CESA_MAC_HMAC_MD5) || - (pSession->macMode == MV_CESA_MAC_HMAC_SHA1) ) - { - if(pSession->macKeyLength > MV_CESA_MAX_MAC_KEY_LENGTH) - { - mvOsPrintf("mvCesaSessionOpen: macKeyLength %d is too large\n", - pSession->macKeyLength); - return MV_BAD_PARAM; - } - mvCesaHmacIvGet(pSession->macMode, pSession->macKey, pSession->macKeyLength, - pCesaSAD[sid].pSramSA->macInnerIV, - pCesaSAD[sid].pSramSA->macOuterIV); - pCesaSAD[sid].macKeyLength = pSession->macKeyLength; - } - switch(pSession->macMode) - { - case MV_CESA_MAC_MD5: - case MV_CESA_MAC_HMAC_MD5: - digestSize = MV_CESA_MD5_DIGEST_SIZE; - break; - - case MV_CESA_MAC_SHA1: - case MV_CESA_MAC_HMAC_SHA1: - digestSize = MV_CESA_SHA1_DIGEST_SIZE; - break; - - default: - mvOsPrintf("mvCesaSessionOpen: Unexpected macMode %d\n", - pSession->macMode); - return MV_BAD_PARAM; - } - config |= (pSession->macMode << MV_CESA_MAC_MODE_OFFSET); - - /* Supported digest sizes: MD5 - 16 bytes (128 bits), */ - /* SHA1 - 20 bytes (160 bits) or 12 bytes (96 bits) for both */ - if( (pSession->digestSize != digestSize) && (pSession->digestSize != 12)) - { - mvOsPrintf("mvCesaSessionOpen: Unexpected digest size %d\n", - pSession->digestSize); - mvOsPrintf("\t Valid values [bytes]: MD5-16, SHA1-20, Both-12\n"); - return MV_BAD_PARAM; - } - pCesaSAD[sid].digestSize = pSession->digestSize; - - if(pCesaSAD[sid].digestSize == 12) - { - /* Set MV_CESA_MAC_DIGEST_SIZE_BIT if digest size is 96 bits */ - config |= (MV_CESA_MAC_DIGEST_96B << MV_CESA_MAC_DIGEST_SIZE_BIT); - } - } - - /* Check CRYPTO parameters and update SA entry */ - if(pSession->operation != MV_CESA_MAC_ONLY) - { - switch(pSession->cryptoAlgorithm) - { - case MV_CESA_CRYPTO_DES: - pCesaSAD[sid].cryptoKeyLength = MV_CESA_DES_KEY_LENGTH; - pCesaSAD[sid].cryptoBlockSize = MV_CESA_DES_BLOCK_SIZE; - break; - - case MV_CESA_CRYPTO_3DES: - pCesaSAD[sid].cryptoKeyLength = MV_CESA_3DES_KEY_LENGTH; - pCesaSAD[sid].cryptoBlockSize = MV_CESA_DES_BLOCK_SIZE; - /* Only EDE mode is supported */ - config |= (MV_CESA_CRYPTO_3DES_EDE << - MV_CESA_CRYPTO_3DES_MODE_BIT); - break; - - case MV_CESA_CRYPTO_AES: - switch(pSession->cryptoKeyLength) - { - case 16: - pCesaSAD[sid].cryptoKeyLength = MV_CESA_AES_128_KEY_LENGTH; - config |= (MV_CESA_CRYPTO_AES_KEY_128 << - MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET); - break; - - case 24: - pCesaSAD[sid].cryptoKeyLength = MV_CESA_AES_192_KEY_LENGTH; - config |= (MV_CESA_CRYPTO_AES_KEY_192 << - MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET); - break; - - case 32: - default: - pCesaSAD[sid].cryptoKeyLength = MV_CESA_AES_256_KEY_LENGTH; - config |= (MV_CESA_CRYPTO_AES_KEY_256 << - MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET); - break; - } - pCesaSAD[sid].cryptoBlockSize = MV_CESA_AES_BLOCK_SIZE; - break; - - default: - mvOsPrintf("mvCesaSessionOpen: Unexpected cryptoAlgorithm %d\n", - pSession->cryptoAlgorithm); - return MV_BAD_PARAM; - } - config |= (pSession->cryptoAlgorithm << MV_CESA_CRYPTO_ALG_OFFSET); - - if(pSession->cryptoKeyLength != pCesaSAD[sid].cryptoKeyLength) - { - mvOsPrintf("cesaSessionOpen: Wrong CryptoKeySize %d != %d\n", - pSession->cryptoKeyLength, pCesaSAD[sid].cryptoKeyLength); - return MV_BAD_PARAM; - } - - /* Copy Crypto key */ - if( (pSession->cryptoAlgorithm == MV_CESA_CRYPTO_AES) && - (pSession->direction == MV_CESA_DIR_DECODE)) - { - /* Crypto Key for AES decode is computed from original key material */ - /* and depend on cryptoKeyLength (128/192/256 bits) */ - aesMakeKey(pCesaSAD[sid].pSramSA->cryptoKey, pSession->cryptoKey, - pSession->cryptoKeyLength*8, MV_CESA_AES_BLOCK_SIZE*8); - } - else - { - /*panic("mvCesaSessionOpen2");*/ - memcpy(pCesaSAD[sid].pSramSA->cryptoKey, pSession->cryptoKey, - pCesaSAD[sid].cryptoKeyLength); - - } - - switch(pSession->cryptoMode) - { - case MV_CESA_CRYPTO_ECB: - pCesaSAD[sid].cryptoIvSize = 0; - break; - - case MV_CESA_CRYPTO_CBC: - pCesaSAD[sid].cryptoIvSize = pCesaSAD[sid].cryptoBlockSize; - break; - - case MV_CESA_CRYPTO_CTR: - /* Supported only for AES algorithm */ - if(pSession->cryptoAlgorithm != MV_CESA_CRYPTO_AES) - { - mvOsPrintf("mvCesaSessionOpen: CRYPTO CTR mode supported for AES only\n"); - return MV_BAD_PARAM; - } - pCesaSAD[sid].cryptoIvSize = 0; - pCesaSAD[sid].ctrMode = 1; - /* Replace to ECB mode for HW */ - pSession->cryptoMode = MV_CESA_CRYPTO_ECB; - break; - - default: - mvOsPrintf("mvCesaSessionOpen: Unexpected cryptoMode %d\n", - pSession->cryptoMode); - return MV_BAD_PARAM; - } - - config |= (pSession->cryptoMode << MV_CESA_CRYPTO_MODE_BIT); - } - pCesaSAD[sid].config = config; - - mvOsCacheFlush(NULL, pCesaSAD[sid].pSramSA, sizeof(MV_CESA_SRAM_SA)); - if(pSid != NULL) - *pSid = sid; - - pCesaSAD[sid].valid = 1; - return MV_OK; -} - -/******************************************************************************* -* mvCesaSessionClose - Close active crypto session -* -* DESCRIPTION: -* This function closes existing session -* -* INPUT: -* short sid - Unique identifier of the session to be closed -* -* RETURN: -* MV_OK - Session closed successfully. -* MV_BAD_PARAM - Session identifier is out of valid range. -* MV_NOT_FOUND - There is no active session with such ID. -* -*******************************************************************************/ -MV_STATUS mvCesaSessionClose(short sid) -{ - cesaStats.closedCount++; - - if(sid >= cesaMaxSA) - { - mvOsPrintf("CESA Error: sid (%d) is too big\n", sid); - return MV_BAD_PARAM; - } - if(pCesaSAD[sid].valid == 0) - { - mvOsPrintf("CESA Warning: Session (sid=%d) is invalid\n", sid); - return MV_NOT_FOUND; - } - if(cesaLastSid == sid) - cesaLastSid = -1; - - pCesaSAD[sid].valid = 0; - return MV_OK; -} - -/******************************************************************************* -* mvCesaAction - Perform crypto operation -* -* DESCRIPTION: -* This function set new CESA request FIFO queue for further HW processing. -* The function checks request parameters before set new request to the queue. -* If one of the CESA channels is ready for processing the request will be -* passed to HW. When request processing is finished the CESA interrupt will -* be generated by HW. The caller should call mvCesaReadyGet() function to -* complete request processing and get result. -* -* INPUT: -* MV_CESA_COMMAND *pCmd - pointer to new CESA request. -* It includes pointers to Source and Destination -* buffers, session identifier get from -* mvCesaSessionOpen() function, pointer to caller -* private data and all needed crypto parameters. -* -* RETURN: -* MV_OK - request successfully added to request queue -* and will be processed. -* MV_NO_MORE - request successfully added to request queue and will -* be processed, but request queue became Full and next -* request will not be accepted. -* MV_NO_RESOURCE - request queue is FULL and the request can not -* be processed. -* MV_OUT_OF_CPU_MEM - memory allocation needed for request processing is -* failed. Request can not be processed. -* MV_NOT_ALLOWED - This mixed request (CRYPTO+MAC) can not be processed -* as one request and should be splitted for two requests: -* CRYPTO_ONLY and MAC_ONLY. -* MV_BAD_PARAM - One of the request parameters is out of valid range. -* The request can not be processed. -* -*******************************************************************************/ -MV_STATUS mvCesaAction (MV_CESA_COMMAND *pCmd) -{ - MV_STATUS status; - MV_CESA_REQ* pReq = pCesaReqEmpty; - int sid = pCmd->sessionId; - MV_CESA_SA* pSA = &pCesaSAD[sid]; -#if (MV_CESA_VERSION >= 3) - MV_CESA_REQ* pFromReq; - MV_CESA_REQ* pToReq; -#endif - cesaStats.reqCount++; - - /* Check that the request queue is not FULL */ - if(cesaReqResources == 0) - return MV_NO_RESOURCE; - - if( (sid >= cesaMaxSA) || (!pSA->valid) ) - { - mvOsPrintf("CESA Action Error: Session sid=%d is INVALID\n", sid); - return MV_BAD_PARAM; - } - pSA->count++; - - if(pSA->ctrMode) - { - /* AES in CTR mode can't be mixed with Authentication */ - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - mvOsPrintf("mvCesaAction : CRYPTO CTR mode can't be mixed with AUTH\n"); - return MV_NOT_ALLOWED; - } - /* All other request parameters should not be checked because key stream */ - /* (not user data) processed by AES HW engine */ - pReq->pOrgCmd = pCmd; - /* Allocate temporary pCmd structure for Key stream */ - pCmd = mvCesaCtrModeInit(); - if(pCmd == NULL) - return MV_OUT_OF_CPU_MEM; - - /* Prepare Key stream */ - mvCesaCtrModePrepare(pCmd, pReq->pOrgCmd); - pReq->fixOffset = 0; - } - else - { - /* Check request parameters and calculae fixOffset */ - status = mvCesaParamCheck(pSA, pCmd, &pReq->fixOffset); - if(status != MV_OK) - { - return status; - } - } - pReq->pCmd = pCmd; - - /* Check if the packet need fragmentation */ - if(pCmd->pSrc->mbufSize <= sizeof(cesaSramVirtPtr->buf) ) - { - /* request size is smaller than single buffer size */ - pReq->fragMode = MV_CESA_FRAG_NONE; - - /* Prepare NOT fragmented packets */ - status = mvCesaReqProcess(pReq); - if(status != MV_OK) - { - mvOsPrintf("CesaReady: ReqProcess error: pReq=%p, status=0x%x\n", - pReq, status); - } -#if (MV_CESA_VERSION >= 3) - pReq->frags.numFrag = 1; -#endif - } - else - { - MV_U8 frag = 0; - - /* request size is larger than buffer size - needs fragmentation */ - - /* Check restrictions for processing fragmented packets */ - status = mvCesaFragParamCheck(pSA, pCmd); - if(status != MV_OK) - return status; - - pReq->fragMode = MV_CESA_FRAG_FIRST; - pReq->frags.nextFrag = 0; - - /* Prepare Process Fragmented packets */ - while(pReq->fragMode != MV_CESA_FRAG_LAST) - { - if(frag >= MV_CESA_MAX_REQ_FRAGS) - { - mvOsPrintf("mvCesaAction Error: Too large request frag=%d\n", frag); - return MV_OUT_OF_CPU_MEM; - } - status = mvCesaFragReqProcess(pReq, frag); - if(status == MV_OK) { -#if (MV_CESA_VERSION >= 3) - if(frag) { - pReq->dma[frag-1].pDmaLast->phyNextDescPtr = - MV_32BIT_LE(mvCesaVirtToPhys(&pReq->dmaDescBuf, pReq->dma[frag].pDmaFirst)); - mvOsCacheFlush(NULL, pReq->dma[frag-1].pDmaLast, sizeof(MV_DMA_DESC)); - } -#endif - frag++; - } - } - pReq->frags.numFrag = frag; -#if (MV_CESA_VERSION >= 3) - if(chainReqNum) { - chainReqNum += pReq->frags.numFrag; - if(chainReqNum >= MAX_CESA_CHAIN_LENGTH) - chainReqNum = MAX_CESA_CHAIN_LENGTH; - } -#endif - } - - pReq->state = MV_CESA_PENDING; - - pCesaReqEmpty = MV_CESA_REQ_NEXT_PTR(pReq); - cesaReqResources -= 1; - -/* #ifdef CESA_DEBUG */ - if( (cesaQueueDepth - cesaReqResources) > cesaStats.maxReqCount) - cesaStats.maxReqCount = (cesaQueueDepth - cesaReqResources); -/* #endif CESA_DEBUG */ - - cesaLastSid = sid; - -#if (MV_CESA_VERSION >= 3) - /* Are we within chain bounderies and follows the first request ? */ - if((chainReqNum > 0) && (chainReqNum < MAX_CESA_CHAIN_LENGTH)) { - if(chainIndex) { - pFromReq = MV_CESA_REQ_PREV_PTR(pReq); - pToReq = pReq; - pReq->state = MV_CESA_CHAIN; - /* assume concatenating is possible */ - pFromReq->dma[pFromReq->frags.numFrag-1].pDmaLast->phyNextDescPtr = - MV_32BIT_LE(mvCesaVirtToPhys(&pToReq->dmaDescBuf, pToReq->dma[0].pDmaFirst)); - mvOsCacheFlush(NULL, pFromReq->dma[pFromReq->frags.numFrag-1].pDmaLast, sizeof(MV_DMA_DESC)); - - /* align active & next pointers */ - if(pNextActiveChain->state != MV_CESA_PENDING) - pEndCurrChain = pNextActiveChain = MV_CESA_REQ_NEXT_PTR(pReq); - } - else { /* we have only one chain, start new one */ - chainReqNum = 0; - chainIndex++; - /* align active & next pointers */ - if(pNextActiveChain->state != MV_CESA_PENDING) - pEndCurrChain = pNextActiveChain = pReq; - } - } - else { - /* In case we concatenate full chain */ - if(chainReqNum == MAX_CESA_CHAIN_LENGTH) { - chainIndex++; - if(pNextActiveChain->state != MV_CESA_PENDING) - pEndCurrChain = pNextActiveChain = pReq; - chainReqNum = 0; - } - - pReq = pCesaReqProcess; - if(pReq->state == MV_CESA_PENDING) { - pNextActiveChain = pReq; - pEndCurrChain = MV_CESA_REQ_NEXT_PTR(pReq); - /* Start Process new request */ - mvCesaReqProcessStart(pReq); - } - } - - chainReqNum++; - - if((chainIndex < MAX_CESA_CHAIN_LENGTH) && (chainReqNum > cesaStats.maxChainUsage)) - cesaStats.maxChainUsage = chainReqNum; - -#else - - /* Check status of CESA channels and process requests if possible */ - pReq = pCesaReqProcess; - if(pReq->state == MV_CESA_PENDING) - { - /* Start Process new request */ - mvCesaReqProcessStart(pReq); - } -#endif - /* If request queue became FULL - return MV_NO_MORE */ - if(cesaReqResources == 0) - return MV_NO_MORE; - - return MV_OK; - -} - -/******************************************************************************* -* mvCesaReadyGet - Get crypto request that processing is finished -* -* DESCRIPTION: -* This function complete request processing and return ready request to -* caller. To don't miss interrupts the caller must call this function -* while MV_OK or MV_TERMINATE values returned. -* -* INPUT: -* MV_U32 chanMap - map of CESA channels finished thier job -* accordingly with CESA Cause register. -* MV_CESA_RESULT* pResult - pointer to structure contains information -* about ready request. It includes pointer to -* user private structure "pReqPrv", session identifier -* for this request "sessionId" and return code. -* Return code set to MV_FAIL if calculated digest value -* on decode direction is different than digest value -* in the packet. -* -* RETURN: -* MV_OK - Success, ready request is returned. -* MV_NOT_READY - Next request is not ready yet. New interrupt will -* be generated for futher request processing. -* MV_EMPTY - There is no more request for processing. -* MV_BUSY - Fragmented request is not ready yet. -* MV_TERMINATE - Call this function once more to complete processing -* of fragmented request. -* -*******************************************************************************/ -MV_STATUS mvCesaReadyGet(MV_CESA_RESULT* pResult) -{ - MV_STATUS status, readyStatus = MV_NOT_READY; - MV_U32 statusReg; - MV_CESA_REQ* pReq; - MV_CESA_SA* pSA; - -#if (MV_CESA_VERSION >= 3) - if(isFirstReq == MV_TRUE) { - if(chainIndex == 0) - chainReqNum = 0; - - isFirstReq = MV_FALSE; - - if(pNextActiveChain->state == MV_CESA_PENDING) { - /* Start request Process */ - mvCesaReqProcessStart(pNextActiveChain); - pEndCurrChain = pNextActiveChain; - if(chainIndex > 0) - chainIndex--; - /* Update pNextActiveChain to next chain head */ - while(pNextActiveChain->state == MV_CESA_CHAIN) - pNextActiveChain = MV_CESA_REQ_NEXT_PTR(pNextActiveChain); - } - } - - /* Check if there are more processed requests - can we remove pEndCurrChain ??? */ - if(pCesaReqProcess == pEndCurrChain) { - isFirstReq = MV_TRUE; - pEndCurrChain = pNextActiveChain; -#else - if(pCesaReqProcess->state != MV_CESA_PROCESS) { -#endif - return MV_EMPTY; - } - -#ifdef CESA_DEBUG - statusReg = MV_REG_READ(MV_CESA_STATUS_REG); - if( statusReg & MV_CESA_STATUS_ACTIVE_MASK ) - { - mvOsPrintf("mvCesaReadyGet: Not Ready, Status = 0x%x\n", statusReg); - cesaStats.notReadyCount++; - return MV_NOT_READY; - } -#endif /* CESA_DEBUG */ - - cesaStats.readyCount++; - - pReq = pCesaReqProcess; - pSA = &pCesaSAD[pReq->pCmd->sessionId]; - - pResult->retCode = MV_OK; - if(pReq->fragMode != MV_CESA_FRAG_NONE) - { - MV_U8* pNewDigest; - int frag; -#if (MV_CESA_VERSION >= 3) - pReq->frags.nextFrag = 1; - while(pReq->frags.nextFrag <= pReq->frags.numFrag) { -#endif - frag = (pReq->frags.nextFrag - 1); - - /* Restore DMA descriptor list */ - pReq->dma[frag].pDmaLast->phyNextDescPtr = - MV_32BIT_LE(mvCesaVirtToPhys(&pReq->dmaDescBuf, &pReq->dma[frag].pDmaLast[1])); - pReq->dma[frag].pDmaLast = NULL; - - /* Special processing for finished fragmented request */ - if(pReq->frags.nextFrag >= pReq->frags.numFrag) - { - mvCesaMbufCacheUnmap(pReq->pCmd->pDst, 0, pReq->pCmd->pDst->mbufSize); - - /* Fragmented packet is ready */ - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - int macDataSize = pReq->pCmd->macLength - pReq->frags.macSize; - - if(macDataSize != 0) - { - /* Calculate all other blocks by SW */ - mvCesaFragAuthComplete(pReq, pSA, macDataSize); - } - - /* Copy new digest from SRAM to the Destination buffer */ - pNewDigest = cesaSramVirtPtr->buf + pReq->frags.newDigestOffset; - status = mvCesaCopyToMbuf(pNewDigest, pReq->pCmd->pDst, - pReq->pCmd->digestOffset, pSA->digestSize); - - /* For decryption: Compare new digest value with original one */ - if((pSA->config & MV_CESA_DIRECTION_MASK) == - (MV_CESA_DIR_DECODE << MV_CESA_DIRECTION_BIT)) - { - if( memcmp(pNewDigest, pReq->frags.orgDigest, pSA->digestSize) != 0) - { -/* - mvOsPrintf("Digest error: chan=%d, newDigest=%p, orgDigest=%p, status = 0x%x\n", - chan, pNewDigest, pReq->frags.orgDigest, MV_REG_READ(MV_CESA_STATUS_REG)); -*/ - /* Signiture verification is failed */ - pResult->retCode = MV_FAIL; - } - } - } - readyStatus = MV_OK; - } -#if (MV_CESA_VERSION >= 3) - pReq->frags.nextFrag++; - } -#endif - } - else - { - mvCesaMbufCacheUnmap(pReq->pCmd->pDst, 0, pReq->pCmd->pDst->mbufSize); - - /* Restore DMA descriptor list */ - pReq->dma[0].pDmaLast->phyNextDescPtr = - MV_32BIT_LE(mvCesaVirtToPhys(&pReq->dmaDescBuf, &pReq->dma[0].pDmaLast[1])); - pReq->dma[0].pDmaLast = NULL; - if( ((pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) && - ((pSA->config & MV_CESA_DIRECTION_MASK) == - (MV_CESA_DIR_DECODE << MV_CESA_DIRECTION_BIT)) ) - { - /* For AUTH on decode : Check Digest result in Status register */ - statusReg = MV_REG_READ(MV_CESA_STATUS_REG); - if(statusReg & MV_CESA_STATUS_DIGEST_ERR_MASK) - { -/* - mvOsPrintf("Digest error: chan=%d, status = 0x%x\n", - chan, statusReg); -*/ - /* Signiture verification is failed */ - pResult->retCode = MV_FAIL; - } - } - readyStatus = MV_OK; - } - - if(readyStatus == MV_OK) - { - /* If Request is ready - Prepare pResult structure */ - pResult->pReqPrv = pReq->pCmd->pReqPrv; - pResult->sessionId = pReq->pCmd->sessionId; - - pReq->state = MV_CESA_IDLE; - pCesaReqProcess = MV_CESA_REQ_NEXT_PTR(pReq); - cesaReqResources++; - - if(pSA->ctrMode) - { - /* For AES CTR mode - complete processing and free allocated resources */ - mvCesaCtrModeComplete(pReq->pOrgCmd, pReq->pCmd); - mvCesaCtrModeFinish(pReq->pCmd); - pReq->pOrgCmd = NULL; - } - } - -#if (MV_CESA_VERSION < 3) - if(pCesaReqProcess->state == MV_CESA_PROCESS) - { - /* Start request Process */ - mvCesaReqProcessStart(pCesaReqProcess); - if(readyStatus == MV_NOT_READY) - readyStatus = MV_BUSY; - } - else if(pCesaReqProcess != pCesaReqEmpty) - { - /* Start process new request from the queue */ - mvCesaReqProcessStart(pCesaReqProcess); - } -#endif - return readyStatus; -} - -/***************** Functions to work with CESA_MBUF structure ******************/ - -/******************************************************************************* -* mvCesaMbufOffset - Locate offset in the Mbuf structure -* -* DESCRIPTION: -* This function locates offset inside Multi-Bufeer structure. -* It get fragment number and place in the fragment where the offset -* is located. -* -* -* INPUT: -* MV_CESA_MBUF* pMbuf - Pointer to multi-buffer structure -* int offset - Offset from the beginning of the data presented by -* the Mbuf structure. -* -* OUTPUT: -* int* pBufOffset - Offset from the beginning of the fragment where -* the offset is located. -* -* RETURN: -* int - Number of fragment, where the offset is located\ -* -*******************************************************************************/ -int mvCesaMbufOffset(MV_CESA_MBUF* pMbuf, int offset, int* pBufOffset) -{ - int frag = 0; - - while(offset > 0) - { - if(frag >= pMbuf->numFrags) - { - mvOsPrintf("mvCesaMbufOffset: Error: frag (%d) > numFrags (%d)\n", - frag, pMbuf->numFrags); - return MV_INVALID; - } - if(offset < pMbuf->pFrags[frag].bufSize) - { - break; - } - offset -= pMbuf->pFrags[frag].bufSize; - frag++; - } - if(pBufOffset != NULL) - *pBufOffset = offset; - - return frag; -} - -/******************************************************************************* -* mvCesaCopyFromMbuf - Copy data from the Mbuf structure to continuous buffer -* -* DESCRIPTION: -* -* -* INPUT: -* MV_U8* pDstBuf - Pointer to continuous buffer, where data is -* copied to. -* MV_CESA_MBUF* pSrcMbuf - Pointer to multi-buffer structure where data is -* copied from. -* int offset - Offset in the Mbuf structure where located first -* byte of data should be copied. -* int size - Size of data should be copied -* -* RETURN: -* MV_OK - Success, all data is copied successfully. -* MV_OUT_OF_RANGE - Failed, offset is out of Multi-buffer data range. -* No data is copied. -* MV_EMPTY - Multi-buffer structure has not enough data to copy -* Data from the offset to end of Mbuf data is copied. -* -*******************************************************************************/ -MV_STATUS mvCesaCopyFromMbuf(MV_U8* pDstBuf, MV_CESA_MBUF* pSrcMbuf, - int offset, int size) -{ - int frag, fragOffset, bufSize; - MV_U8* pBuf; - - if(size == 0) - return MV_OK; - - frag = mvCesaMbufOffset(pSrcMbuf, offset, &fragOffset); - if(frag == MV_INVALID) - { - mvOsPrintf("CESA Mbuf Error: offset (%d) out of range\n", offset); - return MV_OUT_OF_RANGE; - } - - bufSize = pSrcMbuf->pFrags[frag].bufSize - fragOffset; - pBuf = pSrcMbuf->pFrags[frag].bufVirtPtr + fragOffset; - while(MV_TRUE) - { - if(size <= bufSize) - { - memcpy(pDstBuf, pBuf, size); - return MV_OK; - } - memcpy(pDstBuf, pBuf, bufSize); - size -= bufSize; - frag++; - pDstBuf += bufSize; - if(frag >= pSrcMbuf->numFrags) - break; - - bufSize = pSrcMbuf->pFrags[frag].bufSize; - pBuf = pSrcMbuf->pFrags[frag].bufVirtPtr; - } - mvOsPrintf("mvCesaCopyFromMbuf: Mbuf is EMPTY - %d bytes isn't copied\n", - size); - return MV_EMPTY; -} - -/******************************************************************************* -* mvCesaCopyToMbuf - Copy data from continuous buffer to the Mbuf structure -* -* DESCRIPTION: -* -* -* INPUT: -* MV_U8* pSrcBuf - Pointer to continuous buffer, where data is -* copied from. -* MV_CESA_MBUF* pDstMbuf - Pointer to multi-buffer structure where data is -* copied to. -* int offset - Offset in the Mbuf structure where located first -* byte of data should be copied. -* int size - Size of data should be copied -* -* RETURN: -* MV_OK - Success, all data is copied successfully. -* MV_OUT_OF_RANGE - Failed, offset is out of Multi-buffer data range. -* No data is copied. -* MV_FULL - Multi-buffer structure has not enough place to copy -* all data. Data from the offset to end of Mbuf data -* is copied. -* -*******************************************************************************/ -MV_STATUS mvCesaCopyToMbuf(MV_U8* pSrcBuf, MV_CESA_MBUF* pDstMbuf, - int offset, int size) -{ - int frag, fragOffset, bufSize; - MV_U8* pBuf; - - if(size == 0) - return MV_OK; - - frag = mvCesaMbufOffset(pDstMbuf, offset, &fragOffset); - if(frag == MV_INVALID) - { - mvOsPrintf("CESA Mbuf Error: offset (%d) out of range\n", offset); - return MV_OUT_OF_RANGE; - } - - bufSize = pDstMbuf->pFrags[frag].bufSize - fragOffset; - pBuf = pDstMbuf->pFrags[frag].bufVirtPtr + fragOffset; - while(MV_TRUE) - { - if(size <= bufSize) - { - memcpy(pBuf, pSrcBuf, size); - return MV_OK; - } - memcpy(pBuf, pSrcBuf, bufSize); - size -= bufSize; - frag++; - pSrcBuf += bufSize; - if(frag >= pDstMbuf->numFrags) - break; - - bufSize = pDstMbuf->pFrags[frag].bufSize; - pBuf = pDstMbuf->pFrags[frag].bufVirtPtr; - } - mvOsPrintf("mvCesaCopyToMbuf: Mbuf is FULL - %d bytes isn't copied\n", - size); - return MV_FULL; -} - -/******************************************************************************* -* mvCesaMbufCopy - Copy data from one Mbuf structure to the other Mbuf structure -* -* DESCRIPTION: -* -* -* INPUT: -* -* MV_CESA_MBUF* pDstMbuf - Pointer to multi-buffer structure where data is -* copied to. -* int dstMbufOffset - Offset in the dstMbuf structure where first byte -* of data should be copied to. -* MV_CESA_MBUF* pSrcMbuf - Pointer to multi-buffer structure where data is -* copied from. -* int srcMbufOffset - Offset in the srcMbuf structure where first byte -* of data should be copied from. -* int size - Size of data should be copied -* -* RETURN: -* MV_OK - Success, all data is copied successfully. -* MV_OUT_OF_RANGE - Failed, srcMbufOffset or dstMbufOffset is out of -* srcMbuf or dstMbuf structure correspondently. -* No data is copied. -* MV_BAD_SIZE - srcMbuf or dstMbuf structure is too small to copy -* all data. Partial data is copied -* -*******************************************************************************/ -MV_STATUS mvCesaMbufCopy(MV_CESA_MBUF* pMbufDst, int dstMbufOffset, - MV_CESA_MBUF* pMbufSrc, int srcMbufOffset, int size) -{ - int srcFrag, dstFrag, srcSize, dstSize, srcOffset, dstOffset; - int copySize; - MV_U8 *pSrc, *pDst; - - if(size == 0) - return MV_OK; - - srcFrag = mvCesaMbufOffset(pMbufSrc, srcMbufOffset, &srcOffset); - if(srcFrag == MV_INVALID) - { - mvOsPrintf("CESA srcMbuf Error: offset (%d) out of range\n", srcMbufOffset); - return MV_OUT_OF_RANGE; - } - pSrc = pMbufSrc->pFrags[srcFrag].bufVirtPtr + srcOffset; - srcSize = pMbufSrc->pFrags[srcFrag].bufSize - srcOffset; - - dstFrag = mvCesaMbufOffset(pMbufDst, dstMbufOffset, &dstOffset); - if(dstFrag == MV_INVALID) - { - mvOsPrintf("CESA dstMbuf Error: offset (%d) out of range\n", dstMbufOffset); - return MV_OUT_OF_RANGE; - } - pDst = pMbufDst->pFrags[dstFrag].bufVirtPtr + dstOffset; - dstSize = pMbufDst->pFrags[dstFrag].bufSize - dstOffset; - - while(size > 0) - { - copySize = MV_MIN(srcSize, dstSize); - if(size <= copySize) - { - memcpy(pDst, pSrc, size); - return MV_OK; - } - memcpy(pDst, pSrc, copySize); - size -= copySize; - srcSize -= copySize; - dstSize -= copySize; - - if(srcSize == 0) - { - srcFrag++; - if(srcFrag >= pMbufSrc->numFrags) - break; - - pSrc = pMbufSrc->pFrags[srcFrag].bufVirtPtr; - srcSize = pMbufSrc->pFrags[srcFrag].bufSize; - } - - if(dstSize == 0) - { - dstFrag++; - if(dstFrag >= pMbufDst->numFrags) - break; - - pDst = pMbufDst->pFrags[dstFrag].bufVirtPtr; - dstSize = pMbufDst->pFrags[dstFrag].bufSize; - } - } - mvOsPrintf("mvCesaMbufCopy: BAD size - %d bytes isn't copied\n", - size); - - return MV_BAD_SIZE; -} - -static MV_STATUS mvCesaMbufCacheUnmap(MV_CESA_MBUF* pMbuf, int offset, int size) -{ - int frag, fragOffset, bufSize; - MV_U8* pBuf; - - if(size == 0) - return MV_OK; - - frag = mvCesaMbufOffset(pMbuf, offset, &fragOffset); - if(frag == MV_INVALID) - { - mvOsPrintf("CESA Mbuf Error: offset (%d) out of range\n", offset); - return MV_OUT_OF_RANGE; - } - - bufSize = pMbuf->pFrags[frag].bufSize - fragOffset; - pBuf = pMbuf->pFrags[frag].bufVirtPtr + fragOffset; - while(MV_TRUE) - { - if(size <= bufSize) - { - mvOsCacheUnmap(NULL, mvOsIoVirtToPhy(NULL, pBuf), size); - return MV_OK; - } - - mvOsCacheUnmap(NULL, mvOsIoVirtToPhy(NULL, pBuf), bufSize); - size -= bufSize; - frag++; - if(frag >= pMbuf->numFrags) - break; - - bufSize = pMbuf->pFrags[frag].bufSize; - pBuf = pMbuf->pFrags[frag].bufVirtPtr; - } - mvOsPrintf("%s: Mbuf is FULL - %d bytes isn't Unmapped\n", - __FUNCTION__, size); - return MV_FULL; -} - - -/*************************************** Local Functions ******************************/ - -/******************************************************************************* -* mvCesaFragReqProcess - Process fragmented request -* -* DESCRIPTION: -* This function processes a fragment of fragmented request (First, Middle or Last) -* -* -* INPUT: -* MV_CESA_REQ* pReq - Pointer to the request in the request queue. -* -* RETURN: -* MV_OK - The fragment is successfully passed to HW for processing. -* MV_TERMINATE - Means, that HW finished its work on this packet and no more -* interrupts will be generated for this request. -* Function mvCesaReadyGet() must be called to complete request -* processing and get request result. -* -*******************************************************************************/ -static MV_STATUS mvCesaFragReqProcess(MV_CESA_REQ* pReq, MV_U8 frag) -{ - int i, copySize, cryptoDataSize, macDataSize, sid; - int cryptoIvOffset, digestOffset; - MV_U32 config; - MV_CESA_COMMAND* pCmd = pReq->pCmd; - MV_CESA_SA* pSA; - MV_CESA_MBUF* pMbuf; - MV_DMA_DESC* pDmaDesc = pReq->dma[frag].pDmaFirst; - MV_U8* pSramBuf = cesaSramVirtPtr->buf; - int macTotalLen = 0; - int fixOffset, cryptoOffset, macOffset; - - cesaStats.fragCount++; - - sid = pReq->pCmd->sessionId; - - pSA = &pCesaSAD[sid]; - - cryptoIvOffset = digestOffset = 0; - i = macDataSize = 0; - cryptoDataSize = 0; - - /* First fragment processing */ - if(pReq->fragMode == MV_CESA_FRAG_FIRST) - { - /* pReq->frags monitors processing of fragmented request between fragments */ - pReq->frags.bufOffset = 0; - pReq->frags.cryptoSize = 0; - pReq->frags.macSize = 0; - - config = pSA->config | (MV_CESA_FRAG_FIRST << MV_CESA_FRAG_MODE_OFFSET); - - /* fixOffset can be not equal to zero only for FIRST fragment */ - fixOffset = pReq->fixOffset; - /* For FIRST fragment crypto and mac offsets are taken from pCmd */ - cryptoOffset = pCmd->cryptoOffset; - macOffset = pCmd->macOffset; - - copySize = sizeof(cesaSramVirtPtr->buf) - pReq->fixOffset; - - /* Find fragment size: Must meet all requirements for CRYPTO and MAC - * cryptoDataSize - size of data will be encrypted/decrypted in this fragment - * macDataSize - size of data will be signed/verified in this fragment - * copySize - size of data will be copied from srcMbuf to SRAM and - * back to dstMbuf for this fragment - */ - mvCesaFragSizeFind(pSA, pReq, cryptoOffset, macOffset, - ©Size, &cryptoDataSize, &macDataSize); - - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET)) - { - /* CryptoIV special processing */ - if( (pSA->config & MV_CESA_CRYPTO_MODE_MASK) == - (MV_CESA_CRYPTO_CBC << MV_CESA_CRYPTO_MODE_BIT) ) - { - /* In CBC mode for encode direction when IV from user */ - if( (pCmd->ivFromUser) && - ((pSA->config & MV_CESA_DIRECTION_MASK) == - (MV_CESA_DIR_ENCODE << MV_CESA_DIRECTION_BIT)) ) - { - - /* For Crypto Encode in CBC mode HW always takes IV from SRAM IVPointer, - * (not from IVBufPointer). So when ivFromUser==1, we should copy IV from user place - * in the buffer to SRAM IVPointer - */ - i += mvCesaDmaCopyPrepare(pCmd->pSrc, cesaSramVirtPtr->cryptoIV, &pDmaDesc[i], - MV_FALSE, pCmd->ivOffset, pSA->cryptoIvSize, pCmd->skipFlush); - } - - /* Special processing when IV is not located in the first fragment */ - if(pCmd->ivOffset > (copySize - pSA->cryptoIvSize)) - { - /* Prepare dummy place for cryptoIV in SRAM */ - cryptoIvOffset = cesaSramVirtPtr->tempCryptoIV - mvCesaSramAddrGet(); - - /* For Decryption: Copy IV value from pCmd->ivOffset to Special SRAM place */ - if((pSA->config & MV_CESA_DIRECTION_MASK) == - (MV_CESA_DIR_DECODE << MV_CESA_DIRECTION_BIT)) - { - i += mvCesaDmaCopyPrepare(pCmd->pSrc, cesaSramVirtPtr->tempCryptoIV, &pDmaDesc[i], - MV_FALSE, pCmd->ivOffset, pSA->cryptoIvSize, pCmd->skipFlush); - } - else - { - /* For Encryption when IV is NOT from User: */ - /* Copy IV from SRAM to buffer (pCmd->ivOffset) */ - if(pCmd->ivFromUser == 0) - { - /* copy IV value from cryptoIV to Buffer (pCmd->ivOffset) */ - i += mvCesaDmaCopyPrepare(pCmd->pSrc, cesaSramVirtPtr->cryptoIV, &pDmaDesc[i], - MV_TRUE, pCmd->ivOffset, pSA->cryptoIvSize, pCmd->skipFlush); - } - } - } - else - { - cryptoIvOffset = pCmd->ivOffset; - } - } - } - - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - /* MAC digest special processing on Decode direction */ - if((pSA->config & MV_CESA_DIRECTION_MASK) == - (MV_CESA_DIR_DECODE << MV_CESA_DIRECTION_BIT)) - { - /* Save digest from pCmd->digestOffset */ - mvCesaCopyFromMbuf(pReq->frags.orgDigest, - pCmd->pSrc, pCmd->digestOffset, pSA->digestSize); - - /* If pCmd->digestOffset is not located on the first */ - if(pCmd->digestOffset > (copySize - pSA->digestSize)) - { - MV_U8 digestZero[MV_CESA_MAX_DIGEST_SIZE]; - - /* Set zeros to pCmd->digestOffset (DRAM) */ - memset(digestZero, 0, MV_CESA_MAX_DIGEST_SIZE); - mvCesaCopyToMbuf(digestZero, pCmd->pSrc, pCmd->digestOffset, pSA->digestSize); - - /* Prepare dummy place for digest in SRAM */ - digestOffset = cesaSramVirtPtr->tempDigest - mvCesaSramAddrGet(); - } - else - { - digestOffset = pCmd->digestOffset; - } - } - } - /* Update SA in SRAM */ - if(cesaLastSid != sid) - { - mvCesaSramSaUpdate(sid, &pDmaDesc[i]); - i++; - } - - pReq->fragMode = MV_CESA_FRAG_MIDDLE; - } - else - { - /* Continue fragment */ - fixOffset = 0; - cryptoOffset = 0; - macOffset = 0; - if( (pCmd->pSrc->mbufSize - pReq->frags.bufOffset) <= sizeof(cesaSramVirtPtr->buf)) - { - /* Last fragment */ - config = pSA->config | (MV_CESA_FRAG_LAST << MV_CESA_FRAG_MODE_OFFSET); - pReq->fragMode = MV_CESA_FRAG_LAST; - copySize = pCmd->pSrc->mbufSize - pReq->frags.bufOffset; - - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - macDataSize = pCmd->macLength - pReq->frags.macSize; - - /* If pCmd->digestOffset is not located on last fragment */ - if(pCmd->digestOffset < pReq->frags.bufOffset) - { - /* Prepare dummy place for digest in SRAM */ - digestOffset = cesaSramVirtPtr->tempDigest - mvCesaSramAddrGet(); - } - else - { - digestOffset = pCmd->digestOffset - pReq->frags.bufOffset; - } - pReq->frags.newDigestOffset = digestOffset; - macTotalLen = pCmd->macLength; - - /* HW can't calculate the Digest correctly for fragmented packets - * in the following cases: - * - MV88F5182 || - * - MV88F5181L when total macLength more that 16 Kbytes || - * - total macLength more that 64 Kbytes - */ - if( (mvCtrlModelGet() == MV_5182_DEV_ID) || - ( (mvCtrlModelGet() == MV_5181_DEV_ID) && - (mvCtrlRevGet() >= MV_5181L_A0_REV) && - (pCmd->macLength >= (1 << 14)) ) ) - { - return MV_TERMINATE; - } - } - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - cryptoDataSize = pCmd->cryptoLength - pReq->frags.cryptoSize; - } - - /* cryptoIvOffset - don't care */ - } - else - { - /* WA for MV88F5182 SHA1 and MD5 fragmentation mode */ - if( (mvCtrlModelGet() == MV_5182_DEV_ID) && - (((pSA->config & MV_CESA_MAC_MODE_MASK) == - (MV_CESA_MAC_MD5 << MV_CESA_MAC_MODE_OFFSET)) || - ((pSA->config & MV_CESA_MAC_MODE_MASK) == - (MV_CESA_MAC_SHA1 << MV_CESA_MAC_MODE_OFFSET))) ) - { - pReq->frags.newDigestOffset = cesaSramVirtPtr->tempDigest - mvCesaSramAddrGet(); - pReq->fragMode = MV_CESA_FRAG_LAST; - - return MV_TERMINATE; - } - /* Middle fragment */ - config = pSA->config | (MV_CESA_FRAG_MIDDLE << MV_CESA_FRAG_MODE_OFFSET); - copySize = sizeof(cesaSramVirtPtr->buf); - /* digestOffset and cryptoIvOffset - don't care */ - - /* Find fragment size */ - mvCesaFragSizeFind(pSA, pReq, cryptoOffset, macOffset, - ©Size, &cryptoDataSize, &macDataSize); - } - } - /********* Prepare DMA descriptors to copy from pSrc to SRAM *********/ - pMbuf = pCmd->pSrc; - i += mvCesaDmaCopyPrepare(pMbuf, pSramBuf + fixOffset, &pDmaDesc[i], - MV_FALSE, pReq->frags.bufOffset, copySize, pCmd->skipFlush); - - /* Prepare CESA descriptor to copy from DRAM to SRAM by DMA */ - mvCesaSramDescrBuild(config, frag, - cryptoOffset + fixOffset, cryptoIvOffset + fixOffset, - cryptoDataSize, macOffset + fixOffset, - digestOffset + fixOffset, macDataSize, macTotalLen, - pReq, &pDmaDesc[i]); - i++; - - /* Add special descriptor Ownership for CPU */ - pDmaDesc[i].byteCnt = 0; - pDmaDesc[i].phySrcAdd = 0; - pDmaDesc[i].phyDestAdd = 0; - i++; - - /********* Prepare DMA descriptors to copy from SRAM to pDst *********/ - pMbuf = pCmd->pDst; - i += mvCesaDmaCopyPrepare(pMbuf, pSramBuf + fixOffset, &pDmaDesc[i], - MV_TRUE, pReq->frags.bufOffset, copySize, pCmd->skipFlush); - - /* Next field of Last DMA descriptor must be NULL */ - pDmaDesc[i-1].phyNextDescPtr = 0; - pReq->dma[frag].pDmaLast = &pDmaDesc[i-1]; - mvOsCacheFlush(NULL, pReq->dma[frag].pDmaFirst, - i*sizeof(MV_DMA_DESC)); - - /*mvCesaDebugDescriptor(&cesaSramVirtPtr->desc[frag]);*/ - - pReq->frags.bufOffset += copySize; - pReq->frags.cryptoSize += cryptoDataSize; - pReq->frags.macSize += macDataSize; - - return MV_OK; -} - - -/******************************************************************************* -* mvCesaReqProcess - Process regular (Non-fragmented) request -* -* DESCRIPTION: -* This function processes the whole (not fragmented) request -* -* INPUT: -* MV_CESA_REQ* pReq - Pointer to the request in the request queue. -* -* RETURN: -* MV_OK - The request is successfully passed to HW for processing. -* Other - Failure. The request will not be processed -* -*******************************************************************************/ -static MV_STATUS mvCesaReqProcess(MV_CESA_REQ* pReq) -{ - MV_CESA_MBUF *pMbuf; - MV_DMA_DESC *pDmaDesc; - MV_U8 *pSramBuf; - int sid, i, fixOffset; - MV_CESA_SA *pSA; - MV_CESA_COMMAND *pCmd = pReq->pCmd; - - cesaStats.procCount++; - - sid = pCmd->sessionId; - pSA = &pCesaSAD[sid]; - pDmaDesc = pReq->dma[0].pDmaFirst; - pSramBuf = cesaSramVirtPtr->buf; - fixOffset = pReq->fixOffset; - -/* - mvOsPrintf("mvCesaReqProcess: sid=%d, pSA=%p, pDmaDesc=%p, pSramBuf=%p\n", - sid, pSA, pDmaDesc, pSramBuf); -*/ - i = 0; - - /* Crypto IV Special processing in CBC mode for Encryption direction */ - if( ((pSA->config & MV_CESA_OPERATION_MASK) != (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET)) && - ((pSA->config & MV_CESA_CRYPTO_MODE_MASK) == (MV_CESA_CRYPTO_CBC << MV_CESA_CRYPTO_MODE_BIT)) && - ((pSA->config & MV_CESA_DIRECTION_MASK) == (MV_CESA_DIR_ENCODE << MV_CESA_DIRECTION_BIT)) && - (pCmd->ivFromUser) ) - { - /* For Crypto Encode in CBC mode HW always takes IV from SRAM IVPointer, - * (not from IVBufPointer). So when ivFromUser==1, we should copy IV from user place - * in the buffer to SRAM IVPointer - */ - i += mvCesaDmaCopyPrepare(pCmd->pSrc, cesaSramVirtPtr->cryptoIV, &pDmaDesc[i], - MV_FALSE, pCmd->ivOffset, pSA->cryptoIvSize, pCmd->skipFlush); - } - - /* Update SA in SRAM */ - if(cesaLastSid != sid) - { - mvCesaSramSaUpdate(sid, &pDmaDesc[i]); - i++; - } - - /********* Prepare DMA descriptors to copy from pSrc to SRAM *********/ - pMbuf = pCmd->pSrc; - i += mvCesaDmaCopyPrepare(pMbuf, pSramBuf + fixOffset, &pDmaDesc[i], - MV_FALSE, 0, pMbuf->mbufSize, pCmd->skipFlush); - - /* Prepare Security Accelerator descriptor to SRAM words 0 - 7 */ - mvCesaSramDescrBuild(pSA->config, 0, pCmd->cryptoOffset + fixOffset, - pCmd->ivOffset + fixOffset, pCmd->cryptoLength, - pCmd->macOffset + fixOffset, pCmd->digestOffset + fixOffset, - pCmd->macLength, pCmd->macLength, pReq, &pDmaDesc[i]); - i++; - - /* Add special descriptor Ownership for CPU */ - pDmaDesc[i].byteCnt = 0; - pDmaDesc[i].phySrcAdd = 0; - pDmaDesc[i].phyDestAdd = 0; - i++; - - /********* Prepare DMA descriptors to copy from SRAM to pDst *********/ - pMbuf = pCmd->pDst; - i += mvCesaDmaCopyPrepare(pMbuf, pSramBuf + fixOffset, &pDmaDesc[i], - MV_TRUE, 0, pMbuf->mbufSize, pCmd->skipFlush); - - /* Next field of Last DMA descriptor must be NULL */ - pDmaDesc[i-1].phyNextDescPtr = 0; - pReq->dma[0].pDmaLast = &pDmaDesc[i-1]; - mvOsCacheFlush(NULL, pReq->dma[0].pDmaFirst, i*sizeof(MV_DMA_DESC)); - - return MV_OK; -} - - -/******************************************************************************* -* mvCesaSramDescrBuild - Set CESA descriptor in SRAM -* -* DESCRIPTION: -* This function builds CESA descriptor in SRAM from all Command parameters -* -* -* INPUT: -* int chan - CESA channel uses the descriptor -* MV_U32 config - 32 bits of WORD_0 in CESA descriptor structure -* int cryptoOffset - Offset from the beginning of SRAM buffer where -* data for encryption/decription is started. -* int ivOffset - Offset of crypto IV from the SRAM base. Valid only -* for first fragment. -* int cryptoLength - Size (in bytes) of data for encryption/descryption -* operation on this fragment. -* int macOffset - Offset from the beginning of SRAM buffer where -* data for Authentication is started -* int digestOffset - Offset from the beginning of SRAM buffer where -* digest is located. Valid for first and last fragments. -* int macLength - Size (in bytes) of data for Authentication -* operation on this fragment. -* int macTotalLen - Toatl size (in bytes) of data for Authentication -* operation on the whole request (packet). Valid for -* last fragment only. -* -* RETURN: None -* -*******************************************************************************/ -static void mvCesaSramDescrBuild(MV_U32 config, int frag, - int cryptoOffset, int ivOffset, int cryptoLength, - int macOffset, int digestOffset, int macLength, - int macTotalLen, MV_CESA_REQ* pReq, MV_DMA_DESC* pDmaDesc) -{ - MV_CESA_DESC* pCesaDesc = &pReq->pCesaDesc[frag]; - MV_CESA_DESC* pSramDesc = pSramDesc = &cesaSramVirtPtr->desc; - MV_U16 sramBufOffset = (MV_U16)((MV_U8*)cesaSramVirtPtr->buf - mvCesaSramAddrGet()); - - pCesaDesc->config = MV_32BIT_LE(config); - - if( (config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - /* word 1 */ - pCesaDesc->cryptoSrcOffset = MV_16BIT_LE(sramBufOffset + cryptoOffset); - pCesaDesc->cryptoDstOffset = MV_16BIT_LE(sramBufOffset + cryptoOffset); - /* word 2 */ - pCesaDesc->cryptoDataLen = MV_16BIT_LE(cryptoLength); - /* word 3 */ - pCesaDesc->cryptoKeyOffset = MV_16BIT_LE((MV_U16)(cesaSramVirtPtr->sramSA.cryptoKey - - mvCesaSramAddrGet())); - /* word 4 */ - pCesaDesc->cryptoIvOffset = MV_16BIT_LE((MV_U16)(cesaSramVirtPtr->cryptoIV - - mvCesaSramAddrGet())); - pCesaDesc->cryptoIvBufOffset = MV_16BIT_LE(sramBufOffset + ivOffset); - } - - if( (config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - /* word 5 */ - pCesaDesc->macSrcOffset = MV_16BIT_LE(sramBufOffset + macOffset); - pCesaDesc->macTotalLen = MV_16BIT_LE(macTotalLen); - - /* word 6 */ - pCesaDesc->macDigestOffset = MV_16BIT_LE(sramBufOffset + digestOffset); - pCesaDesc->macDataLen = MV_16BIT_LE(macLength); - - /* word 7 */ - pCesaDesc->macInnerIvOffset = MV_16BIT_LE((MV_U16)(cesaSramVirtPtr->sramSA.macInnerIV - - mvCesaSramAddrGet())); - pCesaDesc->macOuterIvOffset = MV_16BIT_LE((MV_U16)(cesaSramVirtPtr->sramSA.macOuterIV - - mvCesaSramAddrGet())); - } - /* Prepare DMA descriptor to CESA descriptor from DRAM to SRAM */ - pDmaDesc->phySrcAdd = MV_32BIT_LE(mvCesaVirtToPhys(&pReq->cesaDescBuf, pCesaDesc)); - pDmaDesc->phyDestAdd = MV_32BIT_LE(mvCesaSramVirtToPhys(NULL, (MV_U8*)pSramDesc)); - pDmaDesc->byteCnt = MV_32BIT_LE(sizeof(MV_CESA_DESC) | BIT31); - - /* flush Source buffer */ - mvOsCacheFlush(NULL, pCesaDesc, sizeof(MV_CESA_DESC)); -} - -/******************************************************************************* -* mvCesaSramSaUpdate - Move required SA information to SRAM if needed. -* -* DESCRIPTION: -* Copy to SRAM values of the required SA. -* -* -* INPUT: -* short sid - Session ID needs SRAM Cache update -* MV_DMA_DESC *pDmaDesc - Pointer to DMA descriptor used to -* copy SA values from DRAM to SRAM. -* -* RETURN: -* MV_OK - Cache entry for this SA copied to SRAM. -* MV_NO_CHANGE - Cache entry for this SA already exist in SRAM -* -*******************************************************************************/ -static INLINE void mvCesaSramSaUpdate(short sid, MV_DMA_DESC *pDmaDesc) -{ - MV_CESA_SA *pSA = &pCesaSAD[sid]; - - /* Prepare DMA descriptor to Copy CACHE_SA from SA database in DRAM to SRAM */ - pDmaDesc->byteCnt = MV_32BIT_LE(sizeof(MV_CESA_SRAM_SA) | BIT31); - pDmaDesc->phySrcAdd = MV_32BIT_LE(mvCesaVirtToPhys(&cesaSramSaBuf, pSA->pSramSA)); - pDmaDesc->phyDestAdd = - MV_32BIT_LE(mvCesaSramVirtToPhys(NULL, (MV_U8*)&cesaSramVirtPtr->sramSA)); - - /* Source buffer is already flushed during OpenSession*/ - /*mvOsCacheFlush(NULL, &pSA->sramSA, sizeof(MV_CESA_SRAM_SA));*/ -} - -/******************************************************************************* -* mvCesaDmaCopyPrepare - prepare DMA descriptor list to copy data presented by -* Mbuf structure from DRAM to SRAM -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_MBUF* pMbuf - pointer to Mbuf structure contains request -* data in DRAM -* MV_U8* pSramBuf - pointer to buffer in SRAM where data should -* be copied to. -* MV_DMA_DESC* pDmaDesc - pointer to first DMA descriptor for this copy. -* The function set number of DMA descriptors needed -* to copy the copySize bytes from Mbuf. -* MV_BOOL isToMbuf - Copy direction. -* MV_TRUE means copy from SRAM buffer to Mbuf in DRAM. -* MV_FALSE means copy from Mbuf in DRAM to SRAM buffer. -* int offset - Offset in the Mbuf structure that copy should be -* started from. -* int copySize - Size of data should be copied. -* -* RETURN: -* int - number of DMA descriptors used for the copy. -* -*******************************************************************************/ -#ifndef MV_NETBSD -static INLINE int mvCesaDmaCopyPrepare(MV_CESA_MBUF* pMbuf, MV_U8* pSramBuf, - MV_DMA_DESC* pDmaDesc, MV_BOOL isToMbuf, - int offset, int copySize, MV_BOOL skipFlush) -{ - int bufOffset, bufSize, size, frag, i; - MV_U8* pBuf; - - i = 0; - - /* Calculate start place for copy: fragment number and offset in the fragment */ - frag = mvCesaMbufOffset(pMbuf, offset, &bufOffset); - bufSize = pMbuf->pFrags[frag].bufSize - bufOffset; - pBuf = pMbuf->pFrags[frag].bufVirtPtr + bufOffset; - - /* Size accumulate total copy size */ - size = 0; - - /* Create DMA lists to copy mBuf from pSrc to SRAM */ - while(size < copySize) - { - /* Find copy size for each DMA descriptor */ - bufSize = MV_MIN(bufSize, (copySize - size)); - pDmaDesc[i].byteCnt = MV_32BIT_LE(bufSize | BIT31); - if(isToMbuf) - { - pDmaDesc[i].phyDestAdd = MV_32BIT_LE(mvOsIoVirtToPhy(NULL, pBuf)); - pDmaDesc[i].phySrcAdd = - MV_32BIT_LE(mvCesaSramVirtToPhys(NULL, (pSramBuf + size))); - /* invalidate the buffer */ - if(skipFlush == MV_FALSE) - mvOsCacheInvalidate(NULL, pBuf, bufSize); - } - else - { - pDmaDesc[i].phySrcAdd = MV_32BIT_LE(mvOsIoVirtToPhy(NULL, pBuf)); - pDmaDesc[i].phyDestAdd = - MV_32BIT_LE(mvCesaSramVirtToPhys(NULL, (pSramBuf + size))); - /* flush the buffer */ - if(skipFlush == MV_FALSE) - mvOsCacheFlush(NULL, pBuf, bufSize); - } - - /* Count number of used DMA descriptors */ - i++; - size += bufSize; - - /* go to next fragment in the Mbuf */ - frag++; - pBuf = pMbuf->pFrags[frag].bufVirtPtr; - bufSize = pMbuf->pFrags[frag].bufSize; - } - return i; -} -#else /* MV_NETBSD */ -static int mvCesaDmaCopyPrepare(MV_CESA_MBUF* pMbuf, MV_U8* pSramBuf, - MV_DMA_DESC* pDmaDesc, MV_BOOL isToMbuf, - int offset, int copySize, MV_BOOL skipFlush) -{ - int bufOffset, bufSize, thisSize, size, frag, i; - MV_ULONG bufPhys, sramPhys; - MV_U8* pBuf; - - /* - * Calculate start place for copy: fragment number and offset in - * the fragment - */ - frag = mvCesaMbufOffset(pMbuf, offset, &bufOffset); - - /* - * Get SRAM physical address only once. We can update it in-place - * as we build the descriptor chain. - */ - sramPhys = mvCesaSramVirtToPhys(NULL, pSramBuf); - - /* - * 'size' accumulates total copy size, 'i' counts desccriptors. - */ - size = i = 0; - - /* Create DMA lists to copy mBuf from pSrc to SRAM */ - while (size < copySize) { - /* - * Calculate # of bytes to copy from the current fragment, - * and the pointer to the start of data - */ - bufSize = pMbuf->pFrags[frag].bufSize - bufOffset; - pBuf = pMbuf->pFrags[frag].bufVirtPtr + bufOffset; - bufOffset = 0; /* First frag may be non-zero */ - frag++; - - /* - * As long as there is data in the current fragment... - */ - while (bufSize > 0) { - /* - * Ensure we don't cross an MMU page boundary. - * XXX: This is NetBSD-specific, but it is a - * quick and dirty way to fix the problem. - * A true HAL would rely on the OS-specific - * driver to do this... - */ - thisSize = PAGE_SIZE - - (((MV_ULONG)pBuf) & (PAGE_SIZE - 1)); - thisSize = MV_MIN(bufSize, thisSize); - /* - * Make sure we don't copy more than requested - */ - if (thisSize > (copySize - size)) { - thisSize = copySize - size; - bufSize = 0; - } - - /* - * Physicall address of this fragment - */ - bufPhys = MV_32BIT_LE(mvOsIoVirtToPhy(NULL, pBuf)); - - /* - * Set up the descriptor - */ - pDmaDesc[i].byteCnt = MV_32BIT_LE(thisSize | BIT31); - if(isToMbuf) { - pDmaDesc[i].phyDestAdd = bufPhys; - pDmaDesc[i].phySrcAdd = MV_32BIT_LE(sramPhys); - /* invalidate the buffer */ - if(skipFlush == MV_FALSE) - mvOsCacheInvalidate(NULL, pBuf, thisSize); - } else { - pDmaDesc[i].phySrcAdd = bufPhys; - pDmaDesc[i].phyDestAdd = MV_32BIT_LE(sramPhys); - /* flush the buffer */ - if(skipFlush == MV_FALSE) - mvOsCacheFlush(NULL, pBuf, thisSize); - } - - pDmaDesc[i].phyNextDescPtr = - MV_32BIT_LE(mvOsIoVirtToPhy(NULL,(&pDmaDesc[i+1]))); - - /* flush the DMA desc */ - mvOsCacheFlush(NULL, &pDmaDesc[i], sizeof(MV_DMA_DESC)); - - /* Update state */ - bufSize -= thisSize; - sramPhys += thisSize; - pBuf += thisSize; - size += thisSize; - i++; - } - } - - return i; -} -#endif /* MV_NETBSD */ -/******************************************************************************* -* mvCesaHmacIvGet - Calculate Inner and Outter values from HMAC key -* -* DESCRIPTION: -* This function calculate Inner and Outer values used for HMAC algorithm. -* This operation allows improve performance fro the whole HMAC processing. -* -* INPUT: -* MV_CESA_MAC_MODE macMode - Authentication mode: HMAC_MD5 or HMAC_SHA1. -* unsigned char key[] - Pointer to HMAC key. -* int keyLength - Size of HMAC key (maximum 64 bytes) -* -* OUTPUT: -* unsigned char innerIV[] - HASH(key^inner) -* unsigned char outerIV[] - HASH(key^outter) -* -* RETURN: None -* -*******************************************************************************/ -static void mvCesaHmacIvGet(MV_CESA_MAC_MODE macMode, unsigned char key[], int keyLength, - unsigned char innerIV[], unsigned char outerIV[]) -{ - unsigned char inner[MV_CESA_MAX_MAC_KEY_LENGTH]; - unsigned char outer[MV_CESA_MAX_MAC_KEY_LENGTH]; - int i, digestSize = 0; -#if defined(MV_CPU_LE) || defined(MV_PPC) - MV_U32 swapped32, val32, *pVal32; -#endif - for(i=0; ipFrags[frag].bufVirtPtr + fragOffset; - size = pMbuf->pFrags[frag].bufSize - fragOffset; - - /* Complete Inner part */ - while(macLeftSize > 0) - { - if(macLeftSize <= size) - { - mvSHA1Update(&ctx, pData, macLeftSize); - break; - } - mvSHA1Update(&ctx, pData, size); - macLeftSize -= size; - frag++; - pData = pMbuf->pFrags[frag].bufVirtPtr; - size = pMbuf->pFrags[frag].bufSize; - } - mvSHA1Final(pDigest, &ctx); -/* - mvOsPrintf("mvCesaFragSha1Complete: pOuterIV=%p, macLeftSize=%d, macTotalSize=%d\n", - pOuterIV, macLeftSize, macTotalSize); - mvDebugMemDump(pDigest, MV_CESA_SHA1_DIGEST_SIZE, 1); -*/ - - if(pOuterIV != NULL) - { - /* If HMAC - Complete Outer part */ - for(i=0; ipFrags[frag].bufVirtPtr + fragOffset; - size = pMbuf->pFrags[frag].bufSize - fragOffset; - - /* Complete Inner part */ - while(macLeftSize > 0) - { - if(macLeftSize <= size) - { - mvMD5Update(&ctx, pData, macLeftSize); - break; - } - mvMD5Update(&ctx, pData, size); - macLeftSize -= size; - frag++; - pData = pMbuf->pFrags[frag].bufVirtPtr; - size = pMbuf->pFrags[frag].bufSize; - } - mvMD5Final(pDigest, &ctx); - -/* - mvOsPrintf("mvCesaFragMd5Complete: pOuterIV=%p, macLeftSize=%d, macTotalSize=%d\n", - pOuterIV, macLeftSize, macTotalSize); - mvDebugMemDump(pDigest, MV_CESA_MD5_DIGEST_SIZE, 1); -*/ - if(pOuterIV != NULL) - { - /* Complete Outer part */ - for(i=0; ipCmd; - MV_U8* pDigest; - MV_CESA_MAC_MODE macMode; - MV_U8* pOuterIV = NULL; - - /* Copy data from Source fragment to Destination */ - if(pCmd->pSrc != pCmd->pDst) - { - mvCesaMbufCopy(pCmd->pDst, pReq->frags.bufOffset, - pCmd->pSrc, pReq->frags.bufOffset, macDataSize); - } - -/* - mvCesaCopyFromMbuf(cesaSramVirtPtr->buf[0], pCmd->pSrc, pReq->frags.bufOffset, macDataSize); - mvCesaCopyToMbuf(cesaSramVirtPtr->buf[0], pCmd->pDst, pReq->frags.bufOffset, macDataSize); -*/ - pDigest = (mvCesaSramAddrGet() + pReq->frags.newDigestOffset); - - macMode = (pSA->config & MV_CESA_MAC_MODE_MASK) >> MV_CESA_MAC_MODE_OFFSET; -/* - mvOsPrintf("macDataSize=%d, macLength=%d, digestOffset=%d, macMode=%d\n", - macDataSize, pCmd->macLength, pCmd->digestOffset, macMode); -*/ - switch(macMode) - { - case MV_CESA_MAC_HMAC_MD5: - pOuterIV = pSA->pSramSA->macOuterIV; - - case MV_CESA_MAC_MD5: - mvCesaFragMd5Complete(pCmd->pDst, pReq->frags.bufOffset, pOuterIV, - macDataSize, pCmd->macLength, pDigest); - break; - - case MV_CESA_MAC_HMAC_SHA1: - pOuterIV = pSA->pSramSA->macOuterIV; - - case MV_CESA_MAC_SHA1: - mvCesaFragSha1Complete(pCmd->pDst, pReq->frags.bufOffset, pOuterIV, - macDataSize, pCmd->macLength, pDigest); - break; - - default: - mvOsPrintf("mvCesaFragAuthComplete: Unexpected macMode %d\n", macMode); - return MV_BAD_PARAM; - } - return MV_OK; -} - -/******************************************************************************* -* mvCesaCtrModeInit - -* -* DESCRIPTION: -* -* -* INPUT: NONE -* -* -* RETURN: -* MV_CESA_COMMAND* -* -*******************************************************************************/ -static MV_CESA_COMMAND* mvCesaCtrModeInit(void) -{ - MV_CESA_MBUF *pMbuf; - MV_U8 *pBuf; - MV_CESA_COMMAND *pCmd; - - pBuf = mvOsMalloc(sizeof(MV_CESA_COMMAND) + - sizeof(MV_CESA_MBUF) + sizeof(MV_BUF_INFO) + 100); - if(pBuf == NULL) - { - mvOsPrintf("mvCesaSessionOpen: Can't allocate %u bytes for CTR Mode\n", - sizeof(MV_CESA_COMMAND) + sizeof(MV_CESA_MBUF) + sizeof(MV_BUF_INFO) ); - return NULL; - } - pCmd = (MV_CESA_COMMAND*)pBuf; - pBuf += sizeof(MV_CESA_COMMAND); - - pMbuf = (MV_CESA_MBUF*)pBuf; - pBuf += sizeof(MV_CESA_MBUF); - - pMbuf->pFrags = (MV_BUF_INFO*)pBuf; - - pMbuf->numFrags = 1; - pCmd->pSrc = pMbuf; - pCmd->pDst = pMbuf; -/* - mvOsPrintf("CtrModeInit: pCmd=%p, pSrc=%p, pDst=%p, pFrags=%p\n", - pCmd, pCmd->pSrc, pCmd->pDst, - pMbuf->pFrags); -*/ - return pCmd; -} - -/******************************************************************************* -* mvCesaCtrModePrepare - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_COMMAND *pCtrModeCmd, MV_CESA_COMMAND *pCmd -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static MV_STATUS mvCesaCtrModePrepare(MV_CESA_COMMAND *pCtrModeCmd, MV_CESA_COMMAND *pCmd) -{ - MV_CESA_MBUF *pMbuf; - MV_U8 *pBuf, *pIV; - MV_U32 counter, *pCounter; - int cryptoSize = MV_ALIGN_UP(pCmd->cryptoLength, MV_CESA_AES_BLOCK_SIZE); -/* - mvOsPrintf("CtrModePrepare: pCmd=%p, pCtrSrc=%p, pCtrDst=%p, pOrgCmd=%p, pOrgSrc=%p, pOrgDst=%p\n", - pCmd, pCmd->pSrc, pCmd->pDst, - pCtrModeCmd, pCtrModeCmd->pSrc, pCtrModeCmd->pDst); -*/ - pMbuf = pCtrModeCmd->pSrc; - - /* Allocate buffer for Key stream */ - pBuf = mvOsIoCachedMalloc(cesaOsHandle,cryptoSize, - &pMbuf->pFrags[0].bufPhysAddr, - &pMbuf->pFrags[0].memHandle); - if(pBuf == NULL) - { - mvOsPrintf("mvCesaCtrModePrepare: Can't allocate %d bytes\n", cryptoSize); - return MV_OUT_OF_CPU_MEM; - } - memset(pBuf, 0, cryptoSize); - mvOsCacheFlush(NULL, pBuf, cryptoSize); - - pMbuf->pFrags[0].bufVirtPtr = pBuf; - pMbuf->mbufSize = cryptoSize; - pMbuf->pFrags[0].bufSize = cryptoSize; - - pCtrModeCmd->pReqPrv = pCmd->pReqPrv; - pCtrModeCmd->sessionId = pCmd->sessionId; - - /* ivFromUser and ivOffset are don't care */ - pCtrModeCmd->cryptoOffset = 0; - pCtrModeCmd->cryptoLength = cryptoSize; - - /* digestOffset, macOffset and macLength are don't care */ - - mvCesaCopyFromMbuf(pBuf, pCmd->pSrc, pCmd->ivOffset, MV_CESA_AES_BLOCK_SIZE); - pCounter = (MV_U32*)(pBuf + (MV_CESA_AES_BLOCK_SIZE - sizeof(counter))); - counter = *pCounter; - counter = MV_32BIT_BE(counter); - pIV = pBuf; - cryptoSize -= MV_CESA_AES_BLOCK_SIZE; - - /* fill key stream */ - while(cryptoSize > 0) - { - pBuf += MV_CESA_AES_BLOCK_SIZE; - memcpy(pBuf, pIV, MV_CESA_AES_BLOCK_SIZE - sizeof(counter)); - pCounter = (MV_U32*)(pBuf + (MV_CESA_AES_BLOCK_SIZE - sizeof(counter))); - counter++; - *pCounter = MV_32BIT_BE(counter); - cryptoSize -= MV_CESA_AES_BLOCK_SIZE; - } - - return MV_OK; -} - -/******************************************************************************* -* mvCesaCtrModeComplete - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_COMMAND *pOrgCmd, MV_CESA_COMMAND *pCmd -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static MV_STATUS mvCesaCtrModeComplete(MV_CESA_COMMAND *pOrgCmd, MV_CESA_COMMAND *pCmd) -{ - int srcFrag, dstFrag, srcOffset, dstOffset, keyOffset, srcSize, dstSize; - int cryptoSize = pCmd->cryptoLength; - MV_U8 *pSrc, *pDst, *pKey; - MV_STATUS status = MV_OK; -/* - mvOsPrintf("CtrModeComplete: pCmd=%p, pCtrSrc=%p, pCtrDst=%p, pOrgCmd=%p, pOrgSrc=%p, pOrgDst=%p\n", - pCmd, pCmd->pSrc, pCmd->pDst, - pOrgCmd, pOrgCmd->pSrc, pOrgCmd->pDst); -*/ - /* XOR source data with key stream to destination data */ - pKey = pCmd->pDst->pFrags[0].bufVirtPtr; - keyOffset = 0; - - if( (pOrgCmd->pSrc != pOrgCmd->pDst) && - (pOrgCmd->cryptoOffset > 0) ) - { - /* Copy Prefix from source buffer to destination buffer */ - - status = mvCesaMbufCopy(pOrgCmd->pDst, 0, - pOrgCmd->pSrc, 0, pOrgCmd->cryptoOffset); -/* - status = mvCesaCopyFromMbuf(tempBuf, pOrgCmd->pSrc, - 0, pOrgCmd->cryptoOffset); - status = mvCesaCopyToMbuf(tempBuf, pOrgCmd->pDst, - 0, pOrgCmd->cryptoOffset); -*/ - } - - srcFrag = mvCesaMbufOffset(pOrgCmd->pSrc, pOrgCmd->cryptoOffset, &srcOffset); - pSrc = pOrgCmd->pSrc->pFrags[srcFrag].bufVirtPtr; - srcSize = pOrgCmd->pSrc->pFrags[srcFrag].bufSize; - - dstFrag = mvCesaMbufOffset(pOrgCmd->pDst, pOrgCmd->cryptoOffset, &dstOffset); - pDst = pOrgCmd->pDst->pFrags[dstFrag].bufVirtPtr; - dstSize = pOrgCmd->pDst->pFrags[dstFrag].bufSize; - - while(cryptoSize > 0) - { - pDst[dstOffset] = (pSrc[srcOffset] ^ pKey[keyOffset]); - - cryptoSize--; - dstOffset++; - srcOffset++; - keyOffset++; - - if(srcOffset >= srcSize) - { - srcFrag++; - srcOffset = 0; - pSrc = pOrgCmd->pSrc->pFrags[srcFrag].bufVirtPtr; - srcSize = pOrgCmd->pSrc->pFrags[srcFrag].bufSize; - } - - if(dstOffset >= dstSize) - { - dstFrag++; - dstOffset = 0; - pDst = pOrgCmd->pDst->pFrags[dstFrag].bufVirtPtr; - dstSize = pOrgCmd->pDst->pFrags[dstFrag].bufSize; - } - } - - if(pOrgCmd->pSrc != pOrgCmd->pDst) - { - /* Copy Suffix from source buffer to destination buffer */ - srcOffset = pOrgCmd->cryptoOffset + pOrgCmd->cryptoLength; - - if( (pOrgCmd->pDst->mbufSize - srcOffset) > 0) - { - status = mvCesaMbufCopy(pOrgCmd->pDst, srcOffset, - pOrgCmd->pSrc, srcOffset, - pOrgCmd->pDst->mbufSize - srcOffset); - } - -/* - status = mvCesaCopyFromMbuf(tempBuf, pOrgCmd->pSrc, - srcOffset, pOrgCmd->pSrc->mbufSize - srcOffset); - status = mvCesaCopyToMbuf(tempBuf, pOrgCmd->pDst, - srcOffset, pOrgCmd->pDst->mbufSize - srcOffset); -*/ - } - - /* Free buffer used for Key stream */ - mvOsIoCachedFree(cesaOsHandle,pCmd->pDst->pFrags[0].bufSize, - pCmd->pDst->pFrags[0].bufPhysAddr, - pCmd->pDst->pFrags[0].bufVirtPtr, - pCmd->pDst->pFrags[0].memHandle); - - return MV_OK; -} - -/******************************************************************************* -* mvCesaCtrModeFinish - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_COMMAND* pCmd -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static void mvCesaCtrModeFinish(MV_CESA_COMMAND* pCmd) -{ - mvOsFree(pCmd); -} - -/******************************************************************************* -* mvCesaParamCheck - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd, MV_U8* pFixOffset -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static MV_STATUS mvCesaParamCheck(MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd, - MV_U8* pFixOffset) -{ - MV_U8 fixOffset = 0xFF; - - /* Check AUTH operation parameters */ - if( ((pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET)) ) - { - /* MAC offset should be at least 4 byte aligned */ - if( MV_IS_NOT_ALIGN(pCmd->macOffset, 4) ) - { - mvOsPrintf("mvCesaAction: macOffset %d must be 4 byte aligned\n", - pCmd->macOffset); - return MV_BAD_PARAM; - } - /* Digest offset must be 4 byte aligned */ - if( MV_IS_NOT_ALIGN(pCmd->digestOffset, 4) ) - { - mvOsPrintf("mvCesaAction: digestOffset %d must be 4 byte aligned\n", - pCmd->digestOffset); - return MV_BAD_PARAM; - } - /* In addition all offsets should be the same alignment: 8 or 4 */ - if(fixOffset == 0xFF) - { - fixOffset = (pCmd->macOffset % 8); - } - else - { - if( (pCmd->macOffset % 8) != fixOffset) - { - mvOsPrintf("mvCesaAction: macOffset %d mod 8 must be equal %d\n", - pCmd->macOffset, fixOffset); - return MV_BAD_PARAM; - } - } - if( (pCmd->digestOffset % 8) != fixOffset) - { - mvOsPrintf("mvCesaAction: digestOffset %d mod 8 must be equal %d\n", - pCmd->digestOffset, fixOffset); - return MV_BAD_PARAM; - } - } - /* Check CRYPTO operation parameters */ - if( ((pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET)) ) - { - /* CryptoOffset should be at least 4 byte aligned */ - if( MV_IS_NOT_ALIGN(pCmd->cryptoOffset, 4) ) - { - mvOsPrintf("CesaAction: cryptoOffset=%d must be 4 byte aligned\n", - pCmd->cryptoOffset); - return MV_BAD_PARAM; - } - /* cryptoLength should be the whole number of blocks */ - if( MV_IS_NOT_ALIGN(pCmd->cryptoLength, pSA->cryptoBlockSize) ) - { - mvOsPrintf("mvCesaAction: cryptoLength=%d must be %d byte aligned\n", - pCmd->cryptoLength, pSA->cryptoBlockSize); - return MV_BAD_PARAM; - } - if(fixOffset == 0xFF) - { - fixOffset = (pCmd->cryptoOffset % 8); - } - else - { - /* In addition all offsets should be the same alignment: 8 or 4 */ - if( (pCmd->cryptoOffset % 8) != fixOffset) - { - mvOsPrintf("mvCesaAction: cryptoOffset %d mod 8 must be equal %d \n", - pCmd->cryptoOffset, fixOffset); - return MV_BAD_PARAM; - } - } - - /* check for CBC mode */ - if(pSA->cryptoIvSize > 0) - { - /* cryptoIV must not be part of CryptoLength */ - if( ((pCmd->ivOffset + pSA->cryptoIvSize) > pCmd->cryptoOffset) && - (pCmd->ivOffset < (pCmd->cryptoOffset + pCmd->cryptoLength)) ) - { - mvOsPrintf("mvCesaFragParamCheck: cryptoIvOffset (%d) is part of cryptoLength (%d+%d)\n", - pCmd->ivOffset, pCmd->macOffset, pCmd->macLength); - return MV_BAD_PARAM; - } - - /* ivOffset must be 4 byte aligned */ - if( MV_IS_NOT_ALIGN(pCmd->ivOffset, 4) ) - { - mvOsPrintf("CesaAction: ivOffset=%d must be 4 byte aligned\n", - pCmd->ivOffset); - return MV_BAD_PARAM; - } - /* In addition all offsets should be the same alignment: 8 or 4 */ - if( (pCmd->ivOffset % 8) != fixOffset) - { - mvOsPrintf("mvCesaAction: ivOffset %d mod 8 must be %d\n", - pCmd->ivOffset, fixOffset); - return MV_BAD_PARAM; - } - } - } - return MV_OK; -} - -/******************************************************************************* -* mvCesaFragParamCheck - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static MV_STATUS mvCesaFragParamCheck(MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd) -{ - int offset; - - if( ((pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET)) ) - { - /* macOffset must be less that SRAM buffer size */ - if(pCmd->macOffset > (sizeof(cesaSramVirtPtr->buf) - MV_CESA_AUTH_BLOCK_SIZE)) - { - mvOsPrintf("mvCesaFragParamCheck: macOffset is too large (%d)\n", - pCmd->macOffset); - return MV_BAD_PARAM; - } - /* macOffset+macSize must be more than mbufSize - SRAM buffer size */ - if( ((pCmd->macOffset + pCmd->macLength) > pCmd->pSrc->mbufSize) || - ((pCmd->pSrc->mbufSize - (pCmd->macOffset + pCmd->macLength)) >= - sizeof(cesaSramVirtPtr->buf)) ) - { - mvOsPrintf("mvCesaFragParamCheck: macLength is too large (%d), mbufSize=%d\n", - pCmd->macLength, pCmd->pSrc->mbufSize); - return MV_BAD_PARAM; - } - } - - if( ((pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET)) ) - { - /* cryptoOffset must be less that SRAM buffer size */ - /* 4 for possible fixOffset */ - if( (pCmd->cryptoOffset + 4) > (sizeof(cesaSramVirtPtr->buf) - pSA->cryptoBlockSize)) - { - mvOsPrintf("mvCesaFragParamCheck: cryptoOffset is too large (%d)\n", - pCmd->cryptoOffset); - return MV_BAD_PARAM; - } - - /* cryptoOffset+cryptoSize must be more than mbufSize - SRAM buffer size */ - if( ((pCmd->cryptoOffset + pCmd->cryptoLength) > pCmd->pSrc->mbufSize) || - ((pCmd->pSrc->mbufSize - (pCmd->cryptoOffset + pCmd->cryptoLength)) >= - (sizeof(cesaSramVirtPtr->buf) - pSA->cryptoBlockSize)) ) - { - mvOsPrintf("mvCesaFragParamCheck: cryptoLength is too large (%d), mbufSize=%d\n", - pCmd->cryptoLength, pCmd->pSrc->mbufSize); - return MV_BAD_PARAM; - } - } - - /* When MAC_THEN_CRYPTO or CRYPTO_THEN_MAC */ - if( ((pSA->config & MV_CESA_OPERATION_MASK) == - (MV_CESA_MAC_THEN_CRYPTO << MV_CESA_OPERATION_OFFSET)) || - ((pSA->config & MV_CESA_OPERATION_MASK) == - (MV_CESA_CRYPTO_THEN_MAC << MV_CESA_OPERATION_OFFSET)) ) - { - if( (mvCtrlModelGet() == MV_5182_DEV_ID) || - ( (mvCtrlModelGet() == MV_5181_DEV_ID) && - (mvCtrlRevGet() >= MV_5181L_A0_REV) && - (pCmd->macLength >= (1 << 14)) ) ) - { - return MV_NOT_ALLOWED; - } - - /* abs(cryptoOffset-macOffset) must be aligned cryptoBlockSize */ - if(pCmd->cryptoOffset > pCmd->macOffset) - { - offset = pCmd->cryptoOffset - pCmd->macOffset; - } - else - { - offset = pCmd->macOffset - pCmd->cryptoOffset; - } - - if( MV_IS_NOT_ALIGN(offset, pSA->cryptoBlockSize) ) - { -/* - mvOsPrintf("mvCesaFragParamCheck: (cryptoOffset - macOffset) must be %d byte aligned\n", - pSA->cryptoBlockSize); -*/ - return MV_NOT_ALLOWED; - } - /* Digest must not be part of CryptoLength */ - if( ((pCmd->digestOffset + pSA->digestSize) > pCmd->cryptoOffset) && - (pCmd->digestOffset < (pCmd->cryptoOffset + pCmd->cryptoLength)) ) - { -/* - mvOsPrintf("mvCesaFragParamCheck: digestOffset (%d) is part of cryptoLength (%d+%d)\n", - pCmd->digestOffset, pCmd->cryptoOffset, pCmd->cryptoLength); -*/ - return MV_NOT_ALLOWED; - } - } - return MV_OK; -} - -/******************************************************************************* -* mvCesaFragSizeFind - -* -* DESCRIPTION: -* -* -* INPUT: -* MV_CESA_SA* pSA, MV_CESA_COMMAND *pCmd, -* int cryptoOffset, int macOffset, -* -* OUTPUT: -* int* pCopySize, int* pCryptoDataSize, int* pMacDataSize -* -* RETURN: -* MV_STATUS -* -*******************************************************************************/ -static void mvCesaFragSizeFind(MV_CESA_SA* pSA, MV_CESA_REQ* pReq, - int cryptoOffset, int macOffset, - int* pCopySize, int* pCryptoDataSize, int* pMacDataSize) -{ - MV_CESA_COMMAND *pCmd = pReq->pCmd; - int cryptoDataSize, macDataSize, copySize; - - cryptoDataSize = macDataSize = 0; - copySize = *pCopySize; - - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_MAC_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - cryptoDataSize = MV_MIN( (copySize - cryptoOffset), - (pCmd->cryptoLength - (pReq->frags.cryptoSize + 1)) ); - - /* cryptoSize for each fragment must be the whole number of blocksSize */ - if( MV_IS_NOT_ALIGN(cryptoDataSize, pSA->cryptoBlockSize) ) - { - cryptoDataSize = MV_ALIGN_DOWN(cryptoDataSize, pSA->cryptoBlockSize); - copySize = cryptoOffset + cryptoDataSize; - } - } - if( (pSA->config & MV_CESA_OPERATION_MASK) != - (MV_CESA_CRYPTO_ONLY << MV_CESA_OPERATION_OFFSET) ) - { - macDataSize = MV_MIN( (copySize - macOffset), - (pCmd->macLength - (pReq->frags.macSize + 1))); - - /* macSize for each fragment (except last) must be the whole number of blocksSize */ - if( MV_IS_NOT_ALIGN(macDataSize, MV_CESA_AUTH_BLOCK_SIZE) ) - { - macDataSize = MV_ALIGN_DOWN(macDataSize, MV_CESA_AUTH_BLOCK_SIZE); - copySize = macOffset + macDataSize; - } - cryptoDataSize = copySize - cryptoOffset; - } - *pCopySize = copySize; - - if(pCryptoDataSize != NULL) - *pCryptoDataSize = cryptoDataSize; - - if(pMacDataSize != NULL) - *pMacDataSize = macDataSize; -} diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h deleted file mode 100644 index 115274ffee..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h +++ /dev/null @@ -1,412 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -/******************************************************************************* -* mvCesa.h - Header File for Cryptographic Engines and Security Accelerator -* -* DESCRIPTION: -* This header file contains macros typedefs and function declaration for -* the Marvell Cryptographic Engines and Security Accelerator. -* -*******************************************************************************/ - -#ifndef __mvCesa_h__ -#define __mvCesa_h__ - -#include "mvOs.h" -#include "mvCommon.h" -#include "mvDebug.h" - -#include "ctrlEnv/mvCtrlEnvSpec.h" - -#include "cesa/mvMD5.h" -#include "cesa/mvSHA1.h" - -#include "cesa/mvCesa.h" -#include "cesa/AES/mvAes.h" -#include "mvSysHwConfig.h" - -#ifdef MV_INCLUDE_IDMA -#include "idma/mvIdma.h" -#include "idma/mvIdmaRegs.h" -#else -/* Redefine MV_DMA_DESC structure */ -typedef struct _mvDmaDesc -{ - MV_U32 byteCnt; /* The total number of bytes to transfer */ - MV_U32 phySrcAdd; /* The physical source address */ - MV_U32 phyDestAdd; /* The physical destination address */ - MV_U32 phyNextDescPtr; /* If we are using chain mode DMA transfer, */ - /* then this pointer should point to the */ - /* physical address of the next descriptor, */ - /* otherwise it should be NULL. */ -}MV_DMA_DESC; -#endif /* MV_INCLUDE_IDMA */ - -#include "cesa/mvCesaRegs.h" - -#define MV_CESA_AUTH_BLOCK_SIZE 64 /* bytes */ - -#define MV_CESA_MD5_DIGEST_SIZE 16 /* bytes */ -#define MV_CESA_SHA1_DIGEST_SIZE 20 /* bytes */ - -#define MV_CESA_MAX_DIGEST_SIZE MV_CESA_SHA1_DIGEST_SIZE - -#define MV_CESA_DES_KEY_LENGTH 8 /* bytes = 64 bits */ -#define MV_CESA_3DES_KEY_LENGTH 24 /* bytes = 192 bits */ -#define MV_CESA_AES_128_KEY_LENGTH 16 /* bytes = 128 bits */ -#define MV_CESA_AES_192_KEY_LENGTH 24 /* bytes = 192 bits */ -#define MV_CESA_AES_256_KEY_LENGTH 32 /* bytes = 256 bits */ - -#define MV_CESA_MAX_CRYPTO_KEY_LENGTH MV_CESA_AES_256_KEY_LENGTH - -#define MV_CESA_DES_BLOCK_SIZE 8 /* bytes = 64 bits */ -#define MV_CESA_3DES_BLOCK_SIZE 8 /* bytes = 64 bits */ - -#define MV_CESA_AES_BLOCK_SIZE 16 /* bytes = 128 bits */ - -#define MV_CESA_MAX_IV_LENGTH MV_CESA_AES_BLOCK_SIZE - -#define MV_CESA_MAX_MAC_KEY_LENGTH 64 /* bytes */ - -typedef struct -{ - MV_U8 cryptoKey[MV_CESA_MAX_CRYPTO_KEY_LENGTH]; - MV_U8 macKey[MV_CESA_MAX_MAC_KEY_LENGTH]; - MV_CESA_OPERATION operation; - MV_CESA_DIRECTION direction; - MV_CESA_CRYPTO_ALG cryptoAlgorithm; - MV_CESA_CRYPTO_MODE cryptoMode; - MV_U8 cryptoKeyLength; - MV_CESA_MAC_MODE macMode; - MV_U8 macKeyLength; - MV_U8 digestSize; - -} MV_CESA_OPEN_SESSION; - -typedef struct -{ - MV_BUF_INFO *pFrags; - MV_U16 numFrags; - MV_U16 mbufSize; - -} MV_CESA_MBUF; - -typedef struct -{ - void* pReqPrv; /* instead of reqId */ - MV_U32 retCode; - MV_16 sessionId; - -} MV_CESA_RESULT; - -typedef void (*MV_CESA_CALLBACK) (MV_CESA_RESULT* pResult); - - -typedef struct -{ - void* pReqPrv; /* instead of reqId */ - MV_CESA_MBUF* pSrc; - MV_CESA_MBUF* pDst; - MV_CESA_CALLBACK* pFuncCB; - MV_16 sessionId; - MV_U16 ivFromUser; - MV_U16 ivOffset; - MV_U16 cryptoOffset; - MV_U16 cryptoLength; - MV_U16 digestOffset; - MV_U16 macOffset; - MV_U16 macLength; - MV_BOOL skipFlush; -} MV_CESA_COMMAND; - - - -MV_STATUS mvCesaHalInit (int numOfSession, int queueDepth, char* pSramBase, MV_U32 cryptEngBase, void *osHandle); -MV_STATUS mvCesaFinish (void); -MV_STATUS mvCesaSessionOpen(MV_CESA_OPEN_SESSION *pSession, short* pSid); -MV_STATUS mvCesaSessionClose(short sid); -MV_STATUS mvCesaCryptoIvSet(MV_U8* pIV, int ivSize); - -MV_STATUS mvCesaAction (MV_CESA_COMMAND* pCmd); - -MV_U32 mvCesaInProcessGet(void); -MV_STATUS mvCesaReadyDispatch(void); -MV_STATUS mvCesaReadyGet(MV_CESA_RESULT* pResult); -MV_BOOL mvCesaIsReady(void); - -int mvCesaMbufOffset(MV_CESA_MBUF* pMbuf, int offset, int* pBufOffset); -MV_STATUS mvCesaCopyFromMbuf(MV_U8* pDst, MV_CESA_MBUF* pSrcMbuf, - int offset, int size); -MV_STATUS mvCesaCopyToMbuf(MV_U8* pSrc, MV_CESA_MBUF* pDstMbuf, - int offset, int size); -MV_STATUS mvCesaMbufCopy(MV_CESA_MBUF* pMbufDst, int dstMbufOffset, - MV_CESA_MBUF* pMbufSrc, int srcMbufOffset, int size); - -/********** Debug functions ********/ - -void mvCesaDebugMbuf(const char* str, MV_CESA_MBUF *pMbuf, int offset, int size); -void mvCesaDebugSA(short sid, int mode); -void mvCesaDebugStats(void); -void mvCesaDebugStatsClear(void); -void mvCesaDebugRegs(void); -void mvCesaDebugStatus(void); -void mvCesaDebugQueue(int mode); -void mvCesaDebugSram(int mode); -void mvCesaDebugSAD(int mode); - - -/******** CESA Private definitions ********/ -#if (MV_CESA_VERSION >= 2) -#if (MV_CACHE_COHERENCY == MV_CACHE_COHER_SW) -#define MV_CESA_TDMA_CTRL_VALUE MV_CESA_TDMA_DST_BURST_MASK(MV_CESA_TDMA_BURST_128B) \ - | MV_CESA_TDMA_SRC_BURST_MASK(MV_CESA_TDMA_BURST_128B) \ - | MV_CESA_TDMA_OUTSTAND_READ_EN_MASK \ - | MV_CESA_TDMA_NO_BYTE_SWAP_MASK \ - | MV_CESA_TDMA_ENABLE_MASK -#else -#define MV_CESA_TDMA_CTRL_VALUE MV_CESA_TDMA_DST_BURST_MASK(MV_CESA_TDMA_BURST_32B) \ - | MV_CESA_TDMA_SRC_BURST_MASK(MV_CESA_TDMA_BURST_128B) \ - /*| MV_CESA_TDMA_OUTSTAND_READ_EN_MASK */\ - | MV_CESA_TDMA_ENABLE_MASK - -#endif -#else -#define MV_CESA_IDMA_CTRL_LOW_VALUE ICCLR_DST_BURST_LIM_128BYTE \ - | ICCLR_SRC_BURST_LIM_128BYTE \ - | ICCLR_INT_MODE_MASK \ - | ICCLR_BLOCK_MODE \ - | ICCLR_CHAN_ENABLE \ - | ICCLR_DESC_MODE_16M -#endif /* MV_CESA_VERSION >= 2 */ - -#define MV_CESA_MAX_PKT_SIZE (64 * 1024) -#define MV_CESA_MAX_MBUF_FRAGS 20 - -#define MV_CESA_MAX_REQ_FRAGS ( (MV_CESA_MAX_PKT_SIZE / MV_CESA_MAX_BUF_SIZE) + 1) - -#define MV_CESA_MAX_DMA_DESC (MV_CESA_MAX_MBUF_FRAGS*2 + 5) - -#define MAX_CESA_CHAIN_LENGTH 20 - -typedef enum -{ - MV_CESA_IDLE = 0, - MV_CESA_PENDING, - MV_CESA_PROCESS, - MV_CESA_READY, -#if (MV_CESA_VERSION >= 3) - MV_CESA_CHAIN, -#endif -} MV_CESA_STATE; - - -/* Session database */ - -/* Map of Key materials of the session in SRAM. - * Each field must be 8 byte aligned - * Total size: 32 + 24 + 24 = 80 bytes - */ -typedef struct -{ - MV_U8 cryptoKey[MV_CESA_MAX_CRYPTO_KEY_LENGTH]; - MV_U8 macInnerIV[MV_CESA_MAX_DIGEST_SIZE]; - MV_U8 reservedInner[4]; - MV_U8 macOuterIV[MV_CESA_MAX_DIGEST_SIZE]; - MV_U8 reservedOuter[4]; - -} MV_CESA_SRAM_SA; - -typedef struct -{ - MV_CESA_SRAM_SA* pSramSA; - MV_U32 config; - MV_U8 cryptoKeyLength; - MV_U8 cryptoIvSize; - MV_U8 cryptoBlockSize; - MV_U8 digestSize; - MV_U8 macKeyLength; - MV_U8 valid; - MV_U8 ctrMode; - MV_U32 count; - -} MV_CESA_SA; - -/* DMA list management */ -typedef struct -{ - MV_DMA_DESC* pDmaFirst; - MV_DMA_DESC* pDmaLast; - -} MV_CESA_DMA; - - -typedef struct -{ - MV_U8 numFrag; - MV_U8 nextFrag; - int bufOffset; - int cryptoSize; - int macSize; - int newDigestOffset; - MV_U8 orgDigest[MV_CESA_MAX_DIGEST_SIZE]; - -} MV_CESA_FRAGS; - -/* Request queue */ -typedef struct -{ - MV_U8 state; - MV_U8 fragMode; - MV_U8 fixOffset; - MV_CESA_COMMAND* pCmd; - MV_CESA_COMMAND* pOrgCmd; - MV_BUF_INFO dmaDescBuf; - MV_CESA_DMA dma[MV_CESA_MAX_REQ_FRAGS]; - MV_BUF_INFO cesaDescBuf; - MV_CESA_DESC* pCesaDesc; - MV_CESA_FRAGS frags; - - -} MV_CESA_REQ; - - -/* SRAM map */ -/* Total SRAM size calculation */ -/* SRAM size = - * MV_CESA_MAX_BUF_SIZE + - * sizeof(MV_CESA_DESC) + - * MV_CESA_MAX_IV_LENGTH + - * MV_CESA_MAX_IV_LENGTH + - * MV_CESA_MAX_DIGEST_SIZE + - * sizeof(MV_CESA_SRAM_SA) - * = 1600 + 32 + 16 + 16 + 24 + 80 + 280 (reserved) = 2048 bytes - * = 3200 + 32 + 16 + 16 + 24 + 80 + 728 (reserved) = 4096 bytes - */ -typedef struct -{ - MV_U8 buf[MV_CESA_MAX_BUF_SIZE]; - MV_CESA_DESC desc; - MV_U8 cryptoIV[MV_CESA_MAX_IV_LENGTH]; - MV_U8 tempCryptoIV[MV_CESA_MAX_IV_LENGTH]; - MV_U8 tempDigest[MV_CESA_MAX_DIGEST_SIZE+4]; - MV_CESA_SRAM_SA sramSA; - -} MV_CESA_SRAM_MAP; - - -typedef struct -{ - MV_U32 openedCount; - MV_U32 closedCount; - MV_U32 fragCount; - MV_U32 reqCount; - MV_U32 maxReqCount; - MV_U32 procCount; - MV_U32 readyCount; - MV_U32 notReadyCount; - MV_U32 startCount; -#if (MV_CESA_VERSION >= 3) - MV_U32 maxChainUsage; -#endif - -} MV_CESA_STATS; - - -/* External variables */ - -extern MV_CESA_STATS cesaStats; -extern MV_CESA_FRAGS cesaFrags; - -extern MV_BUF_INFO cesaSramSaBuf; - -extern MV_CESA_SA* pCesaSAD; -extern MV_U16 cesaMaxSA; - -extern MV_CESA_REQ* pCesaReqFirst; -extern MV_CESA_REQ* pCesaReqLast; -extern MV_CESA_REQ* pCesaReqEmpty; -extern MV_CESA_REQ* pCesaReqProcess; -extern int cesaQueueDepth; -extern int cesaReqResources; -#if (MV_CESA_VERSION>= 3) -extern MV_U32 cesaChainLength; -#endif - -extern MV_CESA_SRAM_MAP* cesaSramVirtPtr; -extern MV_U32 cesaSramPhysAddr; - -static INLINE MV_ULONG mvCesaVirtToPhys(MV_BUF_INFO* pBufInfo, void* pVirt) -{ - return (pBufInfo->bufPhysAddr + ((MV_U8*)pVirt - pBufInfo->bufVirtPtr)); -} - -/* Additional DEBUG functions */ -void mvCesaDebugSramSA(MV_CESA_SRAM_SA* pSramSA, int mode); -void mvCesaDebugCmd(MV_CESA_COMMAND* pCmd, int mode); -void mvCesaDebugDescriptor(MV_CESA_DESC* pDesc); - - - -#endif /* __mvCesa_h__ */ diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaDebug.c b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaDebug.c deleted file mode 100644 index 31b78a8053..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaDebug.c +++ /dev/null @@ -1,484 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#include "mvOs.h" -#include "mvDebug.h" - -#include "cesa/mvMD5.h" -#include "cesa/mvSHA1.h" - -#include "cesa/mvCesa.h" -#include "cesa/mvCesaRegs.h" -#include "cesa/AES/mvAes.h" - -static const char* mvCesaDebugStateStr(MV_CESA_STATE state) -{ - switch(state) - { - case MV_CESA_IDLE: - return "Idle"; - - case MV_CESA_PENDING: - return "Pend"; - - case MV_CESA_PROCESS: - return "Proc"; - - case MV_CESA_READY: - return "Ready"; - - default: - break; - } - return "Unknown"; -} - -static const char* mvCesaDebugOperStr(MV_CESA_OPERATION oper) -{ - switch(oper) - { - case MV_CESA_MAC_ONLY: - return "MacOnly"; - - case MV_CESA_CRYPTO_ONLY: - return "CryptoOnly"; - - case MV_CESA_MAC_THEN_CRYPTO: - return "MacCrypto"; - - case MV_CESA_CRYPTO_THEN_MAC: - return "CryptoMac"; - - default: - break; - } - return "Null"; -} - -static const char* mvCesaDebugCryptoAlgStr(MV_CESA_CRYPTO_ALG cryptoAlg) -{ - switch(cryptoAlg) - { - case MV_CESA_CRYPTO_DES: - return "DES"; - - case MV_CESA_CRYPTO_3DES: - return "3DES"; - - case MV_CESA_CRYPTO_AES: - return "AES"; - - default: - break; - } - return "Null"; -} - -static const char* mvCesaDebugMacModeStr(MV_CESA_MAC_MODE macMode) -{ - switch(macMode) - { - case MV_CESA_MAC_MD5: - return "MD5"; - - case MV_CESA_MAC_SHA1: - return "SHA1"; - - case MV_CESA_MAC_HMAC_MD5: - return "HMAC-MD5"; - - case MV_CESA_MAC_HMAC_SHA1: - return "HMAC_SHA1"; - - default: - break; - } - return "Null"; -} - -void mvCesaDebugCmd(MV_CESA_COMMAND* pCmd, int mode) -{ - mvOsPrintf("pCmd=%p, pReqPrv=%p, pSrc=%p, pDst=%p, pCB=%p, sid=%d\n", - pCmd, pCmd->pReqPrv, pCmd->pSrc, pCmd->pDst, - pCmd->pFuncCB, pCmd->sessionId); - mvOsPrintf("isUser=%d, ivOffs=%d, crOffs=%d, crLen=%d, digest=%d, macOffs=%d, macLen=%d\n", - pCmd->ivFromUser, pCmd->ivOffset, pCmd->cryptoOffset, pCmd->cryptoLength, - pCmd->digestOffset, pCmd->macOffset, pCmd->macLength); -} - -/* no need to use in tool */ -void mvCesaDebugMbuf(const char* str, MV_CESA_MBUF *pMbuf, int offset, int size) -{ - int frag, len, fragOffset; - - if(str != NULL) - mvOsPrintf("%s: pMbuf=%p, numFrags=%d, mbufSize=%d\n", - str, pMbuf, pMbuf->numFrags, pMbuf->mbufSize); - - frag = mvCesaMbufOffset(pMbuf, offset, &fragOffset); - if(frag == MV_INVALID) - { - mvOsPrintf("CESA Mbuf Error: offset (%d) out of range\n", offset); - return; - } - - for(; fragnumFrags; frag++) - { - mvOsPrintf("#%2d. bufVirt=%p, bufSize=%d\n", - frag, pMbuf->pFrags[frag].bufVirtPtr, - pMbuf->pFrags[frag].bufSize); - if(size > 0) - { - len = MV_MIN(pMbuf->pFrags[frag].bufSize, size); - mvDebugMemDump(pMbuf->pFrags[frag].bufVirtPtr+fragOffset, len, 1); - size -= len; - fragOffset = 0; - } - } -} - -void mvCesaDebugRegs(void) -{ - mvOsPrintf("\t CESA Registers:\n"); - - mvOsPrintf("MV_CESA_CMD_REG : 0x%X = 0x%08x\n", - MV_CESA_CMD_REG, - MV_REG_READ( MV_CESA_CMD_REG ) ); - - mvOsPrintf("MV_CESA_CHAN_DESC_OFFSET_REG : 0x%X = 0x%08x\n", - MV_CESA_CHAN_DESC_OFFSET_REG, - MV_REG_READ(MV_CESA_CHAN_DESC_OFFSET_REG) ); - - mvOsPrintf("MV_CESA_CFG_REG : 0x%X = 0x%08x\n", - MV_CESA_CFG_REG, - MV_REG_READ( MV_CESA_CFG_REG ) ); - - mvOsPrintf("MV_CESA_STATUS_REG : 0x%X = 0x%08x\n", - MV_CESA_STATUS_REG, - MV_REG_READ( MV_CESA_STATUS_REG ) ); - - mvOsPrintf("MV_CESA_ISR_CAUSE_REG : 0x%X = 0x%08x\n", - MV_CESA_ISR_CAUSE_REG, - MV_REG_READ( MV_CESA_ISR_CAUSE_REG ) ); - - mvOsPrintf("MV_CESA_ISR_MASK_REG : 0x%X = 0x%08x\n", - MV_CESA_ISR_MASK_REG, - MV_REG_READ( MV_CESA_ISR_MASK_REG ) ); -#if (MV_CESA_VERSION >= 2) - mvOsPrintf("MV_CESA_TDMA_CTRL_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_CTRL_REG, - MV_REG_READ( MV_CESA_TDMA_CTRL_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_BYTE_COUNT_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_BYTE_COUNT_REG, - MV_REG_READ( MV_CESA_TDMA_BYTE_COUNT_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_SRC_ADDR_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_SRC_ADDR_REG, - MV_REG_READ( MV_CESA_TDMA_SRC_ADDR_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_DST_ADDR_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_DST_ADDR_REG, - MV_REG_READ( MV_CESA_TDMA_DST_ADDR_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_NEXT_DESC_PTR_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_NEXT_DESC_PTR_REG, - MV_REG_READ( MV_CESA_TDMA_NEXT_DESC_PTR_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_CURR_DESC_PTR_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_CURR_DESC_PTR_REG, - MV_REG_READ( MV_CESA_TDMA_CURR_DESC_PTR_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_ERROR_CAUSE_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_ERROR_CAUSE_REG, - MV_REG_READ( MV_CESA_TDMA_ERROR_CAUSE_REG ) ); - - mvOsPrintf("MV_CESA_TDMA_ERROR_MASK_REG : 0x%X = 0x%08x\n", - MV_CESA_TDMA_ERROR_MASK_REG, - MV_REG_READ( MV_CESA_TDMA_ERROR_CAUSE_REG ) ); - -#endif -} - -void mvCesaDebugStatus(void) -{ - mvOsPrintf("\n\t CESA Status\n\n"); - - mvOsPrintf("pReqQ=%p, qDepth=%d, reqSize=%ld bytes, qRes=%d, ", - pCesaReqFirst, cesaQueueDepth, sizeof(MV_CESA_REQ), - cesaReqResources); -#if (MV_CESA_VERSION >= 3) - mvOsPrintf("chainLength=%u\n",cesaChainLength); -#else - mvOsPrintf("\n"); -#endif - - mvOsPrintf("pSAD=%p, maxSA=%d, sizeSA=%ld bytes\n", - pCesaSAD, cesaMaxSA, sizeof(MV_CESA_SA)); - - mvOsPrintf("\n"); - - mvCesaDebugRegs(); - mvCesaDebugStats(); - mvCesaDebugStatsClear(); -} - -void mvCesaDebugDescriptor(MV_CESA_DESC* pDesc) -{ - mvOsPrintf("config=0x%08x, crSrcOffs=0x%04x, crDstOffs=0x%04x\n", - pDesc->config, pDesc->cryptoSrcOffset, pDesc->cryptoDstOffset); - - mvOsPrintf("crLen=0x%04x, crKeyOffs=0x%04x, ivOffs=0x%04x, ivBufOffs=0x%04x\n", - pDesc->cryptoDataLen, pDesc->cryptoKeyOffset, - pDesc->cryptoIvOffset, pDesc->cryptoIvBufOffset); - - mvOsPrintf("macSrc=0x%04x, digest=0x%04x, macLen=0x%04x, inIv=0x%04x, outIv=0x%04x\n", - pDesc->macSrcOffset, pDesc->macDigestOffset, pDesc->macDataLen, - pDesc->macInnerIvOffset, pDesc->macOuterIvOffset); -} - -void mvCesaDebugQueue(int mode) -{ - mvOsPrintf("\n\t CESA Request Queue:\n\n"); - - mvOsPrintf("pFirstReq=%p, pLastReq=%p, qDepth=%d, reqSize=%ld bytes\n", - pCesaReqFirst, pCesaReqLast, cesaQueueDepth, sizeof(MV_CESA_REQ)); - - mvOsPrintf("pEmpty=%p, pProcess=%p, qResources=%d\n", - pCesaReqEmpty, pCesaReqProcess, - cesaReqResources); - - if(mode != 0) - { - int count = 0; - MV_CESA_REQ* pReq = pCesaReqFirst; - - for(count=0; countstate), - pReq->fragMode, pReq->pCmd, pReq->dma[0].pDmaFirst, &pReq->pCesaDesc[0]); - if(pReq->fragMode != MV_CESA_FRAG_NONE) - { - int frag; - - mvOsPrintf("pFrags=%p, num=%d, next=%d, bufOffset=%d, cryptoSize=%d, macSize=%d\n", - &pReq->frags, pReq->frags.numFrag, pReq->frags.nextFrag, - pReq->frags.bufOffset, pReq->frags.cryptoSize, pReq->frags.macSize); - for(frag=0; fragfrags.numFrag; frag++) - { - mvOsPrintf("#%d: pDmaFirst=%p, pDesc=%p\n", frag, - pReq->dma[frag].pDmaFirst, &pReq->pCesaDesc[frag]); - } - } - if(mode > 1) - { - /* Print out Command */ - mvCesaDebugCmd(pReq->pCmd, mode); - - /* Print out Descriptor */ - mvCesaDebugDescriptor(&pReq->pCesaDesc[0]); - } - pReq++; - } - } -} - - -void mvCesaDebugSramSA(MV_CESA_SRAM_SA* pSramSA, int mode) -{ - if(pSramSA == NULL) - { - mvOsPrintf("cesaSramSA: Unexpected pSramSA=%p\n", pSramSA); - return; - } - mvOsPrintf("pSramSA=%p, sizeSramSA=%ld bytes\n", - pSramSA, sizeof(MV_CESA_SRAM_SA)); - - if(mode != 0) - { - mvOsPrintf("cryptoKey=%p, maxCryptoKey=%d bytes\n", - pSramSA->cryptoKey, MV_CESA_MAX_CRYPTO_KEY_LENGTH); - mvDebugMemDump(pSramSA->cryptoKey, MV_CESA_MAX_CRYPTO_KEY_LENGTH, 1); - - mvOsPrintf("macInnerIV=%p, maxInnerIV=%d bytes\n", - pSramSA->macInnerIV, MV_CESA_MAX_DIGEST_SIZE); - mvDebugMemDump(pSramSA->macInnerIV, MV_CESA_MAX_DIGEST_SIZE, 1); - - mvOsPrintf("macOuterIV=%p, maxOuterIV=%d bytes\n", - pSramSA->macOuterIV, MV_CESA_MAX_DIGEST_SIZE); - mvDebugMemDump(pSramSA->macOuterIV, MV_CESA_MAX_DIGEST_SIZE, 1); - } -} - -void mvCesaDebugSA(short sid, int mode) -{ - MV_CESA_OPERATION oper; - MV_CESA_DIRECTION dir; - MV_CESA_CRYPTO_ALG cryptoAlg; - MV_CESA_CRYPTO_MODE cryptoMode; - MV_CESA_MAC_MODE macMode; - MV_CESA_SA* pSA = &pCesaSAD[sid]; - - if( (pSA->valid) || ((pSA->count != 0) && (mode > 0)) || (mode >= 2) ) - { - mvOsPrintf("\n\nCESA SA Entry #%d (%p) - %s (count=%d)\n", - sid, pSA, - pSA->valid ? "Valid" : "Invalid", pSA->count); - - oper = (pSA->config & MV_CESA_OPERATION_MASK) >> MV_CESA_OPERATION_OFFSET; - dir = (pSA->config & MV_CESA_DIRECTION_MASK) >> MV_CESA_DIRECTION_BIT; - mvOsPrintf("%s - %s ", mvCesaDebugOperStr(oper), - (dir == MV_CESA_DIR_ENCODE) ? "Encode" : "Decode"); - if(oper != MV_CESA_MAC_ONLY) - { - cryptoAlg = (pSA->config & MV_CESA_CRYPTO_ALG_MASK) >> MV_CESA_CRYPTO_ALG_OFFSET; - cryptoMode = (pSA->config & MV_CESA_CRYPTO_MODE_MASK) >> MV_CESA_CRYPTO_MODE_BIT; - mvOsPrintf("- %s - %s ", mvCesaDebugCryptoAlgStr(cryptoAlg), - (cryptoMode == MV_CESA_CRYPTO_ECB) ? "ECB" : "CBC"); - } - if(oper != MV_CESA_CRYPTO_ONLY) - { - macMode = (pSA->config & MV_CESA_MAC_MODE_MASK) >> MV_CESA_MAC_MODE_OFFSET; - mvOsPrintf("- %s ", mvCesaDebugMacModeStr(macMode)); - } - mvOsPrintf("\n"); - - if(mode > 0) - { - mvOsPrintf("config=0x%08x, cryptoKeySize=%d, digestSize=%d\n", - pCesaSAD[sid].config, pCesaSAD[sid].cryptoKeyLength, - pCesaSAD[sid].digestSize); - - mvCesaDebugSramSA(pCesaSAD[sid].pSramSA, mode); - } - } -} - - -/**/ -void mvCesaDebugSram(int mode) -{ - mvOsPrintf("\n\t SRAM contents: size=%ld, pVirt=%p\n\n", - sizeof(MV_CESA_SRAM_MAP), cesaSramVirtPtr); - - mvOsPrintf("\n\t Sram buffer: size=%d, pVirt=%p\n", - MV_CESA_MAX_BUF_SIZE, cesaSramVirtPtr->buf); - if(mode != 0) - mvDebugMemDump(cesaSramVirtPtr->buf, 64, 1); - - mvOsPrintf("\n"); - mvOsPrintf("\n\t Sram descriptor: size=%ld, pVirt=%p\n", - sizeof(MV_CESA_DESC), &cesaSramVirtPtr->desc); - if(mode != 0) - { - mvOsPrintf("\n"); - mvCesaDebugDescriptor(&cesaSramVirtPtr->desc); - } - mvOsPrintf("\n\t Sram IV: size=%d, pVirt=%p\n", - MV_CESA_MAX_IV_LENGTH, &cesaSramVirtPtr->cryptoIV); - if(mode != 0) - { - mvOsPrintf("\n"); - mvDebugMemDump(cesaSramVirtPtr->cryptoIV, MV_CESA_MAX_IV_LENGTH, 1); - } - mvOsPrintf("\n"); - mvCesaDebugSramSA(&cesaSramVirtPtr->sramSA, 0); -} - -void mvCesaDebugSAD(int mode) -{ - int sid; - - mvOsPrintf("\n\t Cesa SAD status: pSAD=%p, maxSA=%d\n", - pCesaSAD, cesaMaxSA); - - for(sid=0; sid= 3) - mvOsPrintf("maxChainUsage=%u\n",cesaStats.maxChainUsage); -#endif - mvOsPrintf("\n"); - mvOsPrintf("proc=%u, ready=%u, notReady=%u\n", - cesaStats.procCount, cesaStats.readyCount, cesaStats.notReadyCount); -} - -void mvCesaDebugStatsClear(void) -{ - memset(&cesaStats, 0, sizeof(cesaStats)); -} diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h deleted file mode 100644 index b12e44b14b..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h +++ /dev/null @@ -1,357 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#ifndef __mvCesaRegs_h__ -#define __mvCesaRegs_h__ - -#include "mvTypes.h" - -typedef struct -{ - /* word 0 */ - MV_U32 config; - /* word 1 */ - MV_U16 cryptoSrcOffset; - MV_U16 cryptoDstOffset; - /* word 2 */ - MV_U16 cryptoDataLen; - MV_U16 reserved1; - /* word 3 */ - MV_U16 cryptoKeyOffset; - MV_U16 reserved2; - /* word 4 */ - MV_U16 cryptoIvOffset; - MV_U16 cryptoIvBufOffset; - /* word 5 */ - MV_U16 macSrcOffset; - MV_U16 macTotalLen; - /* word 6 */ - MV_U16 macDigestOffset; - MV_U16 macDataLen; - /* word 7 */ - MV_U16 macInnerIvOffset; - MV_U16 macOuterIvOffset; - -} MV_CESA_DESC; - -/* operation */ -typedef enum -{ - MV_CESA_MAC_ONLY = 0, - MV_CESA_CRYPTO_ONLY = 1, - MV_CESA_MAC_THEN_CRYPTO = 2, - MV_CESA_CRYPTO_THEN_MAC = 3, - - MV_CESA_MAX_OPERATION - -} MV_CESA_OPERATION; - -#define MV_CESA_OPERATION_OFFSET 0 -#define MV_CESA_OPERATION_MASK (0x3 << MV_CESA_OPERATION_OFFSET) - -/* mac algorithm */ -typedef enum -{ - MV_CESA_MAC_NULL = 0, - MV_CESA_MAC_MD5 = 4, - MV_CESA_MAC_SHA1 = 5, - MV_CESA_MAC_HMAC_MD5 = 6, - MV_CESA_MAC_HMAC_SHA1 = 7, - -} MV_CESA_MAC_MODE; - -#define MV_CESA_MAC_MODE_OFFSET 4 -#define MV_CESA_MAC_MODE_MASK (0x7 << MV_CESA_MAC_MODE_OFFSET) - -typedef enum -{ - MV_CESA_MAC_DIGEST_FULL = 0, - MV_CESA_MAC_DIGEST_96B = 1, - -} MV_CESA_MAC_DIGEST_SIZE; - -#define MV_CESA_MAC_DIGEST_SIZE_BIT 7 -#define MV_CESA_MAC_DIGEST_SIZE_MASK (1 << MV_CESA_MAC_DIGEST_SIZE_BIT) - - -typedef enum -{ - MV_CESA_CRYPTO_NULL = 0, - MV_CESA_CRYPTO_DES = 1, - MV_CESA_CRYPTO_3DES = 2, - MV_CESA_CRYPTO_AES = 3, - -} MV_CESA_CRYPTO_ALG; - -#define MV_CESA_CRYPTO_ALG_OFFSET 8 -#define MV_CESA_CRYPTO_ALG_MASK (0x3 << MV_CESA_CRYPTO_ALG_OFFSET) - - -/* direction */ -typedef enum -{ - MV_CESA_DIR_ENCODE = 0, - MV_CESA_DIR_DECODE = 1, - -} MV_CESA_DIRECTION; - -#define MV_CESA_DIRECTION_BIT 12 -#define MV_CESA_DIRECTION_MASK (1 << MV_CESA_DIRECTION_BIT) - -/* crypto IV mode */ -typedef enum -{ - MV_CESA_CRYPTO_ECB = 0, - MV_CESA_CRYPTO_CBC = 1, - - /* NO HW Support */ - MV_CESA_CRYPTO_CTR = 10, - -} MV_CESA_CRYPTO_MODE; - -#define MV_CESA_CRYPTO_MODE_BIT 16 -#define MV_CESA_CRYPTO_MODE_MASK (1 << MV_CESA_CRYPTO_MODE_BIT) - -/* 3DES mode */ -typedef enum -{ - MV_CESA_CRYPTO_3DES_EEE = 0, - MV_CESA_CRYPTO_3DES_EDE = 1, - -} MV_CESA_CRYPTO_3DES_MODE; - -#define MV_CESA_CRYPTO_3DES_MODE_BIT 20 -#define MV_CESA_CRYPTO_3DES_MODE_MASK (1 << MV_CESA_CRYPTO_3DES_MODE_BIT) - - -/* AES Key Length */ -typedef enum -{ - MV_CESA_CRYPTO_AES_KEY_128 = 0, - MV_CESA_CRYPTO_AES_KEY_192 = 1, - MV_CESA_CRYPTO_AES_KEY_256 = 2, - -} MV_CESA_CRYPTO_AES_KEY_LEN; - -#define MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET 24 -#define MV_CESA_CRYPTO_AES_KEY_LEN_MASK (0x3 << MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET) - -/* Fragmentation mode */ -typedef enum -{ - MV_CESA_FRAG_NONE = 0, - MV_CESA_FRAG_FIRST = 1, - MV_CESA_FRAG_LAST = 2, - MV_CESA_FRAG_MIDDLE = 3, - -} MV_CESA_FRAG_MODE; - -#define MV_CESA_FRAG_MODE_OFFSET 30 -#define MV_CESA_FRAG_MODE_MASK (0x3 << MV_CESA_FRAG_MODE_OFFSET) -/*---------------------------------------------------------------------------*/ - -/********** Security Accelerator Command Register **************/ -#define MV_CESA_CMD_REG (MV_CESA_REG_BASE + 0xE00) - -#define MV_CESA_CMD_CHAN_ENABLE_BIT 0 -#define MV_CESA_CMD_CHAN_ENABLE_MASK (1 << MV_CESA_CMD_CHAN_ENABLE_BIT) - -#define MV_CESA_CMD_CHAN_DISABLE_BIT 2 -#define MV_CESA_CMD_CHAN_DISABLE_MASK (1 << MV_CESA_CMD_CHAN_DISABLE_BIT) - -/********** Security Accelerator Descriptor Pointers Register **********/ -#define MV_CESA_CHAN_DESC_OFFSET_REG (MV_CESA_REG_BASE + 0xE04) - -/********** Security Accelerator Configuration Register **********/ -#define MV_CESA_CFG_REG (MV_CESA_REG_BASE + 0xE08) - -#define MV_CESA_CFG_STOP_DIGEST_ERR_BIT 0 -#define MV_CESA_CFG_STOP_DIGEST_ERR_MASK (1 << MV_CESA_CFG_STOP_DIGEST_ERR_BIT) - -#define MV_CESA_CFG_WAIT_DMA_BIT 7 -#define MV_CESA_CFG_WAIT_DMA_MASK (1 << MV_CESA_CFG_WAIT_DMA_BIT) - -#define MV_CESA_CFG_ACT_DMA_BIT 9 -#define MV_CESA_CFG_ACT_DMA_MASK (1 << MV_CESA_CFG_ACT_DMA_BIT) - -#define MV_CESA_CFG_CHAIN_MODE_BIT 11 -#define MV_CESA_CFG_CHAIN_MODE_MASK (1 << MV_CESA_CFG_CHAIN_MODE_BIT) - -/********** Security Accelerator Status Register ***********/ -#define MV_CESA_STATUS_REG (MV_CESA_REG_BASE + 0xE0C) - -#define MV_CESA_STATUS_ACTIVE_BIT 0 -#define MV_CESA_STATUS_ACTIVE_MASK (1 << MV_CESA_STATUS_ACTIVE_BIT) - -#define MV_CESA_STATUS_DIGEST_ERR_BIT 8 -#define MV_CESA_STATUS_DIGEST_ERR_MASK (1 << MV_CESA_STATUS_DIGEST_ERR_BIT) - - -/* Cryptographic Engines and Security Accelerator Interrupt Cause Register */ -#define MV_CESA_ISR_CAUSE_REG (MV_CESA_REG_BASE + 0xE20) - -/* Cryptographic Engines and Security Accelerator Interrupt Mask Register */ -#define MV_CESA_ISR_MASK_REG (MV_CESA_REG_BASE + 0xE24) - -#define MV_CESA_CAUSE_AUTH_MASK (1 << 0) -#define MV_CESA_CAUSE_DES_MASK (1 << 1) -#define MV_CESA_CAUSE_AES_ENCR_MASK (1 << 2) -#define MV_CESA_CAUSE_AES_DECR_MASK (1 << 3) -#define MV_CESA_CAUSE_DES_ALL_MASK (1 << 4) - -#define MV_CESA_CAUSE_ACC_BIT 5 -#define MV_CESA_CAUSE_ACC_MASK (1 << MV_CESA_CAUSE_ACC_BIT) - -#define MV_CESA_CAUSE_ACC_DMA_BIT 7 -#define MV_CESA_CAUSE_ACC_DMA_MASK (1 << MV_CESA_CAUSE_ACC_DMA_BIT) -#define MV_CESA_CAUSE_ACC_DMA_ALL_MASK (3 << MV_CESA_CAUSE_ACC_DMA_BIT) - -#define MV_CESA_CAUSE_DMA_COMPL_BIT 9 -#define MV_CESA_CAUSE_DMA_COMPL_MASK (1 << MV_CESA_CAUSE_DMA_COMPL_BIT) - -#define MV_CESA_CAUSE_DMA_OWN_ERR_BIT 10 -#define MV_CESA_CAUSE_DMA_OWN_ERR_MASK (1 < MV_CESA_CAUSE_DMA_OWN_ERR_BIT) - -#define MV_CESA_CAUSE_DMA_CHAIN_PKT_BIT 11 -#define MV_CESA_CAUSE_DMA_CHAIN_PKT_MASK (1 < MV_CESA_CAUSE_DMA_CHAIN_PKT_BIT) - - -#define MV_CESA_AUTH_DATA_IN_REG (MV_CESA_REG_BASE + 0xd38) -#define MV_CESA_AUTH_BIT_COUNT_LOW_REG (MV_CESA_REG_BASE + 0xd20) -#define MV_CESA_AUTH_BIT_COUNT_HIGH_REG (MV_CESA_REG_BASE + 0xd24) - -#define MV_CESA_AUTH_INIT_VAL_DIGEST_REG(i) (MV_CESA_REG_BASE + 0xd00 + (i<<2)) - -#define MV_CESA_AUTH_INIT_VAL_DIGEST_A_REG (MV_CESA_REG_BASE + 0xd00) -#define MV_CESA_AUTH_INIT_VAL_DIGEST_B_REG (MV_CESA_REG_BASE + 0xd04) -#define MV_CESA_AUTH_INIT_VAL_DIGEST_C_REG (MV_CESA_REG_BASE + 0xd08) -#define MV_CESA_AUTH_INIT_VAL_DIGEST_D_REG (MV_CESA_REG_BASE + 0xd0c) -#define MV_CESA_AUTH_INIT_VAL_DIGEST_E_REG (MV_CESA_REG_BASE + 0xd10) -#define MV_CESA_AUTH_COMMAND_REG (MV_CESA_REG_BASE + 0xd18) - -#define MV_CESA_AUTH_ALGORITHM_BIT 0 -#define MV_CESA_AUTH_ALGORITHM_MD5 (0< -wait_queue_head_t cesaTest_waitq; -spinlock_t cesaLock; - -#define CESA_TEST_LOCK(flags) spin_lock_irqsave( &cesaLock, flags) -#define CESA_TEST_UNLOCK(flags) spin_unlock_irqrestore( &cesaLock, flags); - -#define CESA_TEST_WAIT_INIT() init_waitqueue_head(&cesaTest_waitq) -#define CESA_TEST_WAKE_UP() wake_up(&cesaTest_waitq) -#define CESA_TEST_WAIT(cond, ms) wait_event_timeout(cesaTest_waitq, (cond), msecs_to_jiffies(ms)) - -#define CESA_TEST_TICK_GET() jiffies -#define CESA_TEST_TICK_TO_MS(tick) jiffies_to_msecs(tick) - -#elif defined(MV_NETBSD) - -#include -#include -static int cesaLock; - -#define CESA_TEST_LOCK(flags) flags = splnet() -#define CESA_TEST_UNLOCK(flags) splx(flags) - -#define CESA_TEST_WAIT_INIT() /* nothing */ -#define CESA_TEST_WAKE_UP() wakeup(&cesaLock) -#define CESA_TEST_WAIT(cond, ms) \ -do { \ - while (!(cond)) \ - tsleep(&cesaLock, PWAIT, "cesatest",mstohz(ms)); \ -} while (/*CONSTCOND*/0) - -#define CESA_TEST_TICK_GET() hardclock_ticks -#define CESA_TEST_TICK_TO_MS(tick) ((1000/hz)*(tick)) - -#define request_irq(i,h,t,n,a) \ - !mv_intr_establish((i),IPL_NET,(int(*)(void *))(h),(a)) - -#else -#error "Only Linux, VxWorks, or NetBSD OS are supported" -#endif - -#include "mvDebug.h" - -#include "mvSysHwConfig.h" -#include "boardEnv/mvBoardEnvLib.h" -#include "ctrlEnv/sys/mvCpuIf.h" -#include "cntmr/mvCntmr.h" -#include "cesa/mvCesa.h" -#include "cesa/mvCesaRegs.h" -#include "cesa/mvMD5.h" -#include "cesa/mvSHA1.h" - -#if defined(CONFIG_MV646xx) -#include "marvell_pic.h" -#endif - -#define MV_CESA_USE_TIMER_ID 0 -#define CESA_DEF_BUF_SIZE 1500 -#define CESA_DEF_BUF_NUM 1 -#define CESA_DEF_SESSION_NUM 32 - -#define CESA_DEF_ITER_NUM 100 - -#define CESA_DEF_REQ_SIZE 256 - - -/* CESA Tests Debug */ -#undef CESA_TEST_DEBUG - -#ifdef CESA_TEST_DEBUG - -# define CESA_TEST_DEBUG_PRINT(msg) mvOsPrintf msg -# define CESA_TEST_DEBUG_CODE(code) code - -typedef struct -{ - int type; /* 0 - isrEmpty, 1 - cesaReadyGet, 2 - cesaAction */ - MV_U32 timeStamp; - MV_U32 cause; - MV_U32 realCause; - MV_U32 dmaCause; - int resources; - MV_CESA_REQ* pReqReady; - MV_CESA_REQ* pReqEmpty; - MV_CESA_REQ* pReqProcess; -} MV_CESA_TEST_TRACE; - -#define MV_CESA_TEST_TRACE_SIZE 25 - -static int cesaTestTraceIdx = 0; -static MV_CESA_TEST_TRACE cesaTestTrace[MV_CESA_TEST_TRACE_SIZE]; - -static void cesaTestTraceAdd(int type, MV_U32 cause) -{ - cesaTestTrace[cesaTestTraceIdx].type = type; - cesaTestTrace[cesaTestTraceIdx].cause = cause; - cesaTestTrace[cesaTestTraceIdx].realCause = MV_REG_READ(MV_CESA_ISR_CAUSE_REG); - cesaTestTrace[cesaTestTraceIdx].dmaCause = MV_REG_READ(IDMA_CAUSE_REG); - cesaTestTrace[cesaTestTraceIdx].resources = cesaReqResources; - cesaTestTrace[cesaTestTraceIdx].pReqReady = pCesaReqReady; - cesaTestTrace[cesaTestTraceIdx].pReqEmpty = pCesaReqEmpty; - cesaTestTrace[cesaTestTraceIdx].pReqProcess = pCesaReqProcess; - cesaTestTrace[cesaTestTraceIdx].timeStamp = mvCntmrRead(MV_CESA_USE_TIMER_ID); - cesaTestTraceIdx++; - if(cesaTestTraceIdx == MV_CESA_TEST_TRACE_SIZE) - cesaTestTraceIdx = 0; -} - -#else - -# define CESA_TEST_DEBUG_PRINT(msg) -# define CESA_TEST_DEBUG_CODE(code) - -#endif /* CESA_TEST_DEBUG */ - -int cesaExpReqId=0; -int cesaCbIter=0; - -int cesaIdx; -int cesaIteration; -int cesaRateSize; -int cesaReqSize; -unsigned long cesaTaskId; -int cesaBufNum; -int cesaBufSize; -int cesaCheckOffset; -int cesaCheckSize; -int cesaCheckMode; -int cesaTestIdx; -int cesaCaseIdx; - - -MV_U32 cesaTestIsrCount = 0; -MV_U32 cesaTestIsrMissCount = 0; - -MV_U32 cesaCryptoError = 0; -MV_U32 cesaReqIdError = 0; -MV_U32 cesaError = 0; - -char* cesaHexBuffer = NULL; - -char* cesaBinBuffer = NULL; -char* cesaExpBinBuffer = NULL; - -char* cesaInputHexStr = NULL; -char* cesaOutputHexStr = NULL; - -MV_BUF_INFO cesaReqBufs[CESA_DEF_REQ_SIZE]; - -MV_CESA_COMMAND* cesaCmdRing; -MV_CESA_RESULT cesaResult; - -int cesaTestFull = 0; - -MV_BOOL cesaIsReady = MV_FALSE; -MV_U32 cesaCycles = 0; -MV_U32 cesaBeginTicks = 0; -MV_U32 cesaEndTicks = 0; -MV_U32 cesaRate = 0; -MV_U32 cesaRateAfterDot = 0; - -void *cesaTestOSHandle = NULL; - -enum -{ - CESA_FAST_CHECK_MODE = 0, - CESA_FULL_CHECK_MODE, - CESA_NULL_CHECK_MODE, - CESA_SHOW_CHECK_MODE, - CESA_SW_SHOW_CHECK_MODE, - CESA_SW_NULL_CHECK_MODE, - - CESA_MAX_CHECK_MODE -}; - -enum -{ - DES_TEST_TYPE = 0, - TRIPLE_DES_TEST_TYPE = 1, - AES_TEST_TYPE = 2, - MD5_TEST_TYPE = 3, - SHA_TEST_TYPE = 4, - COMBINED_TEST_TYPE = 5, - - MAX_TEST_TYPE -}; - -/* Tests data base */ -typedef struct -{ - short sid; - char cryptoAlgorithm; /* DES/3DES/AES */ - char cryptoMode; /* ECB or CBC */ - char macAlgorithm; /* MD5 / SHA1 */ - char operation; /* CRYPTO/HMAC/CRYPTO+HMAC/HMAC+CRYPTO */ - char direction; /* ENCODE(SIGN)/DECODE(VERIFY) */ - unsigned char* pCryptoKey; - int cryptoKeySize; - unsigned char* pMacKey; - int macKeySize; - const char* name; - -} MV_CESA_TEST_SESSION; - -typedef struct -{ - MV_CESA_TEST_SESSION* pSessions; - int numSessions; - -} MV_CESA_TEST_DB_ENTRY; - -typedef struct -{ - char* plainHexStr; - char* cipherHexStr; - unsigned char* pCryptoIV; - int cryptoLength; - int macLength; - int digestOffset; - -} MV_CESA_TEST_CASE; - -typedef struct -{ - int size; - const char* outputHexStr; - -} MV_CESA_SIZE_TEST; - -static unsigned char cryptoKey1[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}; - -static unsigned char cryptoKey7[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}; -static unsigned char iv1[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}; - - -static unsigned char cryptoKey2[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; - -static unsigned char cryptoKey3[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17}; - -static unsigned char cryptoKey4[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}; - -static unsigned char cryptoKey5[] = {0x56, 0xe4, 0x7a, 0x38, 0xc5, 0x59, 0x89, 0x74, - 0xbc, 0x46, 0x90, 0x3d, 0xba, 0x29, 0x03, 0x49}; - - -static unsigned char key3des1[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, - 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23}; - -/* Input ASCII string: The quick brown fox jump */ -static char plain3des1[] = "54686520717566636B2062726F776E20666F78206A756D70"; -static char cipher3des1[] = "A826FD8CE53B855FCCE21C8112256FE668D5C05DD9B6B900"; - -static unsigned char key3des2[] = {0x62, 0x7f, 0x46, 0x0e, 0x08, 0x10, 0x4a, 0x10, - 0x43, 0xcd, 0x26, 0x5d, 0x58, 0x40, 0xea, 0xf1, - 0x31, 0x3e, 0xdf, 0x97, 0xdf, 0x2a, 0x8a, 0x8c}; - -static unsigned char iv3des2[] = {0x8e, 0x29, 0xf7, 0x5e, 0xa7, 0x7e, 0x54, 0x75}; - -static char plain3des2[] = "326a494cd33fe756"; - -static char cipher3desCbc2[] = "8e29f75ea77e5475" - "b22b8d66de970692"; - -static unsigned char key3des3[] = {0x37, 0xae, 0x5e, 0xbf, 0x46, 0xdf, 0xf2, 0xdc, - 0x07, 0x54, 0xb9, 0x4f, 0x31, 0xcb, 0xb3, 0x85, - 0x5e, 0x7f, 0xd3, 0x6d, 0xc8, 0x70, 0xbf, 0xae}; - -static unsigned char iv3des3[] = {0x3d, 0x1d, 0xe3, 0xcc, 0x13, 0x2e, 0x3b, 0x65}; - -static char plain3des3[] = "84401f78fe6c10876d8ea23094ea5309"; - -static char cipher3desCbc3[] = "3d1de3cc132e3b65" - "7b1f7c7e3b1c948ebd04a75ffba7d2f5"; - -static unsigned char iv5[] = {0x8c, 0xe8, 0x2e, 0xef, 0xbe, 0xa0, 0xda, 0x3c, - 0x44, 0x69, 0x9e, 0xd7, 0xdb, 0x51, 0xb7, 0xd9}; - -static unsigned char aesCtrKey[] = {0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC}; - -static unsigned char mdKey1[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}; - -static unsigned char mdKey2[] = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}; - -static unsigned char shaKey1[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b}; - -static unsigned char shaKey2[] = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa}; - -static unsigned char mdKey4[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}; - -static unsigned char shaKey4[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x13, 0x14}; - - -static MV_CESA_TEST_SESSION desTestSessions[] = -{ -/*000*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]), - NULL, 0, - "DES ECB encode", - }, -/*001*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]), - NULL, 0, - "DES ECB decode", - }, -/*002*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]), - NULL, 0, - "DES CBC encode" - }, -/*003*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]), - NULL, 0, - "DES CBC decode" - }, -/*004*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, NULL, 0, - "NULL Crypto Algorithm encode" - }, -}; - - -static MV_CESA_TEST_SESSION tripleDesTestSessions[] = -{ -/*100*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - NULL, 0, - "3DES ECB encode", - }, -/*101*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - NULL, 0, - "3DES ECB decode", - }, -/*102*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - NULL, 0, - "3DES CBC encode" - }, -/*103*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - NULL, 0, - "3DES CBC decode" - }, -/*104*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - key3des1, sizeof(key3des1), - NULL, 0, - "3DES ECB encode" - }, -/*105*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - key3des2, sizeof(key3des2), - NULL, 0, - "3DES ECB encode" - }, -/*106*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - key3des3, sizeof(key3des3), - NULL, 0, - "3DES ECB encode" - }, -}; - - -static MV_CESA_TEST_SESSION aesTestSessions[] = -{ -/*200*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey2, sizeof(cryptoKey2)/sizeof(cryptoKey2[0]), - NULL, 0, - "AES-128 ECB encode" - }, -/*201*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey2, sizeof(cryptoKey2)/sizeof(cryptoKey2[0]), - NULL, 0, - "AES-128 ECB decode" - }, -/*202*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]), - NULL, 0, - "AES-128 CBC encode" - }, -/*203*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]), - NULL, 0, - "AES-128 CBC decode" - }, -/*204*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey3, sizeof(cryptoKey3)/sizeof(cryptoKey3[0]), - NULL, 0, - "AES-192 ECB encode" - }, -/*205*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey3, sizeof(cryptoKey3)/sizeof(cryptoKey3[0]), - NULL, 0, - "AES-192 ECB decode" - }, -/*206*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - cryptoKey4, sizeof(cryptoKey4)/sizeof(cryptoKey4[0]), - NULL, 0, - "AES-256 ECB encode" - }, -/*207*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_DECODE, - cryptoKey4, sizeof(cryptoKey4)/sizeof(cryptoKey4[0]), - NULL, 0, - "AES-256 ECB decode" - }, -/*208*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CTR, - MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY, - MV_CESA_DIR_ENCODE, - aesCtrKey, sizeof(aesCtrKey)/sizeof(aesCtrKey[0]), - NULL, 0, - "AES-128 CTR encode" - }, -}; - - -static MV_CESA_TEST_SESSION md5TestSessions[] = -{ -/*300*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - mdKey1, sizeof(mdKey1), - "HMAC-MD5 Generate Signature" - }, -/*301*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_DECODE, - NULL, 0, - mdKey1, sizeof(mdKey1), - "HMAC-MD5 Verify Signature" - }, -/*302*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - mdKey2, sizeof(mdKey2), - "HMAC-MD5 Generate Signature" - }, -/*303*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_DECODE, - NULL, 0, - mdKey2, sizeof(mdKey2), - "HMAC-MD5 Verify Signature" - }, -/*304*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - mdKey4, sizeof(mdKey4), - "HMAC-MD5 Generate Signature" - }, -/*305*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_MD5, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - NULL, 0, - "HASH-MD5 Generate Signature" - }, -}; - - -static MV_CESA_TEST_SESSION shaTestSessions[] = -{ -/*400*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - shaKey1, sizeof(shaKey1), - "HMAC-SHA1 Generate Signature" - }, -/*401*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_DECODE, - NULL, 0, - shaKey1, sizeof(shaKey1), - "HMAC-SHA1 Verify Signature" - }, -/*402*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - shaKey2, sizeof(shaKey2), - "HMAC-SHA1 Generate Signature" - }, -/*403*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_DECODE, - NULL, 0, - shaKey2, sizeof(shaKey2), - "HMAC-SHA1 Verify Signature" - }, -/*404*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - shaKey4, sizeof(shaKey4), - "HMAC-SHA1 Generate Signature" - }, -/*405*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_SHA1, MV_CESA_MAC_ONLY, - MV_CESA_DIR_ENCODE, - NULL, 0, - NULL, 0, - "HASH-SHA1 Generate Signature" - }, -}; - -static MV_CESA_TEST_SESSION combinedTestSessions[] = -{ -/*500*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, MV_CESA_DES_KEY_LENGTH, - mdKey4, sizeof(mdKey4), - "DES + MD5 encode" - }, -/*501*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, MV_CESA_DES_KEY_LENGTH, - shaKey4, sizeof(shaKey4), - "DES + SHA1 encode" - }, -/*502*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - mdKey4, sizeof(mdKey4), - "3DES + MD5 encode" - }, -/*503*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - shaKey4, sizeof(shaKey4), - "3DES + SHA1 encode" - }, -/*504*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - mdKey4, sizeof(mdKey4), - "3DES CBC + MD5 encode" - }, -/*505*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - shaKey4, sizeof(shaKey4), - "3DES CBC + SHA1 encode" - }, -/*506*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]), - mdKey4, sizeof(mdKey4), - "AES-128 CBC + MD5 encode" - }, -/*507*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC, - MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC, - MV_CESA_DIR_ENCODE, - cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]), - shaKey4, sizeof(shaKey4), - "AES-128 CBC + SHA1 encode" - }, -/*508*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB, - MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_THEN_CRYPTO, - MV_CESA_DIR_DECODE, - cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]), - mdKey4, sizeof(mdKey4), - "HMAC-MD5 + 3DES decode" - }, -}; - - -static MV_CESA_TEST_DB_ENTRY cesaTestsDB[MAX_TEST_TYPE+1] = -{ - { desTestSessions, sizeof(desTestSessions)/sizeof(desTestSessions[0]) }, - { tripleDesTestSessions, sizeof(tripleDesTestSessions)/sizeof(tripleDesTestSessions[0]) }, - { aesTestSessions, sizeof(aesTestSessions)/sizeof(aesTestSessions[0]) }, - { md5TestSessions, sizeof(md5TestSessions)/sizeof(md5TestSessions[0]) }, - { shaTestSessions, sizeof(shaTestSessions)/sizeof(shaTestSessions[0]) }, - { combinedTestSessions, sizeof(combinedTestSessions)/sizeof(combinedTestSessions[0]) }, - { NULL, 0 } -}; - - -char cesaNullPlainHexText[] = "000000000000000000000000000000000000000000000000"; - -char cesaPlainAsciiText[] = "Now is the time for all "; -char cesaPlainHexEbc[] = "4e6f77206973207468652074696d6520666f7220616c6c20"; -char cesaCipherHexEcb[] = "3fa40e8a984d48156a271787ab8883f9893d51ec4b563b53"; -char cesaPlainHexCbc[] = "1234567890abcdef4e6f77206973207468652074696d6520666f7220616c6c20"; -char cesaCipherHexCbc[] = "1234567890abcdefe5c7cdde872bf27c43e934008c389c0f683788499a7c05f6"; - -char cesaAesPlainHexEcb[] = "000102030405060708090a0b0c0d0e0f"; -char cesaAes128cipherHexEcb[] = "0a940bb5416ef045f1c39458c653ea5a"; -char cesaAes192cipherHexEcb[] = "0060bffe46834bb8da5cf9a61ff220ae"; -char cesaAes256cipherHexEcb[] = "5a6e045708fb7196f02e553d02c3a692"; - -char cesaAsciiStr1[] = "Hi There"; -char cesaDataHexStr1[] = "4869205468657265"; -char cesaHmacMd5digestHex1[] = "9294727a3638bb1c13f48ef8158bfc9d"; -char cesaHmacSha1digestHex1[] = "b617318655057264e28bc0b6fb378c8ef146be00"; -char cesaDataAndMd5digest1[] = "48692054686572659294727a3638bb1c13f48ef8158bfc9d"; -char cesaDataAndSha1digest1[] = "4869205468657265b617318655057264e28bc0b6fb378c8ef146be00"; - -char cesaAesPlainText[] = "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" - "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" - "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" - "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"; - -char cesaAes128CipherCbc[] = "c30e32ffedc0774e6aff6af0869f71aa" - "0f3af07a9a31a9c684db207eb0ef8e4e" - "35907aa632c3ffdf868bb7b29d3d46ad" - "83ce9f9a102ee99d49a53e87f4c3da55"; - -char cesaAesIvPlainText[] = "8ce82eefbea0da3c44699ed7db51b7d9" - "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" - "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" - "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" - "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"; - -char cesaAes128IvCipherCbc[] = "8ce82eefbea0da3c44699ed7db51b7d9" - "c30e32ffedc0774e6aff6af0869f71aa" - "0f3af07a9a31a9c684db207eb0ef8e4e" - "35907aa632c3ffdf868bb7b29d3d46ad" - "83ce9f9a102ee99d49a53e87f4c3da55"; - -char cesaAesCtrPlain[] = "00E0017B27777F3F4A1786F000000001" - "000102030405060708090A0B0C0D0E0F" - "101112131415161718191A1B1C1D1E1F" - "20212223"; - -char cesaAesCtrCipher[] = "00E0017B27777F3F4A1786F000000001" - "C1CF48A89F2FFDD9CF4652E9EFDB72D7" - "4540A42BDE6D7836D59A5CEAAEF31053" - "25B2072F"; - - - -/* Input cesaHmacHex3 is '0xdd' repeated 50 times */ -char cesaHmacMd5digestHex3[] = "56be34521d144c88dbb8c733f0e8b3f6"; -char cesaHmacSha1digestHex3[] = "125d7342b9ac11cd91a39af48aa17b4f63f175d3"; -char cesaDataHexStr3[50*2+1] = ""; -char cesaDataAndMd5digest3[sizeof(cesaDataHexStr3)+sizeof(cesaHmacMd5digestHex3)+8*2+1] = ""; -char cesaDataAndSha1digest3[sizeof(cesaDataHexStr3)+sizeof(cesaHmacSha1digestHex3)+8*2+1] = ""; - -/* Ascii string is "abc" */ -char hashHexStr3[] = "616263"; -char hashMd5digest3[] = "900150983cd24fb0d6963f7d28e17f72"; -char hashSha1digest3[] = "a9993e364706816aba3e25717850c26c9cd0d89d"; - -char hashHexStr80[] = "31323334353637383930" - "31323334353637383930" - "31323334353637383930" - "31323334353637383930" - "31323334353637383930" - "31323334353637383930" - "31323334353637383930" - "31323334353637383930"; - -char hashMd5digest80[] = "57edf4a22be3c955ac49da2e2107b67a"; - -char tripleDesThenMd5digest80[] = "b7726a03aad490bd6c5a452a89a1b271"; -char tripleDesThenSha1digest80[] = "b2ddeaca91030eab5b95a234ef2c0f6e738ff883"; - -char cbc3desThenMd5digest80[] = "6f463057e1a90e0e91ae505b527bcec0"; -char cbc3desThenSha1digest80[] = "1b002ed050be743aa98860cf35659646bb8efcc0"; - -char cbcAes128ThenMd5digest80[] = "6b6e863ac5a71d15e3e9b1c86c9ba05f"; -char cbcAes128ThenSha1digest80[] = "13558472d1fc1c90dffec6e5136c7203452d509b"; - - -static MV_CESA_TEST_CASE cesaTestCases[] = -{ - /* plainHexStr cipherHexStr IV crypto mac digest */ - /* Length Length Offset */ - /*0*/ { NULL, NULL, NULL, 0, 0, -1 }, - /*1*/ { cesaPlainHexEbc, cesaCipherHexEcb, NULL, 24, 0, -1 }, - /*2*/ { cesaPlainHexCbc, cesaCipherHexCbc, NULL, 24, 0, -1 }, - /*3*/ { cesaAesPlainHexEcb, cesaAes128cipherHexEcb, NULL, 16, 0, -1 }, - /*4*/ { cesaAesPlainHexEcb, cesaAes192cipherHexEcb, NULL, 16, 0, -1 }, - /*5*/ { cesaAesPlainHexEcb, cesaAes256cipherHexEcb, NULL, 16, 0, -1 }, - /*6*/ { cesaDataHexStr1, cesaHmacMd5digestHex1, NULL, 0, 8, -1 }, - /*7*/ { NULL, cesaDataAndMd5digest1, NULL, 0, 8, -1 }, - /*8*/ { cesaDataHexStr3, cesaHmacMd5digestHex3, NULL, 0, 50, -1 }, - /*9*/ { NULL, cesaDataAndMd5digest3, NULL, 0, 50, -1 }, -/*10*/ { cesaAesPlainText, cesaAes128IvCipherCbc, iv5, 64, 0, -1 }, -/*11*/ { cesaDataHexStr1, cesaHmacSha1digestHex1, NULL, 0, 8, -1 }, -/*12*/ { NULL, cesaDataAndSha1digest1, NULL, 0, 8, -1 }, -/*13*/ { cesaDataHexStr3, cesaHmacSha1digestHex3, NULL, 0, 50, -1 }, -/*14*/ { NULL, cesaDataAndSha1digest3, NULL, 0, 50, -1 }, -/*15*/ { hashHexStr3, hashMd5digest3, NULL, 0, 3, -1 }, -/*16*/ { hashHexStr3, hashSha1digest3, NULL, 0, 3, -1 }, -/*17*/ { hashHexStr80, tripleDesThenMd5digest80, NULL, 80, 80, -1 }, -/*18*/ { hashHexStr80, tripleDesThenSha1digest80, NULL, 80, 80, -1 }, -/*19*/ { hashHexStr80, cbc3desThenMd5digest80, iv1, 80, 80, -1 }, -/*20*/ { hashHexStr80, cbc3desThenSha1digest80, iv1, 80, 80, -1 }, -/*21*/ { hashHexStr80, cbcAes128ThenMd5digest80, iv5, 80, 80, -1 }, -/*22*/ { hashHexStr80, cbcAes128ThenSha1digest80, iv5, 80, 80, -1 }, -/*23*/ { cesaAesCtrPlain, cesaAesCtrCipher, NULL, 36, 0, -1 }, -/*24*/ { cesaAesIvPlainText, cesaAes128IvCipherCbc, NULL, 64, 0, -1 }, -/*25*/ { plain3des1, cipher3des1, NULL, 0, 0, -1 }, -/*26*/ { plain3des2, cipher3desCbc2, iv3des2,0, 0, -1 }, -/*27*/ { plain3des3, cipher3desCbc3, iv3des3,0, 0, -1 }, -}; - - -/* Key = 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - * 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa - * Input 0xdd repeated "size" times - */ -static MV_CESA_SIZE_TEST mdMultiSizeTest302[] = -{ - { 80, "7a031a640c14a4872814930b1ef3a5b2" }, - { 512, "5488e6c5a14dc72a79f28312ca5b939b" }, - { 1000, "d00814f586a8b78a05724239d2531821" }, - { 1001, "bf07df7b7f49d3f5b5ecacd4e9e63281" }, - { 1002, "1ed4a1a802e87817a819d4e37bb4d0f7" }, - { 1003, "5972ab64a4f265ee371dac2f2f137f90" }, - { 1004, "71f95e7ec3aa7df2548e90898abdb28e" }, - { 1005, "e082790b4857fcfc266e92e59e608814" }, - { 1006, "9500f02fd8ac7fde8b10e4fece9a920d" }, - { 1336, "e42edcce57d0b75b01aa09d71427948b" }, - { 1344, "bb5454ada0deb49ba0a97ffd60f57071" }, - { 1399, "0f44d793e744b24d53f44f295082ee8c" }, - { 1400, "359de8a03a9b707928c6c60e0e8d79f1" }, - { 1401, "e913858b484cbe2b384099ea88d8855b" }, - { 1402, "d9848a164af53620e0540c1d7d87629e" }, - { 1403, "0c9ee1c2c9ef45e9b625c26cbaf3e822" }, - { 1404, "12edd4f609416e3c936170360561b064" }, - { 1405, "7fc912718a05446395345009132bf562" }, - { 1406, "882f17425e579ff0d85a91a59f308aa0" }, - { 1407, "005cae408630a2fb5db82ad9db7e59da" }, - { 1408, "64655f8b404b3fea7a3e3e609bc5088f" }, - { 1409, "4a145284a7f74e01b6bb1a0ec6a0dd80" }, - { 2048, "67caf64475650732def374ebb8bde3fd" }, - { 2049, "6c84f11f472825f7e6cd125c2981884b" }, - { 2050, "8999586754a73a99efbe4dbad2816d41" }, - { 2051, "ba6946b610e098d286bc81091659dfff" }, - { 2052, "d0afa01c92d4d13def2b024f36faed83" }, - { 3072, "61d8beac61806afa2585d74a9a0e6974" }, - { 3074, "f6501a28dcc24d1e4770505c51a87ed3" }, - { 3075, "ea4a6929be67e33e61ff475369248b73" }, - { 4048, "aa8c4d68f282a07e7385acdfa69f4bed" }, - { 4052, "afb5ed2c0e1d430ea59e59ed5ed6b18a" }, - { 4058, "9e8553f9bdd43aebe0bd729f0e600c99" }, - { 6144, "f628f3e5d183fe5cdd3a5abee39cf872" }, - { 6150, "89a3efcea9a2f25f919168ad4a1fd292" }, - { 6400, "cdd176b7fb747873efa4da5e32bdf88f" }, - { 6528, "b1d707b027354aca152c45ee559ccd3f" }, - { 8192, "c600ea4429ac47f9941f09182166e51a" }, - {16384, "16e8754bfbeb4c649218422792267a37" }, - {18432, "0fd0607521b0aa8b52219cfbe215f63e" }, - { 0, NULL }, -}; - -/* Key = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - */ -static MV_CESA_SIZE_TEST mdMultiSizeTest304[] = -{ - { 80, "a456c4723fee6068530af5a2afa71627" }, - { 512, "f85c2a2344f5de68b432208ad13e5794" }, - { 1000, "35464d6821fd4a293a41eb84e274c8c5" }, - { 1001, "c08eedbdce60cceb54bc2d732bb32c8b" }, - { 1002, "5664f71800c011cc311cb6943339c1b8" }, - { 1003, "779c723b044c585dc7802b13e8501bdc" }, - { 1004, "55e500766a2c307bc5c5fdd15e4cacd4" }, - { 1005, "d5f978954f5c38529d1679d2b714f068" }, - { 1006, "cd3efc827ce628b7281b72172693abf9" }, - { 1336, "6f04479910785878ae6335b8d1e87edf" }, - { 1344, "b6d27b50c2bce1ba2a8e1b5cc4324368" }, - { 1399, "65f70a1d4c86e5eaeb0704c8a7816795" }, - { 1400, "3394b5adc4cb3ff98843ca260a44a88a" }, - { 1401, "3a06f3582033a66a4e57e0603ce94e74" }, - { 1402, "e4d97f5ed51edc48abfa46eeb5c31752" }, - { 1403, "3d05e40b080ee3bedf293cb87b7140e7" }, - { 1404, "8cf294fc3cd153ab18dccb2a52cbf244" }, - { 1405, "d1487bd42f6edd9b4dab316631159221" }, - { 1406, "0527123b6bf6936cf5d369dc18c6c70f" }, - { 1407, "3224a06639db70212a0cd1ae1fcc570a" }, - { 1408, "a9e13335612c0356f5e2c27086e86c43" }, - { 1409, "a86d1f37d1ed8a3552e9a4f04dceea98" }, - { 2048, "396905c9b961cd0f6152abfb69c4449c" }, - { 2049, "49f39bff85d9dcf059fadb89efc4a70f" }, - { 2050, "3a2b4823bc4d0415656550226a63e34a" }, - { 2051, "dec60580d406c782540f398ad0bcc7e0" }, - { 2052, "32f76610a14310309eb748fe025081bf" }, - { 3072, "45edc1a42bf9d708a621076b63b774da" }, - { 3074, "9be1b333fe7c0c9f835fb369dc45f778" }, - { 3075, "8c06fcac7bd0e7b7a17fd6508c09a549" }, - { 4048, "0ddaef848184bf0ad98507a10f1e90e4" }, - { 4052, "81976bcaeb274223983996c137875cb8" }, - { 4058, "0b0a7a1c82bc7cbc64d8b7cd2dc2bb22" }, - { 6144, "1c24056f52725ede2dff0d7f9fc9855f" }, - { 6150, "b7f4b65681c4e43ee68ca466ca9ca4ec" }, - { 6400, "443bbaab9f7331ddd4bf11b659cd43c8" }, - { 6528, "216f44f23047cfee03a7a64f88f9a995" }, - { 8192, "ac7a993b2cad54879dba1bde63e39097" }, - { 8320, "55ed7be9682d6c0025b3221a62088d08" }, - {16384, "c6c722087653b62007aea668277175e5" }, - {18432, "f1faca8e907872c809e14ffbd85792d6" }, - { 0, NULL }, -}; - -/* HASH-MD5 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * repeated "size" times - */ -static MV_CESA_SIZE_TEST mdMultiSizeTest305[] = -{ - { 80, "57edf4a22be3c955ac49da2e2107b67a" }, - { 512, "c729ae8f0736cc377a9767a660eaa04e" }, - { 1000, "f1257a8659eb92d36fe14c6bf3852a6a" }, - { 1001, "f8a46fe8ea04fdc8c7de0e84042d3878" }, - { 1002, "da188dd67bff87d58aa3c02af2d0cc0f" }, - { 1003, "961753017feee04c9b93a8e51658a829" }, - { 1004, "dd68c4338608dcc87807a711636bf2af" }, - { 1005, "e338d567d3ce66bf69ada29658a8759b" }, - { 1006, "443c9811e8b92599b0b149e8d7ec700a" }, - { 1336, "89a98511706008ba4cbd0b4a24fa5646" }, - { 1344, "335a919805f370b9e402a62c6fe01739" }, - { 1399, "5d18d0eddcd84212fe28d812b5e80e3b" }, - { 1400, "6b695c240d2dffd0dffc99459ca76db6" }, - { 1401, "49590f61298a76719bc93a57a30136f5" }, - { 1402, "94c2999fa3ef1910a683d69b2b8476f2" }, - { 1403, "37073a02ab00ecba2645c57c228860db" }, - { 1404, "1bcd06994fce28b624f0c5fdc2dcdd2b" }, - { 1405, "11b93671a64c95079e8cf9e7cddc8b3d" }, - { 1406, "4b6695772a4c66313fa4871017d05f36" }, - { 1407, "d1539b97fbfda1c075624e958de19c5b" }, - { 1408, "b801b9b69920907cd018e8063092ede9" }, - { 1409, "b765f1406cfe78e238273ed01bbcaf7e" }, - { 2048, "1d7e2c64ac29e2b3fb4c272844ed31f5" }, - { 2049, "71d38fac49c6b1f4478d8d88447bcdd0" }, - { 2050, "141c34a5592b1bebfa731e0b23d0cdba" }, - { 2051, "c5e1853f21c59f5d6039bd13d4b380d8" }, - { 2052, "dd44a0d128b63d4b5cccd967906472d7" }, - { 3072, "37d158e33b21390822739d13db7b87fe" }, - { 3074, "aef3b209d01d39d0597fe03634bbf441" }, - { 3075, "335ffb428eabf210bada96d74d5a4012" }, - { 4048, "2434c2b43d798d2819487a886261fc64" }, - { 4052, "ac2fa84a8a33065b2e92e36432e861f8" }, - { 4058, "856781f85616c341c3533d090c1e1e84" }, - { 6144, "e5d134c652c18bf19833e115f7a82e9b" }, - { 6150, "a09a353be7795fac2401dac5601872e6" }, - { 6400, "08b9033ac6a1821398f50af75a2dbc83" }, - { 6528, "3d47aa193a8540c091e7e02f779e6751" }, - { 8192, "d3164e710c0626f6f395b38f20141cb7" }, - { 8320, "b727589d9183ff4e8491dd24466974a3" }, - {16384, "3f54d970793d2274d5b20d10a69938ac" }, - {18432, "f558511dcf81985b7a1bb57fad970531" }, - { 0, NULL }, -}; - - -/* Key = 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - * 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa - * 0xaa, 0xaa, 0xaa, 0xaa - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - */ -static MV_CESA_SIZE_TEST shaMultiSizeTest402[] = -{ - { 80, "e812f370e659705a1649940d1f78cd7af18affd3" }, - { 512, "e547f886b2c15d995ed76a8a924cb408c8080f66" }, - { 1000, "239443194409f1a5342ecde1a092c8f3a3ed790a" }, - { 1001, "f278ab9a102850a9f48dc4e9e6822afe2d0c52b5" }, - { 1002, "8bcc667df5ab6ece988b3af361d09747c77f4e72" }, - { 1003, "0fae6046c7dc1d3e356b25af836f6077a363f338" }, - { 1004, "0ea48401cc92ae6bc92ae76685269cb0167fbe1a" }, - { 1005, "ecbcd7c879b295bafcd8766cbeac58cc371e31d1" }, - { 1006, "eb4a4a3d07d1e9a15e6f1ab8a9c47f243e27324c" }, - { 1336, "f5950ee1d77c10e9011d2149699c9366fe52529c" }, - { 1344, "b04263604a63c351b0b3b9cf1785b4bdba6c8838" }, - { 1399, "8cb1cff61d5b784045974a2fc69386e3b8d24218" }, - { 1400, "9bb2f3fcbeddb2b90f0be797cd647334a2816d51" }, - { 1401, "23ae462a7a0cb440f7445791079a5d75a535dd33" }, - { 1402, "832974b524a4d3f9cc2f45a3cabf5ccef65cd2aa" }, - { 1403, "d1c683742fe404c3c20d5704a5430e7832a7ec95" }, - { 1404, "867c79042e64f310628e219d8b85594cd0c7adc3" }, - { 1405, "c9d81d49d13d94358f56ccfd61af02b36c69f7c3" }, - { 1406, "0df43daab2786172f9b8d07d61f14a070cf1287a" }, - { 1407, "0fd8f3ad7f169534b274d4c66bbddd89f759e391" }, - { 1408, "3987511182b18473a564436003139b808fa46343" }, - { 1409, "ef667e063c9e9f539a8987a8d0bd3066ee85d901" }, - { 2048, "921109c99f3fedaca21727156d5f2b4460175327" }, - { 2049, "47188600dd165eb45f27c27196d3c46f4f042c1b" }, - { 2050, "8831939904009338de10e7fa670847041387807d" }, - { 2051, "2f8ebb5db2997d614e767be1050366f3641e7520" }, - { 2052, "669e51cd730dae158d3bef8adba075bd95a0d011" }, - { 3072, "cfee66cfd83abc8451af3c96c6b35a41cc6c55f5" }, - { 3074, "216ea26f02976a261b7d21a4dd3085157bedfabd" }, - { 3075, "bd612ebba021fd8e012b14c3bd60c8c5161fabc0" }, - { 4048, "c2564c1fdf2d5e9d7dde7aace2643428e90662e8" }, - { 4052, "91ce61fe924b445dfe7b5a1dcd10a27caec16df6" }, - { 4058, "db2a9be5ee8124f091c7ebd699266c5de223c164" }, - { 6144, "855109903feae2ba3a7a05a326b8a171116eb368" }, - { 6150, "37520bb3a668294d9c7b073e7e3daf8fee248a78" }, - { 6400, "60a353c841b6d2b1a05890349dad2fa33c7536b7" }, - { 6528, "9e53a43a69bb42d7c8522ca8bd632e421d5edb36" }, - { 8192, "a918cb0da862eaea0a33ee0efea50243e6b4927c" }, - { 8320, "29a5dcf55d1db29cd113fcf0572ae414f1c71329" }, - {16384, "6fb27966138e0c8d5a0d65ace817ebd53633cee1" }, - {18432, "ca09900d891c7c9ae2a559b10f63a217003341c1" }, - { 0, NULL }, -}; - -/* Key = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * 0x11, 0x12, 0x13, 0x14 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - */ -static MV_CESA_SIZE_TEST shaMultiSizeTest404[] = -{ - { 80, "beaf20a34b06a87558d156c0949bc3957d40222e" }, - { 512, "3353955358d886bc2940a3c7f337ff7dafb59c7b" }, - { 1000, "8737a542c5e9b2b6244b757ebb69d5bd602a829f" }, - { 1001, "fd9e7582d8a5d3c9fe3b923e4e6a41b07a1eb4d4" }, - { 1002, "a146d14a6fc3c274ff600568f4d75b977989e00d" }, - { 1003, "be22601bbc027ddef2dec97d30b3dc424fd803c5" }, - { 1004, "3e71fe99b2fe2b7bfdf4dbf0c7f3da25d7ea35e7" }, - { 1005, "2c422735d7295408fddd76f5e8a83a2a8da13df3" }, - { 1006, "6d875319049314b61855101a647b9ba3313428e6" }, - { 1336, "c1631ea80bad9dc43a180712461b65a0598c711c" }, - { 1344, "816069bf91d34581005746e2e0283d0f9c7b7605" }, - { 1399, "4e139866dc61cfcb8b67ca2ebd637b3a538593af" }, - { 1400, "ff2a0f8dd2b02c5417910f6f55d33a78e081a723" }, - { 1401, "ab00c12be62336964cbce31ae97fe2a0002984d5" }, - { 1402, "61349e7f999f3a1acc56c3e9a5060a9c4a7b05b6" }, - { 1403, "3edbc0f61e435bc1317fa27d840076093fb79353" }, - { 1404, "d052c6dfdbe63d45dab23ef9893e2aa4636aca1e" }, - { 1405, "0cc16b7388d67bf0add15a31e6e6c753cfae4987" }, - { 1406, "c96ba7eaad74253c38c22101b558d2850b1d1b90" }, - { 1407, "3445428a40d2c6556e7c55797ad8d323b61a48d9" }, - { 1408, "8d6444f937a09317c89834187b8ea9b8d3a8c56b" }, - { 1409, "c700acd3ecd19014ea2bdb4d42510c467e088475" }, - { 2048, "ee27d2a0cb77470c2f496212dfd68b5bb7b04e4b" }, - { 2049, "683762d7a02983b26a6d046e6451d9cd82c25932" }, - { 2050, "0fd20f1d55a9ee18363c2a6fd54aa13aee69992f" }, - { 2051, "86c267d8cc4bc8d59090e4f8b303da960fd228b7" }, - { 2052, "452395ae05b3ec503eea34f86fc0832485ad97c1" }, - { 3072, "75198e3cfd0b9bcff2dabdf8e38e6fdaa33ca49a" }, - { 3074, "4e24785ef080141ce4aab4675986d9acea624d7c" }, - { 3075, "3a20c5978dd637ec0e809bf84f0d9ccf30bc65bf" }, - { 4048, "3c32da256be7a7554922bf5fed51b0d2d09e59ad" }, - { 4052, "fff898426ea16e54325ae391a32c6c9bce4c23c0" }, - { 4058, "c800b9e562e1c91e1310116341a3c91d37f848ec" }, - { 6144, "d91d509d0cc4376c2d05bf9a5097717a373530e6" }, - { 6150, "d957030e0f13c5df07d9eec298542d8f94a07f12" }, - { 6400, "bb745313c3d7dc17b3f955e5534ad500a1082613" }, - { 6528, "77905f80d9ca82080bbb3e5654896dabfcfd1bdb" }, - { 8192, "5237fd9a81830c974396f99f32047586612ff3c0" }, - { 8320, "57668e28d5f2dba0839518a11db0f6af3d7e08bf" }, - {16384, "62e093fde467f0748087beea32e9af97d5c61241" }, - {18432, "845fb33130c7d6ea554fd5aacb9c50cf7ccb5929" }, - { 0, NULL }, -}; - -/* HASH-SHA1 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * repeated "size" times - */ -static MV_CESA_SIZE_TEST shaMultiSizeTest405[] = -{ - { 80, "50abf5706a150990a08b2c5ea40fa0e585554732" }, - { 512, "f14516a08948fa27917a974d219741a697ba0087" }, - { 1000, "0bd18c378d5788817eb4f1e5dc07d867efa5cbf4" }, - { 1001, "ca29b85c35db1b8aef83c977893a11159d1b7aa2" }, - { 1002, "d83bc973eaaedb8a31437994dabbb3304b0be086" }, - { 1003, "2cf7bbef0acd6c00536b5c58ca470df9a3a90b6c" }, - { 1004, "e4375d09b1223385a8a393066f8209acfd936a80" }, - { 1005, "1029b38043e027745d019ce1d2d68e3d8b9d8f99" }, - { 1006, "deea16dcebbd8ac137e2b984deb639b9fb5e9680" }, - { 1336, "ea031b065fff63dcfb6a41956e4777520cdbc55d" }, - { 1344, "b52096c6445e6c0a8355995c70dc36ae186c863c" }, - { 1399, "cde2f6f8379870db4b32cf17471dc828a8dbff2b" }, - { 1400, "e53ff664064bc09fe5054c650806bd42d8179518" }, - { 1401, "d1156db5ddafcace64cdb510ff0d4af9b9a8ad64" }, - { 1402, "34ede0e9a909dd84a2ae291539105c0507b958e1" }, - { 1403, "a772ca3536da77e6ad3251e4f9e1234a4d7b87c0" }, - { 1404, "29740fd2b04e7a8bfd32242db6233156ad699948" }, - { 1405, "65b17397495b70ce4865dad93bf991b74c97cce1" }, - { 1406, "a7ee89cd0754061fdb91af7ea6abad2c69d542e3" }, - { 1407, "3eebf82f7420188e23d328b7ce93580b279a5715" }, - { 1408, "e08d3363a8b9a490dfb3a4c453452b8f114deeec" }, - { 1409, "95d74df739181a4ff30b8c39e28793a36598e924" }, - { 2048, "aa40262509c2abf84aab0197f83187fc90056d91" }, - { 2049, "7dec28ef105bc313bade8d9a7cdeac58b99de5ea" }, - { 2050, "d2e30f77ec81197de20f56588a156094ecb88450" }, - { 2051, "6b22ccc874833e96551a39da0c0edcaa0d969d92" }, - { 2052, "f843141e57875cd669af58744bc60aa9ea59549c" }, - { 3072, "09c5fedeaa62c132e673cc3c608a00142273d086" }, - { 3074, "b09e95eea9c7b1b007a58accec488301901a7f3d" }, - { 3075, "e6226b77b4ada287a8c9bbcf4ed71eec5ce632dc" }, - { 4048, "e99394894f855821951ddddf5bfc628547435f5c" }, - { 4052, "32d2f1af38be9cfba6cd03d55a254d0b3e1eb382" }, - { 4058, "d906552a4f2aca3a22e1fecccbcd183d7289d0ef" }, - { 6144, "2e7f62d35a860988e1224dc0543204af19316041" }, - { 6150, "d6b89698ee133df46fec9d552fadc328aa5a1b51" }, - { 6400, "dff50e90c46853988fa3a4b4ce5dda6945aae976" }, - { 6528, "9e63ec0430b96db02d38bc78357a2f63de2ab7f8" }, - { 8192, "971eb71ed60394d5ab5abb12e88420bdd41b5992" }, - { 8320, "91606a31b46afeaac965cecf87297e791b211013" }, - {16384, "547f830a5ec1f5f170ce818f156b1002cabc7569" }, - {18432, "f16f272787f3b8d539652e4dc315af6ab4fda0ef" }, - { 0, NULL }, -}; - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef; - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to 3DES block size (8 bytes) allowed - */ -static MV_CESA_SIZE_TEST tripleDesMdMultiSizeTest502[] = -{ - { 64, "9586962a2aaaef28803dec2e17807a7f" }, - { 80, "b7726a03aad490bd6c5a452a89a1b271" }, - { 352, "f1ed9563aecc3c0d2766eb2bed3b4e4c" }, - { 512, "0f9decb11ab40fe86f4d4d9397bc020e" }, - { 1000, "3ba69deac12cab8ff9dff7dbd9669927" }, - { 1336, "6cf47bf1e80e03e2c1d0945bc50d37d2" }, - { 1344, "4be388dab21ceb3fa1b8d302e9b821f7" }, - { 1400, "a58b79fb21dd9bfc6ec93e3b99fb0ef1" }, - { 1408, "8bc97379fc2ac3237effcdd4f7a86528" }, - { 2048, "1339f03ab3076f25a20bc4cba16eb5bf" }, - { 3072, "731204d2d90c4b36ae41f5e1fb874288" }, - { 4048, "c028d998cfda5642547b7e1ed5ea16e4" }, - { 6144, "b1b19cd910cc51bd22992f1e59f1e068" }, - { 6400, "44e4613496ba622deb0e7cb768135a2f" }, - { 6528, "3b06b0a86f8db9cd67f9448dfcf10549" }, - { 8192, "d581780b7163138a0f412be681457d82" }, - {16384, "03b8ac05527faaf1bed03df149c65ccf" }, - {18432, "677c8a86a41dab6c5d81b85b8fb10ff6" }, - { 0, NULL }, -}; - - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef; - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * 0x11, 0x12, 0x13, 0x14 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to 3DES block size (8 bytes) allowed - */ -static MV_CESA_SIZE_TEST tripleDesShaMultiSizeTest503[] = -{ - { 64, "44a1e9bcbfc1429630d9ea68b7a48b0427a684f2" }, - { 80, "b2ddeaca91030eab5b95a234ef2c0f6e738ff883" }, - { 352, "4b91864c7ff629bdff75d9726421f76705452aaf" }, - { 512, "6dd37faceeb2aa98ba74f4242ed6734a4d546af5" }, - { 1000, "463661c30300be512a9df40904f0757cde5f1141" }, - { 1336, "b931f831d9034fe59c65176400b039fe9c1f44a5" }, - { 1344, "af8866b1cd4a4887d6185bfe72470ffdfb3648e1" }, - { 1400, "49c6caf07296d5e31d2504d088bc5b20c3ee7cdb" }, - { 1408, "fcae8deedbc6ebf0763575dc7e9de075b448a0f4" }, - { 2048, "edece5012146c1faa0dd10f50b183ba5d2af58ac" }, - { 3072, "5b83625adb43a488b8d64fecf39bb766818547b7" }, - { 4048, "d2c533678d26c970293af60f14c8279dc708bfc9" }, - { 6144, "b8f67af4f991b08b725f969b049ebf813bfacc5c" }, - { 6400, "d9a6c7f746ac7a60ef2edbed2841cf851c25cfb0" }, - { 6528, "376792b8c8d18161d15579fb7829e6e3a27e9946" }, - { 8192, "d890eabdca195b34ef8724b28360cffa92ae5655" }, - {16384, "a167ee52639ec7bf19aee9c6e8f76667c14134b9" }, - {18432, "e4396ab56f67296b220985a12078f4a0e365d2cc" }, - { 0, NULL }, -}; - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef - * IV = 0x12345678, 0x90abcdef - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to 3DES block size (8 bytes) allowed - */ -static MV_CESA_SIZE_TEST cbc3desMdMultiSizeTest504[] = -{ - { 64, "8d10e00802460ede0058c139ba48bd2d" }, - { 80, "6f463057e1a90e0e91ae505b527bcec0" }, - { 352, "4938d48bdf86aece2c6851e7c6079788" }, - { 512, "516705d59f3cf810ebf2a13a23a7d42e" }, - { 1000, "a5a000ee5c830e67ddc6a2d2e5644b31" }, - { 1336, "44af60087b74ed07950088efbe3b126a" }, - { 1344, "1f5b39e0577920af731dabbfcf6dfc2a" }, - { 1400, "6804ea640e29b9cd39e08bc37dbce734" }, - { 1408, "4fb436624b02516fc9d1535466574bf9" }, - { 2048, "c909b0985c423d8d86719f701e9e83db" }, - { 3072, "cfe0bc34ef97213ee3d3f8b10122db21" }, - { 4048, "03ea10b5ae4ddeb20aed6af373082ed1" }, - { 6144, "b9a0ff4f87fc14b3c2dc6f0ed0998fdf" }, - { 6400, "6995f85d9d4985dd99e974ec7dda9dd6" }, - { 6528, "bbbb548ce2fa3d58467f6a6a5168a0e6" }, - { 8192, "afe101fbe745bb449ae4f50d10801456" }, - {16384, "9741706d0b1c923340c4660ff97cacdf" }, - {18432, "b0217becb73cb8f61fd79c7ce9d023fb" }, - { 0, NULL }, -}; - - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef; - * IV = 0x12345678, 0x90abcdef - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * 0x11, 0x12, 0x13, 0x14 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to 3DES block size (8 bytes) allowed - */ -static MV_CESA_SIZE_TEST cbc3desShaMultiSizeTest505[] = -{ - { 64, "409187e5bdb0be4a7754ca3747f7433dc4f01b98" }, - { 80, "1b002ed050be743aa98860cf35659646bb8efcc0" }, - { 352, "6cbf7ebe50fa4fa6eecc19eca23f9eae553ccfff" }, - { 512, "cfb5253fb4bf72b743320c30c7e48c54965853b0" }, - { 1000, "95e04e1ca2937e7c5a9aba9e42d2bcdb8a7af21f" }, - { 1336, "3b5c1f5eee5837ebf67b83ae01405542d77a6627" }, - { 1344, "2b3d42ab25615437f98a1ee310b81d07a02badc2" }, - { 1400, "7f8687df7c1af44e4baf3c934b6cca5ab6bc993e" }, - { 1408, "473a581c5f04f7527d50793c845471ac87e86430" }, - { 2048, "e41d20cae7ebe34e6e828ed62b1e5734019037bb" }, - { 3072, "275664afd7a561d804e6b0d204e53939cde653ae" }, - { 4048, "0d220cc5b34aeeb46bbbd637dde6290b5a8285a3" }, - { 6144, "cb393ddcc8b1c206060625b7d822ef9839e67bc5" }, - { 6400, "dd3317e2a627fc04800f74a4b05bfda00fab0347" }, - { 6528, "8a74c3b2441ab3f5a7e08895cc432566219a7c41" }, - { 8192, "b8e6ef3a549ed0e005bd5b8b1a5fe6689e9711a7" }, - {16384, "55f59404008276cdac0e2ba0d193af2d40eac5ce" }, - {18432, "86ae6c4fc72369a54cce39938e2d0296cd9c6ec5" }, - { 0, NULL }, -}; - - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef - * IV = 0x12345678, 0x90abcdef - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to AES block size (16 bytes) allowed - */ -static MV_CESA_SIZE_TEST cbcAes128md5multiSizeTest506[] = -{ - { 16, "7ca4c2ba866751598720c5c4aa0d6786" }, - { 64, "7dba7fb988e80da609b1fea7254bced8" }, - { 80, "6b6e863ac5a71d15e3e9b1c86c9ba05f" }, - { 352, "a1ceb9c2e3021002400d525187a9f38c" }, - { 512, "596c055c1c55db748379223164075641" }, - { 1008, "f920989c02f3b3603f53c99d89492377" }, - { 1344, "2e496b73759d77ed32ea222dbd2e7b41" }, - { 1408, "7178c046b3a8d772efdb6a71c4991ea4" }, - { 2048, "a917f0099c69eb94079a8421714b6aad" }, - { 3072, "693cd5033d7f5391d3c958519fa9e934" }, - { 4048, "139dca91bcff65b3c40771749052906b" }, - { 6144, "428d9cef6df4fb70a6e9b6bbe4819e55" }, - { 6400, "9c0b909e76daa811e12b1fc17000a0c4" }, - { 6528, "ad876f6297186a7be1f1b907ed860eda" }, - { 8192, "479cbbaca37dd3191ea1f3e8134a0ef4" }, - {16384, "60fda559c74f91df538100c9842f2f15" }, - {18432, "4a3eb1cba1fa45f3981270953f720c42" }, - { 0, NULL }, -}; - - -/* CryptoKey = 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef, - * 0x01234567, 0x89abcdef; - * IV = 0x12345678, 0x90abcdef - * MacKey = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - * 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 - * 0x11, 0x12, 0x13, 0x14 - * InputHexStr = "31323334353637383930" (ASCII = "1234567890") - * Note: only sizes aligned to AES block size (16 bytes) allowed - */ -static MV_CESA_SIZE_TEST cbcAes128sha1multiSizeTest507[] = -{ - { 16, "9aa8dc1c45f0946daf78057fa978759c625c1fee" }, - { 64, "9f588fc1ede851e5f8b20256abc9979465ae2189" }, - { 80, "13558472d1fc1c90dffec6e5136c7203452d509b" }, - { 352, "6b93518e006cfaa1f7adb24615e7291fb0a27e06" }, - { 512, "096874951a77fbbf333e49d80c096ee2016e09bd" }, - { 1008, "696fc203c2e4b5ae0ec5d1db3f623c490bc6dbac" }, - { 1344, "79bf77509935ccd3528caaac6a5eb6481f74029b" }, - { 1408, "627f9462b95fc188e8cfa7eec15119bdc5d4fcf1" }, - { 2048, "3d50d0c005feba92fe41502d609fced9c882b4d1" }, - { 3072, "758807e5b983e3a91c06fb218fe0f73f77111e94" }, - { 4048, "ca90e85242e33f005da3504416a52098d0d31fb2" }, - { 6144, "8044c1d4fd06642dfc46990b4f18b61ef1e972cf" }, - { 6400, "166f1f4ea57409f04feba9fb1e39af0e00bd6f43" }, - { 6528, "0389016a39485d6e330f8b4215ddf718b404f7e9" }, - { 8192, "6df7ee2a8b61d6f7f860ce8dbf778f0c2a5b508b" }, - {16384, "a70a6d8dfa1f91ded621c3dbaed34162bc48783f" }, - {18432, "8dfad627922ce15df1eed10bdbed49244efa57db" }, - { 0, NULL }, -}; - - -void cesaTestPrintStatus(void); - - -/*------------------------- LOCAL FUNCTIONs ---------------------------------*/ -MV_STATUS testCmd(int sid, int iter, MV_CESA_COMMAND* pCmd, - MV_CESA_TEST_SESSION* pTestSession, MV_U8* pIV, int ivSize); -MV_STATUS testClose(int idx); -MV_STATUS testOpen(int idx); -void close_session(int sid); -void cesaTestCheckReady(const MV_CESA_RESULT *r); -void cesaCheckReady(MV_CESA_RESULT* r); -void printTestResults(int idx, MV_STATUS status, int checkMode); -void cesaLastResult(void); -void cesaTestPrintReq(int req, int offset, int size); - -void cesaTestPrintStatus(void); -void cesaTestPrintSession(int idx); -void sizeTest(int testIdx, int iter, int checkMode); -void multiTest(int iter, int reqSize, int checkMode); -void oneTest(int testIdx, int caseIdx,int iter, int reqSize, int checkMode); -void multiSizeTest(int idx, int iter, int checkMode, char* inputData); -void cesaTest(int iter, int reqSize, int checkMode); -void cesaOneTest(int testIdx, int caseIdx,int iter, int reqSize, int checkMode); -void combiTest(int iter, int reqSize, int checkMode); -void shaTest(int iter, int reqSize, int checkMode); -void mdTest(int iter, int reqSize, int checkMode); -void aesTest(int iter, int reqSize, int checkMode); -void tripleDesTest(int iter, int reqSize, int checkMode); -void desTest(int iter, int reqSize, int checkMode); -void cesaTestStop(void); -MV_STATUS testRun(int idx, int caseIdx, int iter,int reqSize, int checkMode); -void cesaTestStart(int bufNum, int bufSize); - - -static MV_U32 getRate(MV_U32* remainder) -{ - MV_U32 kBits, milliSec, rate; - - milliSec = 0; - if( (cesaEndTicks - cesaBeginTicks) > 0) - { - milliSec = CESA_TEST_TICK_TO_MS(cesaEndTicks - cesaBeginTicks); - } - if(milliSec == 0) - { - if(remainder != NULL) - *remainder = 0; - return 0; - } - - kBits = (cesaIteration*cesaRateSize*8)/1000; - rate = kBits/milliSec; - if(remainder != NULL) - *remainder = ((kBits % milliSec)*10)/milliSec; - - return rate; -} - -static char* extractMbuf(MV_CESA_MBUF *pMbuf, - int offset, int size, char* hexStr) -{ - mvCesaCopyFromMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset, size); - mvBinToHex((const MV_U8*)cesaBinBuffer, hexStr, size); - - return hexStr; -} - -static MV_BOOL cesaCheckMbuf(MV_CESA_MBUF *pMbuf, - const char* hexString, int offset, - int checkSize) -{ - MV_BOOL isFailed = MV_FALSE; - MV_STATUS status; - int size = strlen(hexString)/2; - int checkedSize = 0; -/* - mvOsPrintf("cesaCheckMbuf: pMbuf=%p, offset=%d, checkSize=%d, mBufSize=%d\n", - pMbuf, offset, checkSize, pMbuf->mbufSize); -*/ - if(pMbuf->mbufSize < (checkSize + offset)) - { - mvOsPrintf("checkSize (%d) is too large: offset=%d, mbufSize=%d\n", - checkSize, offset, pMbuf->mbufSize); - return MV_TRUE; - } - status = mvCesaCopyFromMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset, checkSize); - if(status != MV_OK) - { - mvOsPrintf("CesaTest: Can't copy %d bytes from Mbuf=%p to checkBuf=%p\n", - checkSize, pMbuf, cesaBinBuffer); - return MV_TRUE; - } -/* - mvDebugMemDump(cesaBinBuffer, size, 1); -*/ - mvHexToBin(hexString, (MV_U8*)cesaExpBinBuffer, size); - - /* Compare buffers */ - while(checkSize > checkedSize) - { - size = MV_MIN(size, (checkSize - checkedSize)); - if(memcmp(cesaExpBinBuffer, &cesaBinBuffer[checkedSize], size) != 0) - { - mvOsPrintf("CheckMbuf failed: checkSize=%d, size=%d, checkedSize=%d\n", - checkSize, size, checkedSize); - mvDebugMemDump(&cesaBinBuffer[checkedSize], size, 1); - mvDebugMemDump(cesaExpBinBuffer, size, 1); - - isFailed = MV_TRUE; - break; - } - checkedSize += size; - } - - return isFailed; -} - -static MV_STATUS cesaSetMbuf(MV_CESA_MBUF *pMbuf, - const char* hexString, - int offset, int reqSize) -{ - MV_STATUS status = MV_OK; - int copySize, size = strlen(hexString)/2; - - mvHexToBin(hexString, (MV_U8*)cesaBinBuffer, size); - - copySize = 0; - while(reqSize > copySize) - { - size = MV_MIN(size, (reqSize - copySize)); - - status = mvCesaCopyToMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset+copySize, size); - if(status != MV_OK) - { - mvOsPrintf("cesaSetMbuf Error: Copy %d of %d bytes to MBuf\n", - copySize, reqSize); - break; - } - copySize += size; - } - pMbuf->mbufSize = offset+copySize; - return status; -} - -static MV_CESA_TEST_SESSION* getTestSessionDb(int idx, int* pTestIdx) -{ - int testIdx, dbIdx = idx/100; - - if(dbIdx > MAX_TEST_TYPE) - { - mvOsPrintf("Wrong index %d - No such test type\n", idx); - return NULL; - } - testIdx = idx % 100; - - if(testIdx >= cesaTestsDB[dbIdx].numSessions) - { - mvOsPrintf("Wrong index %d - No such test\n", idx); - return NULL; - } - if(pTestIdx != NULL) - *pTestIdx = testIdx; - - return cesaTestsDB[dbIdx].pSessions; -} - -/* Debug */ -void cesaTestPrintReq(int req, int offset, int size) -{ - MV_CESA_MBUF* pMbuf; - - mvOsPrintf("cesaTestPrintReq: req=%d, offset=%d, size=%d\n", - req, offset, size); - mvDebugMemDump(cesaCmdRing, 128, 4); - - pMbuf = cesaCmdRing[req].pSrc; - mvCesaDebugMbuf("src", pMbuf, offset,size); - pMbuf = cesaCmdRing[req].pDst; - mvCesaDebugMbuf("dst", pMbuf, offset, size); - - cesaTestPrintStatus(); -} - -void cesaLastResult(void) -{ - mvOsPrintf("Last Result: ReqId = %d, SessionId = %d, rc = (%d)\n", - (MV_U32)cesaResult.pReqPrv, cesaResult.sessionId, - cesaResult.retCode); -} - -void printTestResults(int idx, MV_STATUS status, int checkMode) -{ - int testIdx; - MV_CESA_TEST_SESSION* pTestSessions = getTestSessionDb(idx, &testIdx); - - if(pTestSessions == NULL) - return; - - mvOsPrintf("%-35s %4dx%-4d : ", pTestSessions[testIdx].name, - cesaIteration, cesaReqSize); - if( (status == MV_OK) && - (cesaCryptoError == 0) && - (cesaError == 0) && - (cesaReqIdError == 0) ) - { - mvOsPrintf("Passed, Rate=%3u.%u Mbps (%5u cpp)\n", - cesaRate, cesaRateAfterDot, cesaEndTicks - cesaBeginTicks); - } - else - { - mvOsPrintf("Failed, Status = 0x%x\n", status); - if(cesaCryptoError > 0) - mvOsPrintf("cryptoError : %d\n", cesaCryptoError); - if(cesaReqIdError > 0) - mvOsPrintf("reqIdError : %d\n", cesaReqIdError); - if(cesaError > 0) - mvOsPrintf("cesaError : %d\n", cesaError); - } - if(cesaTestIsrMissCount > 0) - mvOsPrintf("cesaIsrMissed : %d\n", cesaTestIsrMissCount); -} - -void cesaCheckReady(MV_CESA_RESULT* r) -{ - int reqId; - MV_CESA_MBUF *pMbuf; - MV_BOOL isFailed; - - cesaResult = *r; - reqId = (int)cesaResult.pReqPrv; - pMbuf = cesaCmdRing[reqId].pDst; - -/* - mvOsPrintf("cesaCheckReady: reqId=%d, checkOffset=%d, checkSize=%d\n", - reqId, cesaCheckOffset, cesaCheckSize); -*/ - /* Check expected reqId */ - if(reqId != cesaExpReqId) - { - cesaReqIdError++; -/* - mvOsPrintf("CESA reqId Error: cbIter=%d (%d), reqId=%d, expReqId=%d\n", - cesaCbIter, cesaIteration, reqId, cesaExpReqId); -*/ - } - else - { - if( (cesaCheckMode == CESA_FULL_CHECK_MODE) || - (cesaCheckMode == CESA_FAST_CHECK_MODE) ) - { - if(cesaResult.retCode != MV_OK) - { - cesaError++; - - mvOsPrintf("CESA Error: cbIter=%d (%d), reqId=%d, rc=%d\n", - cesaCbIter, cesaIteration, reqId, cesaResult.retCode); - } - else - { - if( (cesaCheckSize > 0) && (cesaOutputHexStr != NULL) ) - { - /* Check expected output */ - - isFailed = cesaCheckMbuf(pMbuf, cesaOutputHexStr, cesaCheckOffset, cesaCheckSize); - if(isFailed) - { - mvOsPrintf("CESA Crypto Error: cbIter=%d (%d), reqId=%d\n", - cesaCbIter, cesaIteration, reqId); - - CESA_TEST_DEBUG_PRINT(("Error: reqId=%d, reqSize=%d, checkOffset=%d, checkSize=%d\n", - reqId, cesaReqSize, cesaCheckOffset, cesaCheckSize)); - - CESA_TEST_DEBUG_PRINT(("Output str: %s\n", cesaOutputHexStr)); - - CESA_TEST_DEBUG_CODE( mvCesaDebugMbuf("error", pMbuf, 0, cesaCheckOffset+cesaCheckSize) ); - - cesaCryptoError++; - } - } - } - } - } - if(cesaCheckMode == CESA_SHOW_CHECK_MODE) - { - extractMbuf(pMbuf, cesaCheckOffset, cesaCheckSize, cesaHexBuffer); - mvOsPrintf("%4d, %s\n", cesaCheckOffset, cesaHexBuffer); - } - - cesaCbIter++; - if(cesaCbIter >= cesaIteration) - { - cesaCbIter = 0; - cesaExpReqId = 0; - cesaIsReady = MV_TRUE; - - cesaEndTicks = CESA_TEST_TICK_GET(); - cesaRate = getRate(&cesaRateAfterDot); - } - else - { - cesaExpReqId = reqId + 1; - if(cesaExpReqId == CESA_DEF_REQ_SIZE) - cesaExpReqId = 0; - } -} - - -#ifdef MV_NETBSD -static int cesaTestReadyIsr(void *arg) -#else -#ifdef __KERNEL__ -static irqreturn_t cesaTestReadyIsr( int irq , void *dev_id) -#endif -#ifdef MV_VXWORKS -void cesaTestReadyIsr(void) -#endif -#endif -{ - MV_U32 cause; - MV_STATUS status; - MV_CESA_RESULT result; - - cesaTestIsrCount++; - /* Clear cause register */ - cause = MV_REG_READ(MV_CESA_ISR_CAUSE_REG); - if( (cause & MV_CESA_CAUSE_ACC_DMA_ALL_MASK) == 0) - { - mvOsPrintf("cesaTestReadyIsr: cause=0x%x\n", cause); -#ifdef MV_NETBSD - return 0; -#else -#ifdef __KERNEL__ - return 1; -#else - return; -#endif -#endif - } - - MV_REG_WRITE(MV_CESA_ISR_CAUSE_REG, 0); - - while(MV_TRUE) - { - /* Get Ready requests */ - status = mvCesaReadyGet(&result); - if(status == MV_OK) - cesaCheckReady(&result); - - break; - } - if( (cesaTestFull == 1) && (status != MV_BUSY) ) - { - cesaTestFull = 0; - CESA_TEST_WAKE_UP(); - } - -#ifdef __KERNEL__ - return 1; -#endif -} - -void -cesaTestCheckReady(const MV_CESA_RESULT *r) -{ - MV_CESA_RESULT result = *r; - - cesaCheckReady(&result); - - if (cesaTestFull == 1) { - cesaTestFull = 0; - CESA_TEST_WAKE_UP(); - } -} - -static INLINE int open_session(MV_CESA_OPEN_SESSION* pOs) -{ - MV_U16 sid; - MV_STATUS status; - - status = mvCesaSessionOpen(pOs, (short*)&sid); - if(status != MV_OK) - { - mvOsPrintf("CesaTest: Can't open new session - status = 0x%x\n", - status); - return -1; - } - - return (int)sid; -} - -void close_session(int sid) -{ - MV_STATUS status; - - status = mvCesaSessionClose(sid); - if(status != MV_OK) - { - mvOsPrintf("CesaTest: Can't close session %d - status = 0x%x\n", - sid, status); - } -} - -MV_STATUS testOpen(int idx) -{ - MV_CESA_OPEN_SESSION os; - int sid, i, testIdx; - MV_CESA_TEST_SESSION* pTestSession; - MV_U16 digestSize = 0; - - pTestSession = getTestSessionDb(idx, &testIdx); - if(pTestSession == NULL) - { - mvOsPrintf("Test %d is not exist\n", idx); - return MV_BAD_PARAM; - } - pTestSession = &pTestSession[testIdx]; - - if(pTestSession->sid != -1) - { - mvOsPrintf("Session for test %d already created: sid=%d\n", - idx, pTestSession->sid); - return MV_OK; - } - - os.cryptoAlgorithm = pTestSession->cryptoAlgorithm; - os.macMode = pTestSession->macAlgorithm; - switch(os.macMode) - { - case MV_CESA_MAC_MD5: - case MV_CESA_MAC_HMAC_MD5: - digestSize = MV_CESA_MD5_DIGEST_SIZE; - break; - - case MV_CESA_MAC_SHA1: - case MV_CESA_MAC_HMAC_SHA1: - digestSize = MV_CESA_SHA1_DIGEST_SIZE; - break; - - case MV_CESA_MAC_NULL: - digestSize = 0; - } - os.cryptoMode = pTestSession->cryptoMode; - os.direction = pTestSession->direction; - os.operation = pTestSession->operation; - - for(i=0; icryptoKeySize; i++) - os.cryptoKey[i] = pTestSession->pCryptoKey[i]; - - os.cryptoKeyLength = pTestSession->cryptoKeySize; - - for(i=0; imacKeySize; i++) - os.macKey[i] = pTestSession->pMacKey[i]; - - os.macKeyLength = pTestSession->macKeySize; - os.digestSize = digestSize; - - sid = open_session(&os); - if(sid == -1) - { - mvOsPrintf("Can't open session for test %d: rc=0x%x\n", - idx, cesaResult.retCode); - return cesaResult.retCode; - } - CESA_TEST_DEBUG_PRINT(("Opened session: sid = %d\n", sid)); - pTestSession->sid = sid; - return MV_OK; -} - -MV_STATUS testClose(int idx) -{ - int testIdx; - MV_CESA_TEST_SESSION* pTestSession; - - pTestSession = getTestSessionDb(idx, &testIdx); - if(pTestSession == NULL) - { - mvOsPrintf("Test %d is not exist\n", idx); - return MV_BAD_PARAM; - } - pTestSession = &pTestSession[testIdx]; - - if(pTestSession->sid == -1) - { - mvOsPrintf("Test session %d is not opened\n", idx); - return MV_NO_SUCH; - } - - close_session(pTestSession->sid); - pTestSession->sid = -1; - - return MV_OK; -} - -MV_STATUS testCmd(int sid, int iter, MV_CESA_COMMAND* pCmd, - MV_CESA_TEST_SESSION* pTestSession, MV_U8* pIV, int ivSize) -{ - int cmdReqId = 0; - int i; - MV_STATUS rc = MV_OK; - char ivZeroHex[] = "0000"; - - if(iter == 0) - iter = CESA_DEF_ITER_NUM; - - if(pCmd == NULL) - { - mvOsPrintf("testCmd failed: pCmd=NULL\n"); - return MV_BAD_PARAM; - } - pCmd->sessionId = sid; - - cesaCryptoError = 0; - cesaReqIdError = 0; - cesaError = 0; - cesaTestIsrMissCount = 0; - cesaIsReady = MV_FALSE; - cesaIteration = iter; - - if(cesaInputHexStr == NULL) - cesaInputHexStr = cesaPlainHexEbc; - - for(i=0; ipSrc = (MV_CESA_MBUF*)(cesaCmdRing[i].pSrc); - if(pIV != NULL) - { - /* If IV from SA - set IV in Source buffer to zeros */ - cesaSetMbuf(pCmd->pSrc, ivZeroHex, 0, pCmd->cryptoOffset); - cesaSetMbuf(pCmd->pSrc, cesaInputHexStr, pCmd->cryptoOffset, - (cesaReqSize - pCmd->cryptoOffset)); - } - else - { - cesaSetMbuf(pCmd->pSrc, cesaInputHexStr, 0, cesaReqSize); - } - pCmd->pDst = (MV_CESA_MBUF*)(cesaCmdRing[i].pDst); - cesaSetMbuf(pCmd->pDst, cesaNullPlainHexText, 0, cesaReqSize); - - memcpy(&cesaCmdRing[i], pCmd, sizeof(*pCmd)); - } - - if(cesaCheckMode == CESA_SW_SHOW_CHECK_MODE) - { - MV_U8 pDigest[MV_CESA_MAX_DIGEST_SIZE]; - - if(pTestSession->macAlgorithm == MV_CESA_MAC_MD5) - { - mvMD5(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, pDigest); - mvOsPrintf("SW HASH_MD5: reqSize=%d, macLength=%d\n", - cesaReqSize, pCmd->macLength); - mvDebugMemDump(pDigest, MV_CESA_MD5_DIGEST_SIZE, 1); - return MV_OK; - } - if(pTestSession->macAlgorithm == MV_CESA_MAC_SHA1) - { - mvSHA1(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, pDigest); - mvOsPrintf("SW HASH_SHA1: reqSize=%d, macLength=%d\n", - cesaReqSize, pCmd->macLength); - mvDebugMemDump(pDigest, MV_CESA_SHA1_DIGEST_SIZE, 1); - return MV_OK; - } - } - - cesaBeginTicks = CESA_TEST_TICK_GET(); - CESA_TEST_DEBUG_CODE( memset(cesaTestTrace, 0, sizeof(cesaTestTrace)); - cesaTestTraceIdx = 0; - ); - - if(cesaCheckMode == CESA_SW_NULL_CHECK_MODE) - { - volatile MV_U8 pDigest[MV_CESA_MAX_DIGEST_SIZE]; - - for(i=0; imacAlgorithm == MV_CESA_MAC_MD5) - { - mvMD5(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, (unsigned char*)pDigest); - } - if(pTestSession->macAlgorithm == MV_CESA_MAC_SHA1) - { - mvSHA1(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, (MV_U8 *)pDigest); - } - } - cesaEndTicks = CESA_TEST_TICK_GET(); - cesaRate = getRate(&cesaRateAfterDot); - cesaIsReady = MV_TRUE; - - return MV_OK; - } - - /*cesaTestIsrCount = 0;*/ - /*mvCesaDebugStatsClear();*/ - -#ifndef MV_NETBSD - MV_REG_WRITE(MV_CESA_ISR_CAUSE_REG, 0); -#endif - - for(i=0; ipReqPrv = (void*)cmdReqId; - - CESA_TEST_LOCK(flags); - - rc = mvCesaAction(pCmd); - if(rc == MV_NO_RESOURCE) - cesaTestFull = 1; - - CESA_TEST_UNLOCK(flags); - - if(rc == MV_NO_RESOURCE) - { - CESA_TEST_LOCK(flags); - CESA_TEST_WAIT( (cesaTestFull == 0), 100); - CESA_TEST_UNLOCK(flags); - if(cesaTestFull == 1) - { - mvOsPrintf("CESA Test timeout: i=%d, iter=%d, cesaTestFull=%d\n", - i, iter, cesaTestFull); - cesaTestFull = 0; - return MV_TIMEOUT; - } - - CESA_TEST_LOCK(flags); - - rc = mvCesaAction(pCmd); - - CESA_TEST_UNLOCK(flags); - } - if( (rc != MV_OK) && (rc != MV_NO_MORE) ) - { - mvOsPrintf("mvCesaAction failed: rc=%d\n", rc); - return rc; - } - - cmdReqId++; - if(cmdReqId >= CESA_DEF_REQ_SIZE) - cmdReqId = 0; - -#ifdef MV_LINUX - /* Reschedule each 16 requests */ - if( (i & 0xF) == 0) - schedule(); -#endif - } - return MV_OK; -} - -void cesaTestStart(int bufNum, int bufSize) -{ - int i, j, idx; - MV_CESA_MBUF *pMbufSrc, *pMbufDst; - MV_BUF_INFO *pFragsSrc, *pFragsDst; - char *pBuf; -#ifndef MV_NETBSD - int numOfSessions, queueDepth; - char *pSram; - MV_STATUS status; - MV_CPU_DEC_WIN addrDecWin; -#endif - - cesaCmdRing = mvOsMalloc(sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE); - if(cesaCmdRing == NULL) - { - mvOsPrintf("testStart: Can't allocate %ld bytes of memory\n", - sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE); - return; - } - memset(cesaCmdRing, 0, sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE); - - if(bufNum == 0) - bufNum = CESA_DEF_BUF_NUM; - - if(bufSize == 0) - bufSize = CESA_DEF_BUF_SIZE; - - cesaBufNum = bufNum; - cesaBufSize = bufSize; - mvOsPrintf("CESA test started: bufNum = %d, bufSize = %d\n", - bufNum, bufSize); - - cesaHexBuffer = mvOsMalloc(2*bufNum*bufSize); - if(cesaHexBuffer == NULL) - { - mvOsPrintf("testStart: Can't malloc %d bytes for cesaHexBuffer.\n", - 2*bufNum*bufSize); - return; - } - memset(cesaHexBuffer, 0, (2*bufNum*bufSize)); - - cesaBinBuffer = mvOsMalloc(bufNum*bufSize); - if(cesaBinBuffer == NULL) - { - mvOsPrintf("testStart: Can't malloc %d bytes for cesaBinBuffer\n", - bufNum*bufSize); - return; - } - memset(cesaBinBuffer, 0, (bufNum*bufSize)); - - cesaExpBinBuffer = mvOsMalloc(bufNum*bufSize); - if(cesaExpBinBuffer == NULL) - { - mvOsPrintf("testStart: Can't malloc %d bytes for cesaExpBinBuffer\n", - bufNum*bufSize); - return; - } - memset(cesaExpBinBuffer, 0, (bufNum*bufSize)); - - CESA_TEST_WAIT_INIT(); - - pMbufSrc = mvOsMalloc(sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE); - pFragsSrc = mvOsMalloc(sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE); - - pMbufDst = mvOsMalloc(sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE); - pFragsDst = mvOsMalloc(sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE); - - if( (pMbufSrc == NULL) || (pFragsSrc == NULL) || - (pMbufDst == NULL) || (pFragsDst == NULL) ) - { - mvOsPrintf("testStart: Can't malloc Src and Dst pMbuf and pFrags structures.\n"); - /* !!!! Dima cesaTestCleanup();*/ - return; - } - - memset(pMbufSrc, 0, sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE); - memset(pFragsSrc, 0, sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE); - - memset(pMbufDst, 0, sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE); - memset(pFragsDst, 0, sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE); - - mvOsPrintf("Cesa Test Start: pMbufSrc=%p, pFragsSrc=%p, pMbufDst=%p, pFragsDst=%p\n", - pMbufSrc, pFragsSrc, pMbufDst, pFragsDst); - - idx = 0; - for(i=0; ipFrags = &pFragsSrc[idx]; - cesaCmdRing[i].pSrc->numFrags = bufNum; - cesaCmdRing[i].pSrc->mbufSize = 0; - - cesaCmdRing[i].pDst = &pMbufDst[i]; - cesaCmdRing[i].pDst->pFrags = &pFragsDst[idx]; - cesaCmdRing[i].pDst->numFrags = bufNum; - cesaCmdRing[i].pDst->mbufSize = 0; - - for(j=0; jpFrags[j].bufVirtPtr = (MV_U8*)pBuf; - cesaCmdRing[i].pSrc->pFrags[j].bufSize = bufSize; - pBuf += bufSize; - cesaCmdRing[i].pDst->pFrags[j].bufVirtPtr = (MV_U8*)pBuf; - cesaCmdRing[i].pDst->pFrags[j].bufSize = bufSize; - pBuf += bufSize; - } - idx += bufNum; - } - -#ifndef MV_NETBSD - if (mvCpuIfTargetWinGet(CRYPT_ENG, &addrDecWin) == MV_OK) - pSram = (char*)addrDecWin.addrWin.baseLow; - else - { - mvOsPrintf("mvCesaInit: ERR. mvCpuIfTargetWinGet failed\n"); - return; - } - -#ifdef MV_CESA_NO_SRAM - pSram = mvOsMalloc(4*1024+8); - if(pSram == NULL) - { - mvOsPrintf("CesaTest: can't allocate %d bytes for SRAM simulation\n", - 4*1024+8); - /* !!!! Dima cesaTestCleanup();*/ - return; - } - pSram = (MV_U8*)MV_ALIGN_UP((MV_U32)pSram, 8); -#endif /* MV_CESA_NO_SRAM */ - - numOfSessions = CESA_DEF_SESSION_NUM; - queueDepth = CESA_DEF_REQ_SIZE - MV_CESA_MAX_CHAN; - - status = mvCesaInit(numOfSessions, queueDepth, pSram, NULL); - if(status != MV_OK) - { - mvOsPrintf("mvCesaInit is Failed: status = 0x%x\n", status); - /* !!!! Dima cesaTestCleanup();*/ - return; - } -#endif /* !MV_NETBSD */ - - /* Prepare data for tests */ - for(i=0; i<50; i++) - strcat((char*)cesaDataHexStr3, "dd"); - - strcpy((char*)cesaDataAndMd5digest3, cesaDataHexStr3); - strcpy((char*)cesaDataAndSha1digest3, cesaDataHexStr3); - - /* Digest must be 8 byte aligned */ - for(; i<56; i++) - { - strcat((char*)cesaDataAndMd5digest3, "00"); - strcat((char*)cesaDataAndSha1digest3, "00"); - } - strcat((char*)cesaDataAndMd5digest3, cesaHmacMd5digestHex3); - strcat((char*)cesaDataAndSha1digest3, cesaHmacSha1digestHex3); - -#ifndef MV_NETBSD - MV_REG_WRITE( MV_CESA_ISR_CAUSE_REG, 0); - MV_REG_WRITE( MV_CESA_ISR_MASK_REG, MV_CESA_CAUSE_ACC_DMA_MASK); -#endif - -#ifdef MV_VXWORKS - { - MV_STATUS status; - - status = intConnect((VOIDFUNCPTR *)INT_LVL_CESA, cesaTestReadyIsr, (int)NULL); - if (status != OK) - { - mvOsPrintf("CESA: Can't connect CESA (%d) interrupt, status=0x%x \n", - INT_LVL_CESA, status); - /* !!!! Dima cesaTestCleanup();*/ - return; - } - cesaSemId = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE); - if(cesaSemId == NULL) - { - mvOsPrintf("cesaTestStart: Can't create semaphore\n"); - return; - } - intEnable(INT_LVL_CESA); - } -#endif /* MV_VXWORKS */ - -#if !defined(MV_NETBSD) && defined(__KERNEL__) - if( request_irq(CESA_IRQ, cesaTestReadyIsr, (SA_INTERRUPT) , "cesa_test", NULL ) ) - { - mvOsPrintf( "cannot assign irq\n" ); - /* !!!! Dima cesaTestCleanup();*/ - return; - } - spin_lock_init( &cesaLock ); -#endif -} - -MV_STATUS testRun(int idx, int caseIdx, int iter, - int reqSize, int checkMode) -{ - int testIdx, count, sid, digestSize; - int blockSize; - MV_CESA_TEST_SESSION* pTestSession; - MV_CESA_COMMAND cmd; - MV_STATUS status; - - memset(&cmd, 0, sizeof(cmd)); - - pTestSession = getTestSessionDb(idx, &testIdx); - if(pTestSession == NULL) - { - mvOsPrintf("Test %d is not exist\n", idx); - return MV_BAD_PARAM; - } - pTestSession = &pTestSession[testIdx]; - - sid = pTestSession->sid; - if(sid == -1) - { - mvOsPrintf("Test %d is not opened\n", idx); - return MV_BAD_STATE; - } - switch(pTestSession->cryptoAlgorithm) - { - case MV_CESA_CRYPTO_DES: - case MV_CESA_CRYPTO_3DES: - blockSize = MV_CESA_DES_BLOCK_SIZE; - break; - - case MV_CESA_CRYPTO_AES: - blockSize = MV_CESA_AES_BLOCK_SIZE; - break; - - case MV_CESA_CRYPTO_NULL: - blockSize = 0; - break; - - default: - mvOsPrintf("cesaTestRun: Bad CryptoAlgorithm=%d\n", - pTestSession->cryptoAlgorithm); - return MV_BAD_PARAM; - } - switch(pTestSession->macAlgorithm) - { - case MV_CESA_MAC_MD5: - case MV_CESA_MAC_HMAC_MD5: - digestSize = MV_CESA_MD5_DIGEST_SIZE; - break; - - case MV_CESA_MAC_SHA1: - case MV_CESA_MAC_HMAC_SHA1: - digestSize = MV_CESA_SHA1_DIGEST_SIZE; - break; - default: - digestSize = 0; - } - - if(iter == 0) - iter = CESA_DEF_ITER_NUM; - - if(pTestSession->direction == MV_CESA_DIR_ENCODE) - { - cesaOutputHexStr = cesaTestCases[caseIdx].cipherHexStr; - cesaInputHexStr = cesaTestCases[caseIdx].plainHexStr; - } - else - { - cesaOutputHexStr = cesaTestCases[caseIdx].plainHexStr; - cesaInputHexStr = cesaTestCases[caseIdx].cipherHexStr; - } - - cmd.sessionId = sid; - if(checkMode == CESA_FAST_CHECK_MODE) - { - cmd.cryptoLength = cesaTestCases[caseIdx].cryptoLength; - cmd.macLength = cesaTestCases[caseIdx].macLength; - } - else - { - cmd.cryptoLength = reqSize; - cmd.macLength = reqSize; - } - cesaRateSize = cmd.cryptoLength; - cesaReqSize = cmd.cryptoLength; - cmd.cryptoOffset = 0; - if(pTestSession->operation != MV_CESA_MAC_ONLY) - { - if( (pTestSession->cryptoMode == MV_CESA_CRYPTO_CBC) || - (pTestSession->cryptoMode == MV_CESA_CRYPTO_CTR) ) - { - cmd.ivOffset = 0; - cmd.cryptoOffset = blockSize; - if(cesaTestCases[caseIdx].pCryptoIV == NULL) - { - cmd.ivFromUser = 1; - } - else - { - cmd.ivFromUser = 0; - mvCesaCryptoIvSet(cesaTestCases[caseIdx].pCryptoIV, blockSize); - } - cesaReqSize = cmd.cryptoOffset + cmd.cryptoLength; - } - } - -/* - mvOsPrintf("ivFromUser=%d, cryptoLength=%d, cesaReqSize=%d, cryptoOffset=%d\n", - cmd.ivFromUser, cmd.cryptoLength, cesaReqSize, cmd.cryptoOffset); -*/ - if(pTestSession->operation != MV_CESA_CRYPTO_ONLY) - { - cmd.macOffset = cmd.cryptoOffset; - - if(cesaTestCases[caseIdx].digestOffset == -1) - { - cmd.digestOffset = cmd.macOffset + cmd.macLength; - cmd.digestOffset = MV_ALIGN_UP(cmd.digestOffset, 8); - } - else - { - cmd.digestOffset = cesaTestCases[caseIdx].digestOffset; - } - if( (cmd.digestOffset + digestSize) > cesaReqSize) - cesaReqSize = cmd.digestOffset + digestSize; - } - - cesaCheckMode = checkMode; - - if(checkMode == CESA_NULL_CHECK_MODE) - { - cesaCheckSize = 0; - cesaCheckOffset = 0; - } - else - { - if(pTestSession->operation == MV_CESA_CRYPTO_ONLY) - { - cesaCheckOffset = 0; - cesaCheckSize = cmd.cryptoLength; - } - else - { - cesaCheckSize = digestSize; - cesaCheckOffset = cmd.digestOffset; - } - } -/* - mvOsPrintf("reqSize=%d, checkSize=%d, checkOffset=%d, checkMode=%d\n", - cesaReqSize, cesaCheckSize, cesaCheckOffset, cesaCheckMode); - - mvOsPrintf("blockSize=%d, ivOffset=%d, ivFromUser=%d, crOffset=%d, crLength=%d\n", - blockSize, cmd.ivOffset, cmd.ivFromUser, - cmd.cryptoOffset, cmd.cryptoLength); - - mvOsPrintf("macOffset=%d, digestOffset=%d, macLength=%d\n", - cmd.macOffset, cmd.digestOffset, cmd.macLength); -*/ - status = testCmd(sid, iter, &cmd, pTestSession, - cesaTestCases[caseIdx].pCryptoIV, blockSize); - - if(status != MV_OK) - return status; - - /* Wait when all callbacks is received */ - count = 0; - while(cesaIsReady == MV_FALSE) - { - mvOsSleep(10); - count++; - if(count > 100) - { - mvOsPrintf("testRun: Timeout occured\n"); - return MV_TIMEOUT; - } - } - - return MV_OK; -} - - -void cesaTestStop(void) -{ - MV_CESA_MBUF *pMbufSrc, *pMbufDst; - MV_BUF_INFO *pFragsSrc, *pFragsDst; - int i; - - /* Release all allocated memories */ - pMbufSrc = (MV_CESA_MBUF*)(cesaCmdRing[0].pSrc); - pFragsSrc = cesaCmdRing[0].pSrc->pFrags; - - pMbufDst = (MV_CESA_MBUF*)(cesaCmdRing[0].pDst); - pFragsDst = cesaCmdRing[0].pDst->pFrags; - - mvOsFree(pMbufSrc); - mvOsFree(pMbufDst); - mvOsFree(pFragsSrc); - mvOsFree(pFragsDst); - - for(i=0; i 0) - cryptoError++; - if(cesaReqIdError > 0) - reqIdError++; - - testClose(idx); - } - } - if(cryptoError > 0) - mvOsPrintf("cryptoError : %d\n", cryptoError); - if(reqIdError > 0) - mvOsPrintf("reqIdError : %d\n", reqIdError); - - if(openErrors > 0) - { - mvOsPrintf("Open Errors = %d\n", openErrors); - for(i=0; i<100; i++) - { - if(openErrDisp[i] != 0) - mvOsPrintf("Error %d - occurs %d times\n", i, openErrDisp[i]); - } - } -} - - -void loopback_test(int idx, int iter, int size, char* pPlainData) -{ -} - - -#if defined(MV_VXWORKS) -int testMode = 0; -unsigned __TASKCONV cesaTask(void* args) -{ - int reqSize = cesaReqSize; - - if(testMode == 0) - { - cesaOneTest(cesaTestIdx, cesaCaseIdx, cesaIteration, - reqSize, cesaCheckMode); - } - else - { - if(testMode == 1) - { - cesaTest(cesaIteration, reqSize, cesaCheckMode); - combiTest(cesaIteration, reqSize, cesaCheckMode); - } - else - { - multiSizeTest(cesaIdx, cesaIteration, cesaCheckMode, NULL); - } - } - return 0; -} - -void oneTest(int testIdx, int caseIdx, - int iter, int reqSize, int checkMode) -{ - long rc; - - cesaIteration = iter; - cesaReqSize = cesaRateSize = reqSize; - cesaCheckMode = checkMode; - testMode = 0; - cesaTestIdx = testIdx; - cesaCaseIdx = caseIdx; - rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId); - if (rc != MV_OK) - { - mvOsPrintf("hMW: Can't create CESA multiCmd test task, rc = %ld\n", rc); - } -} - -void multiTest(int iter, int reqSize, int checkMode) -{ - long rc; - - cesaIteration = iter; - cesaCheckMode = checkMode; - cesaReqSize = reqSize; - testMode = 1; - rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId); - if (rc != MV_OK) - { - mvOsPrintf("hMW: Can't create CESA multiCmd test task, rc = %ld\n", rc); - } -} - -void sizeTest(int testIdx, int iter, int checkMode) -{ - long rc; - - cesaIteration = iter; - cesaCheckMode = checkMode; - testMode = 2; - cesaIdx = testIdx; - rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId); - if (rc != MV_OK) - { - mvOsPrintf("hMW: Can't create CESA test task, rc = %ld\n", rc); - } -} - -#endif /* MV_VXWORKS */ - -extern void mvCesaDebugSA(short sid, int mode); -void cesaTestPrintSession(int idx) -{ - int testIdx; - MV_CESA_TEST_SESSION* pTestSession; - - pTestSession = getTestSessionDb(idx, &testIdx); - if(pTestSession == NULL) - { - mvOsPrintf("Test %d is not exist\n", idx); - return; - } - pTestSession = &pTestSession[testIdx]; - - if(pTestSession->sid == -1) - { - mvOsPrintf("Test session %d is not opened\n", idx); - return; - } - - mvCesaDebugSA(pTestSession->sid, 1); -} - -void cesaTestPrintStatus(void) -{ - mvOsPrintf("\n\t Cesa Test Status\n\n"); - - mvOsPrintf("isrCount=%d\n", - cesaTestIsrCount); - -#ifdef CESA_TEST_DEBUG - { - int i, j; - j = cesaTestTraceIdx; - mvOsPrintf("No Type Cause rCause iCause Res Time pReady pProc pEmpty\n"); - for(i=0; itable = mvOsMalloc(numOfEntries*sizeof(MV_LRU_ENTRY)); - if(pLruCache->table == NULL) - { - mvOsFree(pLruCache); - return NULL; - } - memset(pLruCache->table, 0, numOfEntries*sizeof(MV_LRU_ENTRY)); - pLruCache->tableSize = numOfEntries; - - for(i=0; itable[i].next = i+1; - pLruCache->table[i].prev = i-1; - } - pLruCache->least = 0; - pLruCache->most = numOfEntries-1; - - return pLruCache; -} - -void mvLruCacheFinish(MV_LRU_CACHE* pLruCache) -{ - mvOsFree(pLruCache->table); - mvOsFree(pLruCache); -} - -/* Update LRU cache database after using cache Index */ -void mvLruCacheIdxUpdate(MV_LRU_CACHE* pLruHndl, int cacheIdx) -{ - int prev, next; - - if(cacheIdx == pLruHndl->most) - return; - - next = pLruHndl->table[cacheIdx].next; - if(cacheIdx == pLruHndl->least) - { - pLruHndl->least = next; - } - else - { - prev = pLruHndl->table[cacheIdx].prev; - - pLruHndl->table[next].prev = prev; - pLruHndl->table[prev].next = next; - } - - pLruHndl->table[pLruHndl->most].next = cacheIdx; - pLruHndl->table[cacheIdx].prev = pLruHndl->most; - pLruHndl->most = cacheIdx; -} - -/* Delete LRU cache entry */ -void mvLruCacheIdxDelete(MV_LRU_CACHE* pLruHndl, int cacheIdx) -{ - int prev, next; - - if(cacheIdx == pLruHndl->least) - return; - - prev = pLruHndl->table[cacheIdx].prev; - if(cacheIdx == pLruHndl->most) - { - pLruHndl->most = prev; - } - else - { - next = pLruHndl->table[cacheIdx].next; - - pLruHndl->table[next].prev = prev; - pLruHndl->table[prev].next = next; - } - pLruHndl->table[pLruHndl->least].prev = cacheIdx; - pLruHndl->table[cacheIdx].next = pLruHndl->least; - pLruHndl->least = cacheIdx; -} diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h deleted file mode 100644 index 896e7f81c1..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ -/******************************************************************************* -* mvLru.h - Header File for Least Recently Used Cache algorithm -* -* DESCRIPTION: -* This header file contains macros typedefs and function declaration for -* the Least Recently Used Cache algorithm. -* -*******************************************************************************/ - -#ifndef __mvLru_h__ -#define __mvLru_h__ - - -typedef struct -{ - int next; - int prev; -} MV_LRU_ENTRY; - -typedef struct -{ - int least; - int most; - MV_LRU_ENTRY* table; - int tableSize; - -}MV_LRU_CACHE; - - -/* Find Cache index for replacement LRU */ -static INLINE int mvLruCacheIdxFind(MV_LRU_CACHE* pLruHndl) -{ - return pLruHndl->least; -} - -/* Init LRU cache module */ -MV_LRU_CACHE* mvLruCacheInit(int numOfEntries); - -/* Finish LRU cache module */ -void mvLruCacheFinish(MV_LRU_CACHE* pLruHndl); - -/* Update LRU cache database after using cache Index */ -void mvLruCacheIdxUpdate(MV_LRU_CACHE* pLruHndl, int cacheIdx); - -/* Delete LRU cache entry */ -void mvLruCacheIdxDelete(MV_LRU_CACHE* pLruHndl, int cacheIdx); - - -#endif /* __mvLru_h__ */ diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c deleted file mode 100644 index 189f6292ef..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c +++ /dev/null @@ -1,349 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#include "mvOs.h" -#include "mvMD5.h" - -static void mvMD5Transform(MV_U32 buf[4], MV_U32 const in[MV_MD5_MAC_LEN]); - -#ifdef MV_CPU_LE -#define mvByteReverse(buf, len) /* Nothing */ -#else -static void mvByteReverse(unsigned char *buf, unsigned longs); - -/* - * Note: this code is harmless on little-endian machines. - */ -static void mvByteReverse(unsigned char *buf, unsigned longs) -{ - MV_U32 t; - - do - { - t = (MV_U32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | - ((unsigned) buf[1] << 8 | buf[0]); - *(MV_U32 *) buf = t; - buf += 4; - } while (--longs); -} -#endif - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void mvMD5Init(MV_MD5_CONTEXT *ctx) -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bits[0] = 0; - ctx->bits[1] = 0; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -void mvMD5Update(MV_MD5_CONTEXT *ctx, unsigned char const *buf, unsigned len) -{ - MV_U32 t; - - /* Update bitcount */ - - t = ctx->bits[0]; - if ((ctx->bits[0] = t + ((MV_U32) len << 3)) < t) - ctx->bits[1]++; /* Carry from low to high */ - ctx->bits[1] += len >> 29; - - t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - - /* Handle any leading odd-sized chunks */ - - if (t) - { - unsigned char *p = (unsigned char *) ctx->in + t; - - t = 64 - t; - if (len < t) - { - memcpy(p, buf, len); - return; - } - memcpy(p, buf, t); - mvByteReverse(ctx->in, MV_MD5_MAC_LEN); - mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in); - buf += t; - len -= t; - } - /* Process data in 64-byte chunks */ - - while (len >= 64) - { - memcpy(ctx->in, buf, 64); - mvByteReverse(ctx->in, MV_MD5_MAC_LEN); - mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - - memcpy(ctx->in, buf, len); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void mvMD5Final(unsigned char digest[MV_MD5_MAC_LEN], MV_MD5_CONTEXT *ctx) -{ - unsigned count; - unsigned char *p; - - /* Compute number of bytes mod 64 */ - count = (ctx->bits[0] >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) - { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - mvByteReverse(ctx->in, MV_MD5_MAC_LEN); - mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } - else - { - /* Pad block to 56 bytes */ - memset(p, 0, count - 8); - } - mvByteReverse(ctx->in, 14); - - /* Append length in bits and transform */ - ((MV_U32 *) ctx->in)[14] = ctx->bits[0]; - ((MV_U32 *) ctx->in)[15] = ctx->bits[1]; - - mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in); - mvByteReverse((unsigned char *) ctx->buf, 4); - memcpy(digest, ctx->buf, MV_MD5_MAC_LEN); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ -} - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -static void mvMD5Transform(MV_U32 buf[4], MV_U32 const in[MV_MD5_MAC_LEN]) -{ - register MV_U32 a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - -void mvMD5(unsigned char const *buf, unsigned len, unsigned char* digest) -{ - MV_MD5_CONTEXT ctx; - - mvMD5Init(&ctx); - mvMD5Update(&ctx, buf, len); - mvMD5Final(digest, &ctx); -} - - -void mvHmacMd5(unsigned char const* text, int text_len, - unsigned char const* key, int key_len, - unsigned char* digest) -{ - int i; - MV_MD5_CONTEXT ctx; - unsigned char k_ipad[64+1]; /* inner padding - key XORd with ipad */ - unsigned char k_opad[64+1]; /* outer padding - key XORd with opad */ - - /* start out by storing key in pads */ - memset(k_ipad, 0, 64); - memcpy(k_ipad, key, key_len); - memset(k_opad, 0, 64); - memcpy(k_opad, key, key_len); - - /* XOR key with ipad and opad values */ - for (i=0; i<64; i++) - { - k_ipad[i] ^= 0x36; - k_opad[i] ^= 0x5c; - } - - /* perform inner MD5 */ - mvMD5Init(&ctx); /* init ctx for 1st pass */ - mvMD5Update(&ctx, k_ipad, 64); /* start with inner pad */ - mvMD5Update(&ctx, text, text_len); /* then text of datagram */ - mvMD5Final(digest, &ctx); /* finish up 1st pass */ - - /* perform outer MD5 */ - mvMD5Init(&ctx); /* init ctx for 2nd pass */ - mvMD5Update(&ctx, k_opad, 64); /* start with outer pad */ - mvMD5Update(&ctx, digest, 16); /* then results of 1st hash */ - mvMD5Final(digest, &ctx); /* finish up 2nd pass */ -} diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h deleted file mode 100644 index d05c6b66fb..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#ifndef __mvMD5_h__ -#define __mvMD5_h__ - -#include "mvMD5.h" - -#define MV_MD5_MAC_LEN 16 - - -typedef struct -{ - MV_U32 buf[4]; - MV_U32 bits[2]; - MV_U8 in[64]; - -} MV_MD5_CONTEXT; - -void mvMD5Init(MV_MD5_CONTEXT *context); -void mvMD5Update(MV_MD5_CONTEXT *context, unsigned char const *buf, - unsigned len); -void mvMD5Final(unsigned char digest[16], MV_MD5_CONTEXT *context); - -void mvMD5(unsigned char const *buf, unsigned len, unsigned char* digest); - -void mvHmacMd5(unsigned char const* text, int text_len, - unsigned char const* key, int key_len, - unsigned char* digest); - - -#endif /* __mvMD5_h__ */ diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c deleted file mode 100644 index 0e0786b0ca..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c +++ /dev/null @@ -1,239 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#include "mvOs.h" -#include "mvSHA1.h" - -#define SHA1HANDSOFF - -typedef union -{ - MV_U8 c[64]; - MV_U32 l[16]; - -} CHAR64LONG16; - -static void mvSHA1Transform(MV_U32 state[5], const MV_U8 *buffer); - -#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) - - -#ifdef MV_CPU_LE -#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \ - (rol(block->l[i], 8) & 0x00FF00FF)) -#else -#define blk0(i) block->l[i] -#endif -#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \ - block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1)) - -/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ -#define R0(v,w,x,y,z,i) \ - z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \ - w = rol(w, 30); -#define R1(v,w,x,y,z,i) \ - z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \ - w = rol(w, 30); -#define R2(v,w,x,y,z,i) \ - z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30); -#define R3(v,w,x,y,z,i) \ - z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \ - w = rol(w, 30); -#define R4(v,w,x,y,z,i) \ - z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \ - w=rol(w, 30); - -/* Hash a single 512-bit block. This is the core of the algorithm. */ -static void mvSHA1Transform(MV_U32 state[5], const MV_U8 *buffer) -{ - MV_U32 a, b, c, d, e; - CHAR64LONG16* block; - -#ifdef SHA1HANDSOFF - static MV_U32 workspace[16]; - - block = (CHAR64LONG16 *) workspace; - memcpy(block, buffer, 64); -#else - block = (CHAR64LONG16 *) buffer; -#endif - /* Copy context->state[] to working vars */ - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - /* 4 rounds of 20 operations each. Loop unrolled. */ - R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); - R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); - R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); - R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); - R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); - R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); - R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); - R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); - R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); - R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); - R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); - R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); - R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); - R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); - R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); - R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); - R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); - R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); - R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); - R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); - /* Add the working vars back into context.state[] */ - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - /* Wipe variables */ - a = b = c = d = e = 0; -} - -void mvSHA1Init(MV_SHA1_CTX* context) -{ - /* SHA1 initialization constants */ - context->state[0] = 0x67452301; - context->state[1] = 0xEFCDAB89; - context->state[2] = 0x98BADCFE; - context->state[3] = 0x10325476; - context->state[4] = 0xC3D2E1F0; - context->count[0] = context->count[1] = 0; -} - - -/* Run your data through this. */ -void mvSHA1Update(MV_SHA1_CTX *context, MV_U8 const *data, - unsigned int len) -{ - MV_U32 i, j; - - j = (context->count[0] >> 3) & 63; - if ((context->count[0] += len << 3) < (len << 3)) - context->count[1]++; - context->count[1] += (len >> 29); - if ((j + len) > 63) - { - memcpy(&context->buffer[j], data, (i = 64-j)); - mvSHA1Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) - { - mvSHA1Transform(context->state, &data[i]); - } - j = 0; - } - else - { - i = 0; - } - memcpy(&context->buffer[j], &data[i], len - i); -} - -void mvSHA1Final(MV_U8* digest, MV_SHA1_CTX* context) -{ - MV_U32 i; - MV_U8 finalcount[8]; - - for (i = 0; i < 8; i++) - { - finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] >> - ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ - } - mvSHA1Update(context, (const unsigned char *) "\200", 1); - while ((context->count[0] & 504) != 448) - { - mvSHA1Update(context, (const unsigned char *) "\0", 1); - } - mvSHA1Update(context, finalcount, 8); /* Should cause a mvSHA1Transform() - */ - for (i = 0; i < 20; i++) - { - digest[i] = (unsigned char) - ((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); - } - /* Wipe variables */ - i = 0; - memset(context->buffer, 0, 64); - memset(context->state, 0, 20); - memset(context->count, 0, 8); - memset(finalcount, 0, 8); - -#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ - mvSHA1Transform(context->state, context->buffer); -#endif -} - - -void mvSHA1(MV_U8 const *buf, unsigned int len, MV_U8* digest) -{ - MV_SHA1_CTX ctx; - - mvSHA1Init(&ctx); - mvSHA1Update(&ctx, buf, len); - mvSHA1Final(digest, &ctx); -} diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h b/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h deleted file mode 100644 index 17df9fcdbf..0000000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* -Copyright (C) Marvell International Ltd. and its affiliates - -This software file (the "File") is owned and distributed by Marvell -International Ltd. and/or its affiliates ("Marvell") under the following -alternative licensing terms. Once you have made an election to distribute the -File under one of the following license alternatives, please (i) delete this -introductory statement regarding license alternatives, (ii) delete the two -license alternatives that you have not elected to use and (iii) preserve the -Marvell copyright notice above. - -******************************************************************************** -Marvell Commercial License Option - -If you received this File from Marvell and you have entered into a commercial -license agreement (a "Commercial License") with Marvell, the File is licensed -to you under the terms of the applicable Commercial License. - -******************************************************************************** -Marvell GPL License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File in accordance with the terms and conditions of the General -Public License Version 2, June 1991 (the "GPL License"), a copy of which is -available along with the File in the license.txt file or by writing to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or -on the worldwide web at http://www.gnu.org/licenses/gpl.txt. - -THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED -WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY -DISCLAIMED. The GPL License provides additional details about this warranty -disclaimer. -******************************************************************************** -Marvell BSD License Option - -If you received this File from Marvell, you may opt to use, redistribute and/or -modify this File under the following licensing terms. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Marvell nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#ifndef __mvSHA1_h__ -#define __mvSHA1_h__ - -#include "mvSHA1.h" - -#define MV_SHA1_MAC_LEN 20 - - -typedef struct -{ - MV_U32 state[5]; - MV_U32 count[2]; - MV_U8 buffer[64]; - -} MV_SHA1_CTX; - -void mvSHA1Init(MV_SHA1_CTX *context); -void mvSHA1Update(MV_SHA1_CTX *context, MV_U8 const *buf, unsigned int len); -void mvSHA1Final(MV_U8* digest, MV_SHA1_CTX *context); - -void mvSHA1(MV_U8 const *buf, unsigned int len, MV_U8* digest); - - -#endif /* __mvSHA1_h__ */ -- cgit v1.2.3