remove linux 2.4 specific build system code
[15.05/openwrt.git] / target / linux / generic-2.6 / files / crypto / ocf / kirkwood / cesa / mvCesaTest.c
1 /*******************************************************************************
2 Copyright (C) Marvell International Ltd. and its affiliates
3
4 This software file (the "File") is owned and distributed by Marvell
5 International Ltd. and/or its affiliates ("Marvell") under the following
6 alternative licensing terms.  Once you have made an election to distribute the
7 File under one of the following license alternatives, please (i) delete this
8 introductory statement regarding license alternatives, (ii) delete the two
9 license alternatives that you have not elected to use and (iii) preserve the
10 Marvell copyright notice above.
11
12 ********************************************************************************
13 Marvell Commercial License Option
14
15 If you received this File from Marvell and you have entered into a commercial
16 license agreement (a "Commercial License") with Marvell, the File is licensed
17 to you under the terms of the applicable Commercial License.
18
19 ********************************************************************************
20 Marvell GPL License Option
21
22 If you received this File from Marvell, you may opt to use, redistribute and/or
23 modify this File in accordance with the terms and conditions of the General
24 Public License Version 2, June 1991 (the "GPL License"), a copy of which is
25 available along with the File in the license.txt file or by writing to the Free
26 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
27 on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
28
29 THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
30 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
31 DISCLAIMED.  The GPL License provides additional details about this warranty
32 disclaimer.
33 ********************************************************************************
34 Marvell BSD License Option
35
36 If you received this File from Marvell, you may opt to use, redistribute and/or
37 modify this File under the following licensing terms.
38 Redistribution and use in source and binary forms, with or without modification,
39 are permitted provided that the following conditions are met:
40
41     *   Redistributions of source code must retain the above copyright notice,
42         this list of conditions and the following disclaimer.
43
44     *   Redistributions in binary form must reproduce the above copyright
45         notice, this list of conditions and the following disclaimer in the
46         documentation and/or other materials provided with the distribution.
47
48     *   Neither the name of Marvell nor the names of its contributors may be
49         used to endorse or promote products derived from this software without
50         specific prior written permission.
51
52 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
53 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
54 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
55 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
56 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
57 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
58 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
59 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
60 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
61 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
62
63 *******************************************************************************/
64
65 #include "mvOs.h"
66
67 #if defined(MV_VXWORKS)
68
69 #include "sysLib.h"
70 #include "logLib.h"
71 #include "tickLib.h"
72 #include "intLib.h"
73 #include "config.h"
74
75
76 SEM_ID      cesaSemId = NULL;
77 SEM_ID      cesaWaitSemId = NULL;
78
79 #define CESA_TEST_LOCK(flags)       flags = intLock()
80 #define CESA_TEST_UNLOCK(flags)     intUnlock(flags)
81
82 #define CESA_TEST_WAIT_INIT()       cesaWaitSemId = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY)
83 #define CESA_TEST_WAKE_UP()         semGive(cesaWaitSemId)
84 #define CESA_TEST_WAIT(cond, ms)    semTake(cesaWaitSemId, (sysClkRateGet()*ms)/1000)
85
86 #define CESA_TEST_TICK_GET()        tickGet()
87 #define CESA_TEST_TICK_TO_MS(tick)  (((tick)*1000)/sysClkRateGet())
88
89 #elif defined(MV_LINUX)
90
91 #include <linux/wait.h>
92 wait_queue_head_t   cesaTest_waitq;
93 spinlock_t          cesaLock;
94
95 #define CESA_TEST_LOCK(flags)       spin_lock_irqsave( &cesaLock, flags)
96 #define CESA_TEST_UNLOCK(flags)     spin_unlock_irqrestore( &cesaLock, flags);
97
98 #define CESA_TEST_WAIT_INIT()       init_waitqueue_head(&cesaTest_waitq)
99 #define CESA_TEST_WAKE_UP()         wake_up(&cesaTest_waitq)
100 #define CESA_TEST_WAIT(cond, ms)    wait_event_timeout(cesaTest_waitq, (cond), msecs_to_jiffies(ms))
101
102 #define CESA_TEST_TICK_GET()        jiffies
103 #define CESA_TEST_TICK_TO_MS(tick)  jiffies_to_msecs(tick)
104
105 #elif defined(MV_NETBSD)
106
107 #include <sys/param.h>
108 #include <sys/kernel.h>
109 static int      cesaLock;
110
111 #define CESA_TEST_LOCK(flags)           flags = splnet()
112 #define CESA_TEST_UNLOCK(flags)         splx(flags)
113
114 #define CESA_TEST_WAIT_INIT()           /* nothing */
115 #define CESA_TEST_WAKE_UP()             wakeup(&cesaLock)
116 #define CESA_TEST_WAIT(cond, ms)        \
117 do {                                    \
118         while (!(cond))                 \
119                 tsleep(&cesaLock, PWAIT, "cesatest",mstohz(ms)); \
120 } while (/*CONSTCOND*/0)
121
122 #define CESA_TEST_TICK_GET()            hardclock_ticks
123 #define CESA_TEST_TICK_TO_MS(tick)      ((1000/hz)*(tick))
124
125 #define request_irq(i,h,t,n,a)  \
126         !mv_intr_establish((i),IPL_NET,(int(*)(void *))(h),(a))
127
128 #else
129 #error "Only Linux, VxWorks, or NetBSD OS are supported"
130 #endif
131
132 #include "mvDebug.h"
133
134 #include "mvSysHwConfig.h"
135 #include "boardEnv/mvBoardEnvLib.h"
136 #include "ctrlEnv/sys/mvCpuIf.h"
137 #include "cntmr/mvCntmr.h"
138 #include "cesa/mvCesa.h"
139 #include "cesa/mvCesaRegs.h"
140 #include "cesa/mvMD5.h"
141 #include "cesa/mvSHA1.h"
142
143 #if defined(CONFIG_MV646xx)
144 #include "marvell_pic.h"
145 #endif
146
147 #define MV_CESA_USE_TIMER_ID    0
148 #define CESA_DEF_BUF_SIZE       1500
149 #define CESA_DEF_BUF_NUM        1
150 #define CESA_DEF_SESSION_NUM    32
151
152 #define CESA_DEF_ITER_NUM       100
153
154 #define CESA_DEF_REQ_SIZE       256
155
156
157 /* CESA Tests Debug */
158 #undef CESA_TEST_DEBUG
159
160 #ifdef CESA_TEST_DEBUG
161
162 #   define CESA_TEST_DEBUG_PRINT(msg)   mvOsPrintf msg
163 #   define CESA_TEST_DEBUG_CODE(code)   code
164
165 typedef struct
166 {
167     int             type;       /* 0 - isrEmpty, 1 - cesaReadyGet, 2 - cesaAction */
168     MV_U32          timeStamp;
169     MV_U32          cause;
170     MV_U32          realCause;
171     MV_U32          dmaCause;
172     int             resources;
173     MV_CESA_REQ*    pReqReady;
174     MV_CESA_REQ*    pReqEmpty;
175     MV_CESA_REQ*    pReqProcess;
176 } MV_CESA_TEST_TRACE;
177
178 #define MV_CESA_TEST_TRACE_SIZE      25
179
180 static int cesaTestTraceIdx = 0;
181 static MV_CESA_TEST_TRACE    cesaTestTrace[MV_CESA_TEST_TRACE_SIZE];
182
183 static void cesaTestTraceAdd(int type, MV_U32 cause)
184 {
185     cesaTestTrace[cesaTestTraceIdx].type = type;
186     cesaTestTrace[cesaTestTraceIdx].cause = cause;
187     cesaTestTrace[cesaTestTraceIdx].realCause = MV_REG_READ(MV_CESA_ISR_CAUSE_REG);
188     cesaTestTrace[cesaTestTraceIdx].dmaCause = MV_REG_READ(IDMA_CAUSE_REG);
189     cesaTestTrace[cesaTestTraceIdx].resources = cesaReqResources;
190     cesaTestTrace[cesaTestTraceIdx].pReqReady = pCesaReqReady;
191     cesaTestTrace[cesaTestTraceIdx].pReqEmpty = pCesaReqEmpty;
192     cesaTestTrace[cesaTestTraceIdx].pReqProcess = pCesaReqProcess;
193     cesaTestTrace[cesaTestTraceIdx].timeStamp = mvCntmrRead(MV_CESA_USE_TIMER_ID);
194     cesaTestTraceIdx++;
195     if(cesaTestTraceIdx == MV_CESA_TEST_TRACE_SIZE)
196         cesaTestTraceIdx = 0;
197 }
198
199 #else
200
201 #   define CESA_TEST_DEBUG_PRINT(msg)
202 #   define CESA_TEST_DEBUG_CODE(code)
203
204 #endif /* CESA_TEST_DEBUG */
205
206 int                 cesaExpReqId=0;
207 int                 cesaCbIter=0;
208
209 int                 cesaIdx;
210 int                 cesaIteration;
211 int                 cesaRateSize;
212 int                 cesaReqSize;
213 unsigned long       cesaTaskId;
214 int                 cesaBufNum;
215 int                 cesaBufSize;
216 int                 cesaCheckOffset;
217 int                 cesaCheckSize;
218 int                 cesaCheckMode;
219 int                 cesaTestIdx;
220 int                 cesaCaseIdx;
221
222
223 MV_U32      cesaTestIsrCount = 0;
224 MV_U32      cesaTestIsrMissCount = 0;
225
226 MV_U32      cesaCryptoError = 0;
227 MV_U32      cesaReqIdError  = 0;
228 MV_U32      cesaError = 0;
229
230 char*       cesaHexBuffer = NULL;
231
232 char*       cesaBinBuffer = NULL;
233 char*       cesaExpBinBuffer = NULL;
234
235 char*       cesaInputHexStr  = NULL;
236 char*       cesaOutputHexStr = NULL;
237
238 MV_BUF_INFO         cesaReqBufs[CESA_DEF_REQ_SIZE];
239
240 MV_CESA_COMMAND*    cesaCmdRing;
241 MV_CESA_RESULT      cesaResult;
242
243 int                 cesaTestFull = 0;
244
245 MV_BOOL             cesaIsReady = MV_FALSE;
246 MV_U32              cesaCycles = 0;
247 MV_U32              cesaBeginTicks = 0;
248 MV_U32              cesaEndTicks = 0;
249 MV_U32              cesaRate = 0;
250 MV_U32              cesaRateAfterDot = 0;
251
252 void                *cesaTestOSHandle = NULL;
253
254 enum
255 {
256     CESA_FAST_CHECK_MODE = 0,
257     CESA_FULL_CHECK_MODE,
258     CESA_NULL_CHECK_MODE,
259     CESA_SHOW_CHECK_MODE,
260     CESA_SW_SHOW_CHECK_MODE,
261     CESA_SW_NULL_CHECK_MODE,
262
263     CESA_MAX_CHECK_MODE
264 };
265
266 enum
267 {
268     DES_TEST_TYPE         = 0,
269     TRIPLE_DES_TEST_TYPE  = 1,
270     AES_TEST_TYPE         = 2,
271     MD5_TEST_TYPE         = 3,
272     SHA_TEST_TYPE         = 4,
273     COMBINED_TEST_TYPE    = 5,
274
275     MAX_TEST_TYPE
276 };
277
278 /* Tests data base */
279 typedef struct
280 {
281     short           sid;
282     char            cryptoAlgorithm;    /* DES/3DES/AES */
283     char            cryptoMode;         /* ECB or CBC */
284     char            macAlgorithm;       /* MD5 / SHA1 */
285     char            operation;          /* CRYPTO/HMAC/CRYPTO+HMAC/HMAC+CRYPTO */
286     char            direction;          /* ENCODE(SIGN)/DECODE(VERIFY) */
287     unsigned char*  pCryptoKey;
288     int             cryptoKeySize;
289     unsigned char*  pMacKey;
290     int             macKeySize;
291     const char*     name;
292
293 } MV_CESA_TEST_SESSION;
294
295 typedef struct
296 {
297     MV_CESA_TEST_SESSION*   pSessions;
298     int                     numSessions;
299
300 } MV_CESA_TEST_DB_ENTRY;
301
302 typedef struct
303 {
304     char*           plainHexStr;
305     char*           cipherHexStr;
306     unsigned char*  pCryptoIV;
307     int             cryptoLength;
308     int             macLength;
309     int             digestOffset;
310
311 } MV_CESA_TEST_CASE;
312
313 typedef struct
314 {
315     int     size;
316     const char* outputHexStr;
317
318 } MV_CESA_SIZE_TEST;
319
320 static unsigned char    cryptoKey1[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
321                                         0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
322                                         0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
323
324 static unsigned char    cryptoKey7[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
325 static unsigned char    iv1[]        = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
326
327
328 static unsigned char    cryptoKey2[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
329                                         0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
330
331 static unsigned char    cryptoKey3[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
332                                         0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
333                                         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
334
335 static unsigned char    cryptoKey4[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
336                                         0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
337                                         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
338                                         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f};
339
340 static unsigned char    cryptoKey5[] = {0x56, 0xe4, 0x7a, 0x38, 0xc5, 0x59, 0x89, 0x74,
341                                         0xbc, 0x46, 0x90, 0x3d, 0xba, 0x29, 0x03, 0x49};
342
343
344 static unsigned char    key3des1[]   = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
345                                         0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01,
346                                         0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23};
347
348 /*  Input ASCII string: The quick brown fox jump  */
349 static char  plain3des1[]           =   "54686520717566636B2062726F776E20666F78206A756D70";
350 static char  cipher3des1[]          =   "A826FD8CE53B855FCCE21C8112256FE668D5C05DD9B6B900";
351
352 static unsigned char    key3des2[]  = {0x62, 0x7f, 0x46, 0x0e, 0x08, 0x10, 0x4a, 0x10,
353                                        0x43, 0xcd, 0x26, 0x5d, 0x58, 0x40, 0xea, 0xf1,
354                                        0x31, 0x3e, 0xdf, 0x97, 0xdf, 0x2a, 0x8a, 0x8c};
355
356 static unsigned char    iv3des2[]   = {0x8e, 0x29, 0xf7, 0x5e, 0xa7, 0x7e, 0x54, 0x75};
357
358 static char  plain3des2[]           = "326a494cd33fe756";
359
360 static char  cipher3desCbc2[]       = "8e29f75ea77e5475"
361                                       "b22b8d66de970692";
362
363 static unsigned char    key3des3[]  = {0x37, 0xae, 0x5e, 0xbf, 0x46, 0xdf, 0xf2, 0xdc,
364                                        0x07, 0x54, 0xb9, 0x4f, 0x31, 0xcb, 0xb3, 0x85,
365                                        0x5e, 0x7f, 0xd3, 0x6d, 0xc8, 0x70, 0xbf, 0xae};
366
367 static unsigned char    iv3des3[]   = {0x3d, 0x1d, 0xe3, 0xcc, 0x13, 0x2e, 0x3b, 0x65};
368
369 static char  plain3des3[]           = "84401f78fe6c10876d8ea23094ea5309";
370
371 static char  cipher3desCbc3[]       = "3d1de3cc132e3b65"
372                                       "7b1f7c7e3b1c948ebd04a75ffba7d2f5";
373
374 static unsigned char    iv5[]        = {0x8c, 0xe8, 0x2e, 0xef, 0xbe, 0xa0, 0xda, 0x3c,
375                                         0x44, 0x69, 0x9e, 0xd7, 0xdb, 0x51, 0xb7, 0xd9};
376
377 static unsigned char    aesCtrKey[]  = {0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8,
378                                         0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC};
379
380 static unsigned char    mdKey1[]     = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
381                                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
382
383 static unsigned char    mdKey2[]     = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
384                                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa};
385
386 static unsigned char    shaKey1[]    = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
387                                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
388                                         0x0b, 0x0b, 0x0b, 0x0b};
389
390 static unsigned char    shaKey2[]    = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
391                                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
392                                         0xaa, 0xaa, 0xaa, 0xaa};
393
394 static unsigned char    mdKey4[]     = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
395                                         0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10};
396
397 static unsigned char    shaKey4[]    = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
398                                         0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
399                                         0x11, 0x12, 0x13, 0x14};
400
401
402 static MV_CESA_TEST_SESSION   desTestSessions[] =
403 {
404 /*000*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB,
405              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
406              MV_CESA_DIR_ENCODE,
407              cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]),
408              NULL, 0,
409              "DES ECB encode",
410         },
411 /*001*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB,
412              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
413              MV_CESA_DIR_DECODE,
414              cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]),
415              NULL, 0,
416              "DES ECB decode",
417         },
418 /*002*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_CBC,
419              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
420              MV_CESA_DIR_ENCODE,
421              cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]),
422              NULL, 0,
423              "DES CBC encode"
424         },
425 /*003*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_CBC,
426              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
427              MV_CESA_DIR_DECODE,
428              cryptoKey7, sizeof(cryptoKey7)/sizeof(cryptoKey7[0]),
429              NULL, 0,
430              "DES CBC decode"
431         },
432 /*004*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
433              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
434              MV_CESA_DIR_ENCODE,
435              NULL, 0, NULL, 0,
436               "NULL Crypto Algorithm encode"
437         },
438 };
439
440
441 static MV_CESA_TEST_SESSION   tripleDesTestSessions[] =
442 {
443 /*100*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
444              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
445              MV_CESA_DIR_ENCODE,
446              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
447              NULL, 0,
448              "3DES ECB encode",
449         },
450 /*101*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
451              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
452              MV_CESA_DIR_DECODE,
453              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
454              NULL, 0,
455              "3DES ECB decode",
456         },
457 /*102*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
458              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
459              MV_CESA_DIR_ENCODE,
460              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
461              NULL, 0,
462              "3DES CBC encode"
463         },
464 /*103*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
465              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
466              MV_CESA_DIR_DECODE,
467              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
468              NULL, 0,
469              "3DES CBC decode"
470         },
471 /*104*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
472              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
473              MV_CESA_DIR_ENCODE,
474              key3des1, sizeof(key3des1),
475              NULL, 0,
476              "3DES ECB encode"
477         },
478 /*105*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
479              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
480              MV_CESA_DIR_ENCODE,
481              key3des2, sizeof(key3des2),
482              NULL, 0,
483              "3DES ECB encode"
484         },
485 /*106*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
486              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
487              MV_CESA_DIR_ENCODE,
488              key3des3, sizeof(key3des3),
489              NULL, 0,
490              "3DES ECB encode"
491         },
492 };
493
494
495 static MV_CESA_TEST_SESSION   aesTestSessions[] =
496 {
497 /*200*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
498              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
499              MV_CESA_DIR_ENCODE,
500              cryptoKey2, sizeof(cryptoKey2)/sizeof(cryptoKey2[0]),
501              NULL, 0,
502              "AES-128 ECB encode"
503         },
504 /*201*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
505              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
506              MV_CESA_DIR_DECODE,
507              cryptoKey2, sizeof(cryptoKey2)/sizeof(cryptoKey2[0]),
508              NULL, 0,
509              "AES-128 ECB decode"
510         },
511 /*202*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC,
512              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
513              MV_CESA_DIR_ENCODE,
514              cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]),
515              NULL, 0,
516              "AES-128 CBC encode"
517         },
518 /*203*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC,
519              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
520              MV_CESA_DIR_DECODE,
521              cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]),
522              NULL, 0,
523              "AES-128 CBC decode"
524         },
525 /*204*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
526              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
527              MV_CESA_DIR_ENCODE,
528              cryptoKey3, sizeof(cryptoKey3)/sizeof(cryptoKey3[0]),
529              NULL, 0,
530              "AES-192 ECB encode"
531         },
532 /*205*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
533              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
534              MV_CESA_DIR_DECODE,
535              cryptoKey3, sizeof(cryptoKey3)/sizeof(cryptoKey3[0]),
536              NULL, 0,
537              "AES-192 ECB decode"
538         },
539 /*206*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
540              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
541              MV_CESA_DIR_ENCODE,
542              cryptoKey4, sizeof(cryptoKey4)/sizeof(cryptoKey4[0]),
543              NULL, 0,
544              "AES-256 ECB encode"
545         },
546 /*207*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_ECB,
547              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
548              MV_CESA_DIR_DECODE,
549              cryptoKey4, sizeof(cryptoKey4)/sizeof(cryptoKey4[0]),
550              NULL, 0,
551              "AES-256 ECB decode"
552         },
553 /*208*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CTR,
554              MV_CESA_MAC_NULL, MV_CESA_CRYPTO_ONLY,
555              MV_CESA_DIR_ENCODE,
556              aesCtrKey, sizeof(aesCtrKey)/sizeof(aesCtrKey[0]),
557              NULL, 0,
558              "AES-128 CTR encode"
559         },
560 };
561
562
563 static MV_CESA_TEST_SESSION   md5TestSessions[] =
564 {
565 /*300*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
566              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY,
567              MV_CESA_DIR_ENCODE,
568              NULL, 0,
569              mdKey1, sizeof(mdKey1),
570              "HMAC-MD5 Generate Signature"
571         },
572 /*301*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
573              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY,
574              MV_CESA_DIR_DECODE,
575              NULL, 0,
576              mdKey1, sizeof(mdKey1),
577              "HMAC-MD5 Verify Signature"
578         },
579 /*302*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
580              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY,
581              MV_CESA_DIR_ENCODE,
582              NULL, 0,
583              mdKey2, sizeof(mdKey2),
584              "HMAC-MD5 Generate Signature"
585         },
586 /*303*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
587              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY,
588              MV_CESA_DIR_DECODE,
589              NULL, 0,
590              mdKey2, sizeof(mdKey2),
591              "HMAC-MD5 Verify Signature"
592         },
593 /*304*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
594              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_ONLY,
595              MV_CESA_DIR_ENCODE,
596              NULL, 0,
597              mdKey4, sizeof(mdKey4),
598              "HMAC-MD5 Generate Signature"
599         },
600 /*305*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
601              MV_CESA_MAC_MD5, MV_CESA_MAC_ONLY,
602              MV_CESA_DIR_ENCODE,
603              NULL, 0,
604              NULL, 0,
605              "HASH-MD5 Generate Signature"
606         },
607 };
608
609
610 static MV_CESA_TEST_SESSION   shaTestSessions[] =
611 {
612 /*400*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
613              MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY,
614              MV_CESA_DIR_ENCODE,
615              NULL, 0,
616              shaKey1, sizeof(shaKey1),
617              "HMAC-SHA1 Generate Signature"
618         },
619 /*401*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
620              MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY,
621              MV_CESA_DIR_DECODE,
622              NULL, 0,
623              shaKey1, sizeof(shaKey1),
624              "HMAC-SHA1 Verify Signature"
625         },
626 /*402*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
627              MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY,
628              MV_CESA_DIR_ENCODE,
629              NULL, 0,
630              shaKey2, sizeof(shaKey2),
631              "HMAC-SHA1 Generate Signature"
632         },
633 /*403*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
634              MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY,
635              MV_CESA_DIR_DECODE,
636              NULL, 0,
637              shaKey2, sizeof(shaKey2),
638              "HMAC-SHA1 Verify Signature"
639         },
640 /*404*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
641              MV_CESA_MAC_HMAC_SHA1, MV_CESA_MAC_ONLY,
642              MV_CESA_DIR_ENCODE,
643              NULL, 0,
644              shaKey4, sizeof(shaKey4),
645              "HMAC-SHA1 Generate Signature"
646         },
647 /*405*/ {-1, MV_CESA_CRYPTO_NULL, MV_CESA_CRYPTO_ECB,
648              MV_CESA_MAC_SHA1, MV_CESA_MAC_ONLY,
649              MV_CESA_DIR_ENCODE,
650              NULL, 0,
651              NULL, 0,
652              "HASH-SHA1 Generate Signature"
653         },
654 };
655
656 static MV_CESA_TEST_SESSION   combinedTestSessions[] =
657 {
658 /*500*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB,
659              MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC,
660              MV_CESA_DIR_ENCODE,
661              cryptoKey1, MV_CESA_DES_KEY_LENGTH,
662              mdKey4, sizeof(mdKey4),
663              "DES + MD5 encode"
664         },
665 /*501*/ {-1, MV_CESA_CRYPTO_DES, MV_CESA_CRYPTO_ECB,
666              MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC,
667              MV_CESA_DIR_ENCODE,
668              cryptoKey1, MV_CESA_DES_KEY_LENGTH,
669              shaKey4, sizeof(shaKey4),
670              "DES + SHA1 encode"
671         },
672 /*502*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
673              MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC,
674              MV_CESA_DIR_ENCODE,
675              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
676              mdKey4, sizeof(mdKey4),
677              "3DES + MD5 encode"
678         },
679 /*503*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
680              MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC,
681              MV_CESA_DIR_ENCODE,
682              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
683              shaKey4, sizeof(shaKey4),
684              "3DES + SHA1 encode"
685         },
686 /*504*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
687              MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC,
688              MV_CESA_DIR_ENCODE,
689              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
690              mdKey4, sizeof(mdKey4),
691              "3DES CBC + MD5 encode"
692         },
693 /*505*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_CBC,
694              MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC,
695              MV_CESA_DIR_ENCODE,
696              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
697              shaKey4, sizeof(shaKey4),
698              "3DES CBC + SHA1 encode"
699         },
700 /*506*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC,
701              MV_CESA_MAC_HMAC_MD5, MV_CESA_CRYPTO_THEN_MAC,
702              MV_CESA_DIR_ENCODE,
703              cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]),
704              mdKey4, sizeof(mdKey4),
705              "AES-128 CBC + MD5 encode"
706         },
707 /*507*/ {-1, MV_CESA_CRYPTO_AES, MV_CESA_CRYPTO_CBC,
708              MV_CESA_MAC_HMAC_SHA1, MV_CESA_CRYPTO_THEN_MAC,
709              MV_CESA_DIR_ENCODE,
710              cryptoKey5, sizeof(cryptoKey5)/sizeof(cryptoKey5[0]),
711              shaKey4, sizeof(shaKey4),
712              "AES-128 CBC + SHA1 encode"
713         },
714 /*508*/ {-1, MV_CESA_CRYPTO_3DES, MV_CESA_CRYPTO_ECB,
715              MV_CESA_MAC_HMAC_MD5, MV_CESA_MAC_THEN_CRYPTO,
716              MV_CESA_DIR_DECODE,
717              cryptoKey1, sizeof(cryptoKey1)/sizeof(cryptoKey1[0]),
718              mdKey4, sizeof(mdKey4),
719              "HMAC-MD5 + 3DES decode"
720         },
721 };
722
723
724 static MV_CESA_TEST_DB_ENTRY cesaTestsDB[MAX_TEST_TYPE+1] =
725 {
726     { desTestSessions,       sizeof(desTestSessions)/sizeof(desTestSessions[0]) },
727     { tripleDesTestSessions, sizeof(tripleDesTestSessions)/sizeof(tripleDesTestSessions[0]) },
728     { aesTestSessions,       sizeof(aesTestSessions)/sizeof(aesTestSessions[0]) },
729     { md5TestSessions,       sizeof(md5TestSessions)/sizeof(md5TestSessions[0]) },
730     { shaTestSessions,       sizeof(shaTestSessions)/sizeof(shaTestSessions[0]) },
731     { combinedTestSessions,  sizeof(combinedTestSessions)/sizeof(combinedTestSessions[0]) },
732     { NULL,                  0 }
733 };
734
735
736 char  cesaNullPlainHexText[]   = "000000000000000000000000000000000000000000000000";
737
738 char  cesaPlainAsciiText[]     = "Now is the time for all ";
739 char  cesaPlainHexEbc[]        = "4e6f77206973207468652074696d6520666f7220616c6c20";
740 char  cesaCipherHexEcb[]       = "3fa40e8a984d48156a271787ab8883f9893d51ec4b563b53";
741 char  cesaPlainHexCbc[]        = "1234567890abcdef4e6f77206973207468652074696d6520666f7220616c6c20";
742 char  cesaCipherHexCbc[]       = "1234567890abcdefe5c7cdde872bf27c43e934008c389c0f683788499a7c05f6";
743
744 char  cesaAesPlainHexEcb[]     = "000102030405060708090a0b0c0d0e0f";
745 char  cesaAes128cipherHexEcb[] = "0a940bb5416ef045f1c39458c653ea5a";
746 char  cesaAes192cipherHexEcb[] = "0060bffe46834bb8da5cf9a61ff220ae";
747 char  cesaAes256cipherHexEcb[] = "5a6e045708fb7196f02e553d02c3a692";
748
749 char  cesaAsciiStr1[]          = "Hi There";
750 char  cesaDataHexStr1[]        = "4869205468657265";
751 char  cesaHmacMd5digestHex1[]  = "9294727a3638bb1c13f48ef8158bfc9d";
752 char  cesaHmacSha1digestHex1[] = "b617318655057264e28bc0b6fb378c8ef146be00";
753 char  cesaDataAndMd5digest1[]  = "48692054686572659294727a3638bb1c13f48ef8158bfc9d";
754 char  cesaDataAndSha1digest1[] = "4869205468657265b617318655057264e28bc0b6fb378c8ef146be00";
755
756 char  cesaAesPlainText[]       = "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
757                                  "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
758                                  "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
759                                  "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf";
760
761 char  cesaAes128CipherCbc[]    = "c30e32ffedc0774e6aff6af0869f71aa"
762                                  "0f3af07a9a31a9c684db207eb0ef8e4e"
763                                  "35907aa632c3ffdf868bb7b29d3d46ad"
764                                  "83ce9f9a102ee99d49a53e87f4c3da55";
765
766 char  cesaAesIvPlainText[]     = "8ce82eefbea0da3c44699ed7db51b7d9"
767                                  "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
768                                  "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
769                                  "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
770                                  "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf";
771
772 char  cesaAes128IvCipherCbc[]  = "8ce82eefbea0da3c44699ed7db51b7d9"
773                                  "c30e32ffedc0774e6aff6af0869f71aa"
774                                  "0f3af07a9a31a9c684db207eb0ef8e4e"
775                                  "35907aa632c3ffdf868bb7b29d3d46ad"
776                                  "83ce9f9a102ee99d49a53e87f4c3da55";
777
778 char  cesaAesCtrPlain[]        = "00E0017B27777F3F4A1786F000000001"
779                                  "000102030405060708090A0B0C0D0E0F"
780                                  "101112131415161718191A1B1C1D1E1F"
781                                  "20212223";
782
783 char  cesaAesCtrCipher[]       = "00E0017B27777F3F4A1786F000000001"
784                                  "C1CF48A89F2FFDD9CF4652E9EFDB72D7"
785                                  "4540A42BDE6D7836D59A5CEAAEF31053"
786                                  "25B2072F";
787
788
789
790 /* Input cesaHmacHex3 is '0xdd' repeated 50 times */
791 char  cesaHmacMd5digestHex3[]  = "56be34521d144c88dbb8c733f0e8b3f6";
792 char  cesaHmacSha1digestHex3[] = "125d7342b9ac11cd91a39af48aa17b4f63f175d3";
793 char  cesaDataHexStr3[50*2+1]          = "";
794 char  cesaDataAndMd5digest3[sizeof(cesaDataHexStr3)+sizeof(cesaHmacMd5digestHex3)+8*2+1] = "";
795 char  cesaDataAndSha1digest3[sizeof(cesaDataHexStr3)+sizeof(cesaHmacSha1digestHex3)+8*2+1] = "";
796
797 /* Ascii string is "abc" */
798 char hashHexStr3[] = "616263";
799 char hashMd5digest3[] = "900150983cd24fb0d6963f7d28e17f72";
800 char hashSha1digest3[] = "a9993e364706816aba3e25717850c26c9cd0d89d";
801
802 char hashHexStr80[]     = "31323334353637383930"
803                           "31323334353637383930"
804                           "31323334353637383930"
805                           "31323334353637383930"
806                           "31323334353637383930"
807                           "31323334353637383930"
808                           "31323334353637383930"
809                           "31323334353637383930";
810
811 char hashMd5digest80[]           = "57edf4a22be3c955ac49da2e2107b67a";
812
813 char tripleDesThenMd5digest80[]  = "b7726a03aad490bd6c5a452a89a1b271";
814 char tripleDesThenSha1digest80[] = "b2ddeaca91030eab5b95a234ef2c0f6e738ff883";
815
816 char cbc3desThenMd5digest80[]    = "6f463057e1a90e0e91ae505b527bcec0";
817 char cbc3desThenSha1digest80[]   = "1b002ed050be743aa98860cf35659646bb8efcc0";
818
819 char cbcAes128ThenMd5digest80[]  = "6b6e863ac5a71d15e3e9b1c86c9ba05f";
820 char cbcAes128ThenSha1digest80[] = "13558472d1fc1c90dffec6e5136c7203452d509b";
821
822
823 static MV_CESA_TEST_CASE  cesaTestCases[] =
824 {
825  /*     plainHexStr          cipherHexStr               IV    crypto  mac     digest */
826  /*                                                           Length  Length  Offset */
827  /*0*/ { NULL,               NULL,                      NULL,   0,      0,      -1  },
828  /*1*/ { cesaPlainHexEbc,    cesaCipherHexEcb,          NULL,   24,     0,      -1  },
829  /*2*/ { cesaPlainHexCbc,    cesaCipherHexCbc,          NULL,   24,     0,      -1  },
830  /*3*/ { cesaAesPlainHexEcb, cesaAes128cipherHexEcb,    NULL,   16,     0,      -1  },
831  /*4*/ { cesaAesPlainHexEcb, cesaAes192cipherHexEcb,    NULL,   16,     0,      -1  },
832  /*5*/ { cesaAesPlainHexEcb, cesaAes256cipherHexEcb,    NULL,   16,     0,      -1  },
833  /*6*/ { cesaDataHexStr1,    cesaHmacMd5digestHex1,     NULL,   0,      8,      -1  },
834  /*7*/ { NULL,               cesaDataAndMd5digest1,     NULL,   0,      8,      -1  },
835  /*8*/ { cesaDataHexStr3,    cesaHmacMd5digestHex3,     NULL,   0,      50,     -1  },
836  /*9*/ { NULL,               cesaDataAndMd5digest3,     NULL,   0,      50,     -1  },
837 /*10*/ { cesaAesPlainText,   cesaAes128IvCipherCbc,     iv5,    64,     0,      -1  },
838 /*11*/ { cesaDataHexStr1,    cesaHmacSha1digestHex1,    NULL,   0,      8,      -1  },
839 /*12*/ { NULL,               cesaDataAndSha1digest1,    NULL,   0,      8,      -1  },
840 /*13*/ { cesaDataHexStr3,    cesaHmacSha1digestHex3,    NULL,   0,      50,     -1  },
841 /*14*/ { NULL,               cesaDataAndSha1digest3,    NULL,   0,      50,     -1  },
842 /*15*/ { hashHexStr3,        hashMd5digest3,            NULL,   0,      3,      -1  },
843 /*16*/ { hashHexStr3,        hashSha1digest3,           NULL,   0,      3,      -1  },
844 /*17*/ { hashHexStr80,       tripleDesThenMd5digest80,  NULL,   80,     80,     -1  },
845 /*18*/ { hashHexStr80,       tripleDesThenSha1digest80, NULL,   80,     80,     -1  },
846 /*19*/ { hashHexStr80,       cbc3desThenMd5digest80,    iv1,    80,     80,     -1  },
847 /*20*/ { hashHexStr80,       cbc3desThenSha1digest80,   iv1,    80,     80,     -1  },
848 /*21*/ { hashHexStr80,       cbcAes128ThenMd5digest80,  iv5,    80,     80,     -1  },
849 /*22*/ { hashHexStr80,       cbcAes128ThenSha1digest80, iv5,    80,     80,     -1  },
850 /*23*/ { cesaAesCtrPlain,    cesaAesCtrCipher,          NULL,   36,     0,      -1  },
851 /*24*/ { cesaAesIvPlainText, cesaAes128IvCipherCbc,     NULL,   64,     0,      -1  },
852 /*25*/ { plain3des1,         cipher3des1,               NULL,   0,      0,      -1  },
853 /*26*/ { plain3des2,         cipher3desCbc2,            iv3des2,0,      0,      -1  },
854 /*27*/ { plain3des3,         cipher3desCbc3,            iv3des3,0,      0,      -1  },
855 };
856
857
858 /* Key         = 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
859  *               0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
860  * Input 0xdd repeated "size" times
861  */
862 static MV_CESA_SIZE_TEST     mdMultiSizeTest302[] =
863 {
864     { 80,   "7a031a640c14a4872814930b1ef3a5b2" },
865     { 512,  "5488e6c5a14dc72a79f28312ca5b939b" },
866     { 1000, "d00814f586a8b78a05724239d2531821" },
867     { 1001, "bf07df7b7f49d3f5b5ecacd4e9e63281" },
868     { 1002, "1ed4a1a802e87817a819d4e37bb4d0f7" },
869     { 1003, "5972ab64a4f265ee371dac2f2f137f90" },
870     { 1004, "71f95e7ec3aa7df2548e90898abdb28e" },
871     { 1005, "e082790b4857fcfc266e92e59e608814" },
872     { 1006, "9500f02fd8ac7fde8b10e4fece9a920d" },
873     { 1336, "e42edcce57d0b75b01aa09d71427948b" },
874     { 1344, "bb5454ada0deb49ba0a97ffd60f57071" },
875     { 1399, "0f44d793e744b24d53f44f295082ee8c" },
876     { 1400, "359de8a03a9b707928c6c60e0e8d79f1" },
877     { 1401, "e913858b484cbe2b384099ea88d8855b" },
878     { 1402, "d9848a164af53620e0540c1d7d87629e" },
879     { 1403, "0c9ee1c2c9ef45e9b625c26cbaf3e822" },
880     { 1404, "12edd4f609416e3c936170360561b064" },
881     { 1405, "7fc912718a05446395345009132bf562" },
882     { 1406, "882f17425e579ff0d85a91a59f308aa0" },
883     { 1407, "005cae408630a2fb5db82ad9db7e59da" },
884     { 1408, "64655f8b404b3fea7a3e3e609bc5088f" },
885     { 1409, "4a145284a7f74e01b6bb1a0ec6a0dd80" },
886     { 2048, "67caf64475650732def374ebb8bde3fd" },
887     { 2049, "6c84f11f472825f7e6cd125c2981884b" },
888     { 2050, "8999586754a73a99efbe4dbad2816d41" },
889     { 2051, "ba6946b610e098d286bc81091659dfff" },
890     { 2052, "d0afa01c92d4d13def2b024f36faed83" },
891     { 3072, "61d8beac61806afa2585d74a9a0e6974" },
892     { 3074, "f6501a28dcc24d1e4770505c51a87ed3" },
893     { 3075, "ea4a6929be67e33e61ff475369248b73" },
894     { 4048, "aa8c4d68f282a07e7385acdfa69f4bed" },
895     { 4052, "afb5ed2c0e1d430ea59e59ed5ed6b18a" },
896     { 4058, "9e8553f9bdd43aebe0bd729f0e600c99" },
897     { 6144, "f628f3e5d183fe5cdd3a5abee39cf872" },
898     { 6150, "89a3efcea9a2f25f919168ad4a1fd292" },
899     { 6400, "cdd176b7fb747873efa4da5e32bdf88f" },
900     { 6528, "b1d707b027354aca152c45ee559ccd3f" },
901     { 8192, "c600ea4429ac47f9941f09182166e51a" },
902     {16384, "16e8754bfbeb4c649218422792267a37" },
903     {18432, "0fd0607521b0aa8b52219cfbe215f63e" },
904     { 0, NULL },
905 };
906
907 /* Key         = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
908  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
909  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
910  */
911 static MV_CESA_SIZE_TEST     mdMultiSizeTest304[] =
912 {
913     { 80,   "a456c4723fee6068530af5a2afa71627" },
914     { 512,  "f85c2a2344f5de68b432208ad13e5794" },
915     { 1000, "35464d6821fd4a293a41eb84e274c8c5" },
916     { 1001, "c08eedbdce60cceb54bc2d732bb32c8b" },
917     { 1002, "5664f71800c011cc311cb6943339c1b8" },
918     { 1003, "779c723b044c585dc7802b13e8501bdc" },
919     { 1004, "55e500766a2c307bc5c5fdd15e4cacd4" },
920     { 1005, "d5f978954f5c38529d1679d2b714f068" },
921     { 1006, "cd3efc827ce628b7281b72172693abf9" },
922     { 1336, "6f04479910785878ae6335b8d1e87edf" },
923     { 1344, "b6d27b50c2bce1ba2a8e1b5cc4324368" },
924     { 1399, "65f70a1d4c86e5eaeb0704c8a7816795" },
925     { 1400, "3394b5adc4cb3ff98843ca260a44a88a" },
926     { 1401, "3a06f3582033a66a4e57e0603ce94e74" },
927     { 1402, "e4d97f5ed51edc48abfa46eeb5c31752" },
928     { 1403, "3d05e40b080ee3bedf293cb87b7140e7" },
929     { 1404, "8cf294fc3cd153ab18dccb2a52cbf244" },
930     { 1405, "d1487bd42f6edd9b4dab316631159221" },
931     { 1406, "0527123b6bf6936cf5d369dc18c6c70f" },
932     { 1407, "3224a06639db70212a0cd1ae1fcc570a" },
933     { 1408, "a9e13335612c0356f5e2c27086e86c43" },
934     { 1409, "a86d1f37d1ed8a3552e9a4f04dceea98" },
935     { 2048, "396905c9b961cd0f6152abfb69c4449c" },
936     { 2049, "49f39bff85d9dcf059fadb89efc4a70f" },
937     { 2050, "3a2b4823bc4d0415656550226a63e34a" },
938     { 2051, "dec60580d406c782540f398ad0bcc7e0" },
939     { 2052, "32f76610a14310309eb748fe025081bf" },
940     { 3072, "45edc1a42bf9d708a621076b63b774da" },
941     { 3074, "9be1b333fe7c0c9f835fb369dc45f778" },
942     { 3075, "8c06fcac7bd0e7b7a17fd6508c09a549" },
943     { 4048, "0ddaef848184bf0ad98507a10f1e90e4" },
944     { 4052, "81976bcaeb274223983996c137875cb8" },
945     { 4058, "0b0a7a1c82bc7cbc64d8b7cd2dc2bb22" },
946     { 6144, "1c24056f52725ede2dff0d7f9fc9855f" },
947     { 6150, "b7f4b65681c4e43ee68ca466ca9ca4ec" },
948     { 6400, "443bbaab9f7331ddd4bf11b659cd43c8" },
949     { 6528, "216f44f23047cfee03a7a64f88f9a995" },
950     { 8192, "ac7a993b2cad54879dba1bde63e39097" },
951     { 8320, "55ed7be9682d6c0025b3221a62088d08" },
952     {16384, "c6c722087653b62007aea668277175e5" },
953     {18432, "f1faca8e907872c809e14ffbd85792d6" },
954     { 0, NULL },
955 };
956
957 /* HASH-MD5
958  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
959  *               repeated "size" times
960  */
961 static MV_CESA_SIZE_TEST     mdMultiSizeTest305[] =
962 {
963     { 80,   "57edf4a22be3c955ac49da2e2107b67a" },
964     { 512,  "c729ae8f0736cc377a9767a660eaa04e" },
965     { 1000, "f1257a8659eb92d36fe14c6bf3852a6a" },
966     { 1001, "f8a46fe8ea04fdc8c7de0e84042d3878" },
967     { 1002, "da188dd67bff87d58aa3c02af2d0cc0f" },
968     { 1003, "961753017feee04c9b93a8e51658a829" },
969     { 1004, "dd68c4338608dcc87807a711636bf2af" },
970     { 1005, "e338d567d3ce66bf69ada29658a8759b" },
971     { 1006, "443c9811e8b92599b0b149e8d7ec700a" },
972     { 1336, "89a98511706008ba4cbd0b4a24fa5646" },
973     { 1344, "335a919805f370b9e402a62c6fe01739" },
974     { 1399, "5d18d0eddcd84212fe28d812b5e80e3b" },
975     { 1400, "6b695c240d2dffd0dffc99459ca76db6" },
976     { 1401, "49590f61298a76719bc93a57a30136f5" },
977     { 1402, "94c2999fa3ef1910a683d69b2b8476f2" },
978     { 1403, "37073a02ab00ecba2645c57c228860db" },
979     { 1404, "1bcd06994fce28b624f0c5fdc2dcdd2b" },
980     { 1405, "11b93671a64c95079e8cf9e7cddc8b3d" },
981     { 1406, "4b6695772a4c66313fa4871017d05f36" },
982     { 1407, "d1539b97fbfda1c075624e958de19c5b" },
983     { 1408, "b801b9b69920907cd018e8063092ede9" },
984     { 1409, "b765f1406cfe78e238273ed01bbcaf7e" },
985     { 2048, "1d7e2c64ac29e2b3fb4c272844ed31f5" },
986     { 2049, "71d38fac49c6b1f4478d8d88447bcdd0" },
987     { 2050, "141c34a5592b1bebfa731e0b23d0cdba" },
988     { 2051, "c5e1853f21c59f5d6039bd13d4b380d8" },
989     { 2052, "dd44a0d128b63d4b5cccd967906472d7" },
990     { 3072, "37d158e33b21390822739d13db7b87fe" },
991     { 3074, "aef3b209d01d39d0597fe03634bbf441" },
992     { 3075, "335ffb428eabf210bada96d74d5a4012" },
993     { 4048, "2434c2b43d798d2819487a886261fc64" },
994     { 4052, "ac2fa84a8a33065b2e92e36432e861f8" },
995     { 4058, "856781f85616c341c3533d090c1e1e84" },
996     { 6144, "e5d134c652c18bf19833e115f7a82e9b" },
997     { 6150, "a09a353be7795fac2401dac5601872e6" },
998     { 6400, "08b9033ac6a1821398f50af75a2dbc83" },
999     { 6528, "3d47aa193a8540c091e7e02f779e6751" },
1000     { 8192, "d3164e710c0626f6f395b38f20141cb7" },
1001     { 8320, "b727589d9183ff4e8491dd24466974a3" },
1002     {16384, "3f54d970793d2274d5b20d10a69938ac" },
1003     {18432, "f558511dcf81985b7a1bb57fad970531" },
1004     { 0, NULL },
1005 };
1006
1007
1008 /* Key         = 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1009  *               0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
1010  *               0xaa, 0xaa, 0xaa, 0xaa
1011  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1012  */
1013 static MV_CESA_SIZE_TEST     shaMultiSizeTest402[] =
1014 {
1015     { 80,   "e812f370e659705a1649940d1f78cd7af18affd3" },
1016     { 512,  "e547f886b2c15d995ed76a8a924cb408c8080f66" },
1017     { 1000, "239443194409f1a5342ecde1a092c8f3a3ed790a" },
1018     { 1001, "f278ab9a102850a9f48dc4e9e6822afe2d0c52b5" },
1019     { 1002, "8bcc667df5ab6ece988b3af361d09747c77f4e72" },
1020     { 1003, "0fae6046c7dc1d3e356b25af836f6077a363f338" },
1021     { 1004, "0ea48401cc92ae6bc92ae76685269cb0167fbe1a" },
1022     { 1005, "ecbcd7c879b295bafcd8766cbeac58cc371e31d1" },
1023     { 1006, "eb4a4a3d07d1e9a15e6f1ab8a9c47f243e27324c" },
1024     { 1336, "f5950ee1d77c10e9011d2149699c9366fe52529c" },
1025     { 1344, "b04263604a63c351b0b3b9cf1785b4bdba6c8838" },
1026     { 1399, "8cb1cff61d5b784045974a2fc69386e3b8d24218" },
1027     { 1400, "9bb2f3fcbeddb2b90f0be797cd647334a2816d51" },
1028     { 1401, "23ae462a7a0cb440f7445791079a5d75a535dd33" },
1029     { 1402, "832974b524a4d3f9cc2f45a3cabf5ccef65cd2aa" },
1030     { 1403, "d1c683742fe404c3c20d5704a5430e7832a7ec95" },
1031     { 1404, "867c79042e64f310628e219d8b85594cd0c7adc3" },
1032     { 1405, "c9d81d49d13d94358f56ccfd61af02b36c69f7c3" },
1033     { 1406, "0df43daab2786172f9b8d07d61f14a070cf1287a" },
1034     { 1407, "0fd8f3ad7f169534b274d4c66bbddd89f759e391" },
1035     { 1408, "3987511182b18473a564436003139b808fa46343" },
1036     { 1409, "ef667e063c9e9f539a8987a8d0bd3066ee85d901" },
1037     { 2048, "921109c99f3fedaca21727156d5f2b4460175327" },
1038     { 2049, "47188600dd165eb45f27c27196d3c46f4f042c1b" },
1039     { 2050, "8831939904009338de10e7fa670847041387807d" },
1040     { 2051, "2f8ebb5db2997d614e767be1050366f3641e7520" },
1041     { 2052, "669e51cd730dae158d3bef8adba075bd95a0d011" },
1042     { 3072, "cfee66cfd83abc8451af3c96c6b35a41cc6c55f5" },
1043     { 3074, "216ea26f02976a261b7d21a4dd3085157bedfabd" },
1044     { 3075, "bd612ebba021fd8e012b14c3bd60c8c5161fabc0" },
1045     { 4048, "c2564c1fdf2d5e9d7dde7aace2643428e90662e8" },
1046     { 4052, "91ce61fe924b445dfe7b5a1dcd10a27caec16df6" },
1047     { 4058, "db2a9be5ee8124f091c7ebd699266c5de223c164" },
1048     { 6144, "855109903feae2ba3a7a05a326b8a171116eb368" },
1049     { 6150, "37520bb3a668294d9c7b073e7e3daf8fee248a78" },
1050     { 6400, "60a353c841b6d2b1a05890349dad2fa33c7536b7" },
1051     { 6528, "9e53a43a69bb42d7c8522ca8bd632e421d5edb36" },
1052     { 8192, "a918cb0da862eaea0a33ee0efea50243e6b4927c" },
1053     { 8320, "29a5dcf55d1db29cd113fcf0572ae414f1c71329" },
1054     {16384, "6fb27966138e0c8d5a0d65ace817ebd53633cee1" },
1055     {18432, "ca09900d891c7c9ae2a559b10f63a217003341c1" },
1056     { 0, NULL },
1057 };
1058
1059 /* Key         = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1060  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1061  *               0x11, 0x12, 0x13, 0x14
1062  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1063  */
1064 static MV_CESA_SIZE_TEST     shaMultiSizeTest404[] =
1065 {
1066     { 80,   "beaf20a34b06a87558d156c0949bc3957d40222e" },
1067     { 512,  "3353955358d886bc2940a3c7f337ff7dafb59c7b" },
1068     { 1000, "8737a542c5e9b2b6244b757ebb69d5bd602a829f" },
1069     { 1001, "fd9e7582d8a5d3c9fe3b923e4e6a41b07a1eb4d4" },
1070     { 1002, "a146d14a6fc3c274ff600568f4d75b977989e00d" },
1071     { 1003, "be22601bbc027ddef2dec97d30b3dc424fd803c5" },
1072     { 1004, "3e71fe99b2fe2b7bfdf4dbf0c7f3da25d7ea35e7" },
1073     { 1005, "2c422735d7295408fddd76f5e8a83a2a8da13df3" },
1074     { 1006, "6d875319049314b61855101a647b9ba3313428e6" },
1075     { 1336, "c1631ea80bad9dc43a180712461b65a0598c711c" },
1076     { 1344, "816069bf91d34581005746e2e0283d0f9c7b7605" },
1077     { 1399, "4e139866dc61cfcb8b67ca2ebd637b3a538593af" },
1078     { 1400, "ff2a0f8dd2b02c5417910f6f55d33a78e081a723" },
1079     { 1401, "ab00c12be62336964cbce31ae97fe2a0002984d5" },
1080     { 1402, "61349e7f999f3a1acc56c3e9a5060a9c4a7b05b6" },
1081     { 1403, "3edbc0f61e435bc1317fa27d840076093fb79353" },
1082     { 1404, "d052c6dfdbe63d45dab23ef9893e2aa4636aca1e" },
1083     { 1405, "0cc16b7388d67bf0add15a31e6e6c753cfae4987" },
1084     { 1406, "c96ba7eaad74253c38c22101b558d2850b1d1b90" },
1085     { 1407, "3445428a40d2c6556e7c55797ad8d323b61a48d9" },
1086     { 1408, "8d6444f937a09317c89834187b8ea9b8d3a8c56b" },
1087     { 1409, "c700acd3ecd19014ea2bdb4d42510c467e088475" },
1088     { 2048, "ee27d2a0cb77470c2f496212dfd68b5bb7b04e4b" },
1089     { 2049, "683762d7a02983b26a6d046e6451d9cd82c25932" },
1090     { 2050, "0fd20f1d55a9ee18363c2a6fd54aa13aee69992f" },
1091     { 2051, "86c267d8cc4bc8d59090e4f8b303da960fd228b7" },
1092     { 2052, "452395ae05b3ec503eea34f86fc0832485ad97c1" },
1093     { 3072, "75198e3cfd0b9bcff2dabdf8e38e6fdaa33ca49a" },
1094     { 3074, "4e24785ef080141ce4aab4675986d9acea624d7c" },
1095     { 3075, "3a20c5978dd637ec0e809bf84f0d9ccf30bc65bf" },
1096     { 4048, "3c32da256be7a7554922bf5fed51b0d2d09e59ad" },
1097     { 4052, "fff898426ea16e54325ae391a32c6c9bce4c23c0" },
1098     { 4058, "c800b9e562e1c91e1310116341a3c91d37f848ec" },
1099     { 6144, "d91d509d0cc4376c2d05bf9a5097717a373530e6" },
1100     { 6150, "d957030e0f13c5df07d9eec298542d8f94a07f12" },
1101     { 6400, "bb745313c3d7dc17b3f955e5534ad500a1082613" },
1102     { 6528, "77905f80d9ca82080bbb3e5654896dabfcfd1bdb" },
1103     { 8192, "5237fd9a81830c974396f99f32047586612ff3c0" },
1104     { 8320, "57668e28d5f2dba0839518a11db0f6af3d7e08bf" },
1105     {16384, "62e093fde467f0748087beea32e9af97d5c61241" },
1106     {18432, "845fb33130c7d6ea554fd5aacb9c50cf7ccb5929" },
1107     { 0, NULL },
1108 };
1109
1110 /* HASH-SHA1
1111  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1112  *               repeated "size" times
1113  */
1114 static MV_CESA_SIZE_TEST     shaMultiSizeTest405[] =
1115 {
1116     { 80,   "50abf5706a150990a08b2c5ea40fa0e585554732" },
1117     { 512,  "f14516a08948fa27917a974d219741a697ba0087" },
1118     { 1000, "0bd18c378d5788817eb4f1e5dc07d867efa5cbf4" },
1119     { 1001, "ca29b85c35db1b8aef83c977893a11159d1b7aa2" },
1120     { 1002, "d83bc973eaaedb8a31437994dabbb3304b0be086" },
1121     { 1003, "2cf7bbef0acd6c00536b5c58ca470df9a3a90b6c" },
1122     { 1004, "e4375d09b1223385a8a393066f8209acfd936a80" },
1123     { 1005, "1029b38043e027745d019ce1d2d68e3d8b9d8f99" },
1124     { 1006, "deea16dcebbd8ac137e2b984deb639b9fb5e9680" },
1125     { 1336, "ea031b065fff63dcfb6a41956e4777520cdbc55d" },
1126     { 1344, "b52096c6445e6c0a8355995c70dc36ae186c863c" },
1127     { 1399, "cde2f6f8379870db4b32cf17471dc828a8dbff2b" },
1128     { 1400, "e53ff664064bc09fe5054c650806bd42d8179518" },
1129     { 1401, "d1156db5ddafcace64cdb510ff0d4af9b9a8ad64" },
1130     { 1402, "34ede0e9a909dd84a2ae291539105c0507b958e1" },
1131     { 1403, "a772ca3536da77e6ad3251e4f9e1234a4d7b87c0" },
1132     { 1404, "29740fd2b04e7a8bfd32242db6233156ad699948" },
1133     { 1405, "65b17397495b70ce4865dad93bf991b74c97cce1" },
1134     { 1406, "a7ee89cd0754061fdb91af7ea6abad2c69d542e3" },
1135     { 1407, "3eebf82f7420188e23d328b7ce93580b279a5715" },
1136     { 1408, "e08d3363a8b9a490dfb3a4c453452b8f114deeec" },
1137     { 1409, "95d74df739181a4ff30b8c39e28793a36598e924" },
1138     { 2048, "aa40262509c2abf84aab0197f83187fc90056d91" },
1139     { 2049, "7dec28ef105bc313bade8d9a7cdeac58b99de5ea" },
1140     { 2050, "d2e30f77ec81197de20f56588a156094ecb88450" },
1141     { 2051, "6b22ccc874833e96551a39da0c0edcaa0d969d92" },
1142     { 2052, "f843141e57875cd669af58744bc60aa9ea59549c" },
1143     { 3072, "09c5fedeaa62c132e673cc3c608a00142273d086" },
1144     { 3074, "b09e95eea9c7b1b007a58accec488301901a7f3d" },
1145     { 3075, "e6226b77b4ada287a8c9bbcf4ed71eec5ce632dc" },
1146     { 4048, "e99394894f855821951ddddf5bfc628547435f5c" },
1147     { 4052, "32d2f1af38be9cfba6cd03d55a254d0b3e1eb382" },
1148     { 4058, "d906552a4f2aca3a22e1fecccbcd183d7289d0ef" },
1149     { 6144, "2e7f62d35a860988e1224dc0543204af19316041" },
1150     { 6150, "d6b89698ee133df46fec9d552fadc328aa5a1b51" },
1151     { 6400, "dff50e90c46853988fa3a4b4ce5dda6945aae976" },
1152     { 6528, "9e63ec0430b96db02d38bc78357a2f63de2ab7f8" },
1153     { 8192, "971eb71ed60394d5ab5abb12e88420bdd41b5992" },
1154     { 8320, "91606a31b46afeaac965cecf87297e791b211013" },
1155     {16384, "547f830a5ec1f5f170ce818f156b1002cabc7569" },
1156     {18432, "f16f272787f3b8d539652e4dc315af6ab4fda0ef" },
1157     { 0, NULL },
1158 };
1159
1160 /* CryptoKey   = 0x01234567, 0x89abcdef,
1161  *               0x01234567, 0x89abcdef,
1162  *               0x01234567, 0x89abcdef;
1163  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1164  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1165  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1166  * Note: only sizes aligned to 3DES block size (8 bytes) allowed
1167  */
1168 static MV_CESA_SIZE_TEST     tripleDesMdMultiSizeTest502[] =
1169 {
1170     {   64, "9586962a2aaaef28803dec2e17807a7f" },
1171     {   80, "b7726a03aad490bd6c5a452a89a1b271" },
1172     {  352, "f1ed9563aecc3c0d2766eb2bed3b4e4c" },
1173     {  512, "0f9decb11ab40fe86f4d4d9397bc020e" },
1174     { 1000, "3ba69deac12cab8ff9dff7dbd9669927" },
1175     { 1336, "6cf47bf1e80e03e2c1d0945bc50d37d2" },
1176     { 1344, "4be388dab21ceb3fa1b8d302e9b821f7" },
1177     { 1400, "a58b79fb21dd9bfc6ec93e3b99fb0ef1" },
1178     { 1408, "8bc97379fc2ac3237effcdd4f7a86528" },
1179     { 2048, "1339f03ab3076f25a20bc4cba16eb5bf" },
1180     { 3072, "731204d2d90c4b36ae41f5e1fb874288" },
1181     { 4048, "c028d998cfda5642547b7e1ed5ea16e4" },
1182     { 6144, "b1b19cd910cc51bd22992f1e59f1e068" },
1183     { 6400, "44e4613496ba622deb0e7cb768135a2f" },
1184     { 6528, "3b06b0a86f8db9cd67f9448dfcf10549" },
1185     { 8192, "d581780b7163138a0f412be681457d82" },
1186     {16384, "03b8ac05527faaf1bed03df149c65ccf" },
1187     {18432, "677c8a86a41dab6c5d81b85b8fb10ff6" },
1188     { 0, NULL },
1189 };
1190
1191
1192 /* CryptoKey   = 0x01234567, 0x89abcdef,
1193  *               0x01234567, 0x89abcdef,
1194  *               0x01234567, 0x89abcdef;
1195  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1196  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1197  *               0x11, 0x12, 0x13, 0x14
1198  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1199  * Note: only sizes aligned to 3DES block size (8 bytes) allowed
1200  */
1201 static MV_CESA_SIZE_TEST     tripleDesShaMultiSizeTest503[] =
1202 {
1203     {   64, "44a1e9bcbfc1429630d9ea68b7a48b0427a684f2" },
1204     {   80, "b2ddeaca91030eab5b95a234ef2c0f6e738ff883" },
1205     {  352, "4b91864c7ff629bdff75d9726421f76705452aaf" },
1206     {  512, "6dd37faceeb2aa98ba74f4242ed6734a4d546af5" },
1207     { 1000, "463661c30300be512a9df40904f0757cde5f1141" },
1208     { 1336, "b931f831d9034fe59c65176400b039fe9c1f44a5" },
1209     { 1344, "af8866b1cd4a4887d6185bfe72470ffdfb3648e1" },
1210     { 1400, "49c6caf07296d5e31d2504d088bc5b20c3ee7cdb" },
1211     { 1408, "fcae8deedbc6ebf0763575dc7e9de075b448a0f4" },
1212     { 2048, "edece5012146c1faa0dd10f50b183ba5d2af58ac" },
1213     { 3072, "5b83625adb43a488b8d64fecf39bb766818547b7" },
1214     { 4048, "d2c533678d26c970293af60f14c8279dc708bfc9" },
1215     { 6144, "b8f67af4f991b08b725f969b049ebf813bfacc5c" },
1216     { 6400, "d9a6c7f746ac7a60ef2edbed2841cf851c25cfb0" },
1217     { 6528, "376792b8c8d18161d15579fb7829e6e3a27e9946" },
1218     { 8192, "d890eabdca195b34ef8724b28360cffa92ae5655" },
1219     {16384, "a167ee52639ec7bf19aee9c6e8f76667c14134b9" },
1220     {18432, "e4396ab56f67296b220985a12078f4a0e365d2cc" },
1221     { 0, NULL },
1222 };
1223
1224 /* CryptoKey   = 0x01234567, 0x89abcdef,
1225  *               0x01234567, 0x89abcdef,
1226  *               0x01234567, 0x89abcdef
1227  * IV          = 0x12345678, 0x90abcdef
1228  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1229  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1230  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1231  * Note: only sizes aligned to 3DES block size (8 bytes) allowed
1232  */
1233 static MV_CESA_SIZE_TEST     cbc3desMdMultiSizeTest504[] =
1234 {
1235     {   64, "8d10e00802460ede0058c139ba48bd2d" },
1236     {   80, "6f463057e1a90e0e91ae505b527bcec0" },
1237     {  352, "4938d48bdf86aece2c6851e7c6079788" },
1238     {  512, "516705d59f3cf810ebf2a13a23a7d42e" },
1239     { 1000, "a5a000ee5c830e67ddc6a2d2e5644b31" },
1240     { 1336, "44af60087b74ed07950088efbe3b126a" },
1241     { 1344, "1f5b39e0577920af731dabbfcf6dfc2a" },
1242     { 1400, "6804ea640e29b9cd39e08bc37dbce734" },
1243     { 1408, "4fb436624b02516fc9d1535466574bf9" },
1244     { 2048, "c909b0985c423d8d86719f701e9e83db" },
1245     { 3072, "cfe0bc34ef97213ee3d3f8b10122db21" },
1246     { 4048, "03ea10b5ae4ddeb20aed6af373082ed1" },
1247     { 6144, "b9a0ff4f87fc14b3c2dc6f0ed0998fdf" },
1248     { 6400, "6995f85d9d4985dd99e974ec7dda9dd6" },
1249     { 6528, "bbbb548ce2fa3d58467f6a6a5168a0e6" },
1250     { 8192, "afe101fbe745bb449ae4f50d10801456" },
1251     {16384, "9741706d0b1c923340c4660ff97cacdf" },
1252     {18432, "b0217becb73cb8f61fd79c7ce9d023fb" },
1253     { 0, NULL },
1254 };
1255
1256
1257 /* CryptoKey   = 0x01234567, 0x89abcdef,
1258  *               0x01234567, 0x89abcdef,
1259  *               0x01234567, 0x89abcdef;
1260  * IV          = 0x12345678, 0x90abcdef
1261  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1262  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1263  *               0x11, 0x12, 0x13, 0x14
1264  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1265  * Note: only sizes aligned to 3DES block size (8 bytes) allowed
1266  */
1267 static MV_CESA_SIZE_TEST     cbc3desShaMultiSizeTest505[] =
1268 {
1269     {   64, "409187e5bdb0be4a7754ca3747f7433dc4f01b98" },
1270     {   80, "1b002ed050be743aa98860cf35659646bb8efcc0" },
1271     {  352, "6cbf7ebe50fa4fa6eecc19eca23f9eae553ccfff" },
1272     {  512, "cfb5253fb4bf72b743320c30c7e48c54965853b0" },
1273     { 1000, "95e04e1ca2937e7c5a9aba9e42d2bcdb8a7af21f" },
1274     { 1336, "3b5c1f5eee5837ebf67b83ae01405542d77a6627" },
1275     { 1344, "2b3d42ab25615437f98a1ee310b81d07a02badc2" },
1276     { 1400, "7f8687df7c1af44e4baf3c934b6cca5ab6bc993e" },
1277     { 1408, "473a581c5f04f7527d50793c845471ac87e86430" },
1278     { 2048, "e41d20cae7ebe34e6e828ed62b1e5734019037bb" },
1279     { 3072, "275664afd7a561d804e6b0d204e53939cde653ae" },
1280     { 4048, "0d220cc5b34aeeb46bbbd637dde6290b5a8285a3" },
1281     { 6144, "cb393ddcc8b1c206060625b7d822ef9839e67bc5" },
1282     { 6400, "dd3317e2a627fc04800f74a4b05bfda00fab0347" },
1283     { 6528, "8a74c3b2441ab3f5a7e08895cc432566219a7c41" },
1284     { 8192, "b8e6ef3a549ed0e005bd5b8b1a5fe6689e9711a7" },
1285     {16384, "55f59404008276cdac0e2ba0d193af2d40eac5ce" },
1286     {18432, "86ae6c4fc72369a54cce39938e2d0296cd9c6ec5" },
1287     { 0, NULL },
1288 };
1289
1290
1291 /* CryptoKey   = 0x01234567, 0x89abcdef,
1292  *               0x01234567, 0x89abcdef,
1293  *               0x01234567, 0x89abcdef
1294  * IV          = 0x12345678, 0x90abcdef
1295  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1296  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1297  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1298  * Note: only sizes aligned to AES block size (16 bytes) allowed
1299  */
1300 static MV_CESA_SIZE_TEST     cbcAes128md5multiSizeTest506[] =
1301 {
1302     {   16, "7ca4c2ba866751598720c5c4aa0d6786" },
1303     {   64, "7dba7fb988e80da609b1fea7254bced8" },
1304     {   80, "6b6e863ac5a71d15e3e9b1c86c9ba05f" },
1305     {  352, "a1ceb9c2e3021002400d525187a9f38c" },
1306     {  512, "596c055c1c55db748379223164075641" },
1307     { 1008, "f920989c02f3b3603f53c99d89492377" },
1308     { 1344, "2e496b73759d77ed32ea222dbd2e7b41" },
1309     { 1408, "7178c046b3a8d772efdb6a71c4991ea4" },
1310     { 2048, "a917f0099c69eb94079a8421714b6aad" },
1311     { 3072, "693cd5033d7f5391d3c958519fa9e934" },
1312     { 4048, "139dca91bcff65b3c40771749052906b" },
1313     { 6144, "428d9cef6df4fb70a6e9b6bbe4819e55" },
1314     { 6400, "9c0b909e76daa811e12b1fc17000a0c4" },
1315     { 6528, "ad876f6297186a7be1f1b907ed860eda" },
1316     { 8192, "479cbbaca37dd3191ea1f3e8134a0ef4" },
1317     {16384, "60fda559c74f91df538100c9842f2f15" },
1318     {18432, "4a3eb1cba1fa45f3981270953f720c42" },
1319     { 0, NULL },
1320 };
1321
1322
1323 /* CryptoKey   = 0x01234567, 0x89abcdef,
1324  *               0x01234567, 0x89abcdef,
1325  *               0x01234567, 0x89abcdef;
1326  * IV          = 0x12345678, 0x90abcdef
1327  * MacKey      = 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1328  *               0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
1329  *               0x11, 0x12, 0x13, 0x14
1330  * InputHexStr = "31323334353637383930" (ASCII = "1234567890")
1331  * Note: only sizes aligned to AES block size (16 bytes) allowed
1332  */
1333 static MV_CESA_SIZE_TEST     cbcAes128sha1multiSizeTest507[] =
1334 {
1335     {   16, "9aa8dc1c45f0946daf78057fa978759c625c1fee" },
1336     {   64, "9f588fc1ede851e5f8b20256abc9979465ae2189" },
1337     {   80, "13558472d1fc1c90dffec6e5136c7203452d509b" },
1338     {  352, "6b93518e006cfaa1f7adb24615e7291fb0a27e06" },
1339     {  512, "096874951a77fbbf333e49d80c096ee2016e09bd" },
1340     { 1008, "696fc203c2e4b5ae0ec5d1db3f623c490bc6dbac" },
1341     { 1344, "79bf77509935ccd3528caaac6a5eb6481f74029b" },
1342     { 1408, "627f9462b95fc188e8cfa7eec15119bdc5d4fcf1" },
1343     { 2048, "3d50d0c005feba92fe41502d609fced9c882b4d1" },
1344     { 3072, "758807e5b983e3a91c06fb218fe0f73f77111e94" },
1345     { 4048, "ca90e85242e33f005da3504416a52098d0d31fb2" },
1346     { 6144, "8044c1d4fd06642dfc46990b4f18b61ef1e972cf" },
1347     { 6400, "166f1f4ea57409f04feba9fb1e39af0e00bd6f43" },
1348     { 6528, "0389016a39485d6e330f8b4215ddf718b404f7e9" },
1349     { 8192, "6df7ee2a8b61d6f7f860ce8dbf778f0c2a5b508b" },
1350     {16384, "a70a6d8dfa1f91ded621c3dbaed34162bc48783f" },
1351     {18432, "8dfad627922ce15df1eed10bdbed49244efa57db" },
1352     { 0, NULL },
1353 };
1354
1355
1356 void    cesaTestPrintStatus(void);
1357
1358
1359 /*------------------------- LOCAL FUNCTIONs ---------------------------------*/
1360 MV_STATUS testCmd(int sid, int iter, MV_CESA_COMMAND* pCmd,
1361                   MV_CESA_TEST_SESSION* pTestSession, MV_U8* pIV, int ivSize);
1362 MV_STATUS testClose(int idx);
1363 MV_STATUS testOpen(int idx);
1364 void close_session(int sid);
1365 void cesaTestCheckReady(const MV_CESA_RESULT *r);
1366 void cesaCheckReady(MV_CESA_RESULT* r);
1367 void printTestResults(int idx, MV_STATUS status, int checkMode);
1368 void cesaLastResult(void);
1369 void cesaTestPrintReq(int req, int offset, int size);
1370
1371 void cesaTestPrintStatus(void);
1372 void cesaTestPrintSession(int idx);
1373 void sizeTest(int testIdx, int iter, int checkMode);
1374 void multiTest(int iter, int reqSize, int checkMode);
1375 void oneTest(int testIdx, int caseIdx,int iter, int reqSize, int checkMode);
1376 void multiSizeTest(int idx, int iter, int checkMode, char* inputData);
1377 void cesaTest(int iter, int reqSize, int checkMode);
1378 void cesaOneTest(int testIdx, int caseIdx,int iter, int reqSize, int checkMode);
1379 void combiTest(int iter, int reqSize, int checkMode);
1380 void shaTest(int iter, int reqSize, int checkMode);
1381 void mdTest(int iter, int reqSize, int checkMode);
1382 void aesTest(int iter, int reqSize, int checkMode);
1383 void tripleDesTest(int iter, int reqSize, int checkMode);
1384 void desTest(int iter, int reqSize, int checkMode);
1385 void cesaTestStop(void);
1386 MV_STATUS testRun(int idx, int caseIdx, int iter,int reqSize, int checkMode);
1387 void cesaTestStart(int bufNum, int bufSize);
1388
1389
1390 static MV_U32      getRate(MV_U32* remainder)
1391 {
1392     MV_U32     kBits, milliSec, rate;
1393
1394     milliSec = 0;
1395     if( (cesaEndTicks - cesaBeginTicks) > 0)
1396     {
1397         milliSec = CESA_TEST_TICK_TO_MS(cesaEndTicks - cesaBeginTicks);
1398     }
1399     if(milliSec == 0)
1400     {
1401         if(remainder != NULL)
1402             *remainder = 0;
1403         return 0;
1404     }
1405
1406     kBits = (cesaIteration*cesaRateSize*8)/1000;
1407     rate = kBits/milliSec;
1408     if(remainder != NULL)
1409         *remainder = ((kBits % milliSec)*10)/milliSec;
1410
1411     return rate;
1412 }
1413
1414 static char*    extractMbuf(MV_CESA_MBUF *pMbuf,
1415                             int offset, int size, char* hexStr)
1416 {
1417     mvCesaCopyFromMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset, size);
1418     mvBinToHex((const MV_U8*)cesaBinBuffer, hexStr, size);
1419
1420     return hexStr;
1421 }
1422
1423 static MV_BOOL  cesaCheckMbuf(MV_CESA_MBUF *pMbuf,
1424                           const char* hexString, int offset,
1425                           int checkSize)
1426 {
1427     MV_BOOL     isFailed = MV_FALSE;
1428     MV_STATUS   status;
1429     int         size = strlen(hexString)/2;
1430     int         checkedSize = 0;
1431 /*
1432     mvOsPrintf("cesaCheckMbuf: pMbuf=%p, offset=%d, checkSize=%d, mBufSize=%d\n",
1433                 pMbuf, offset, checkSize, pMbuf->mbufSize);
1434 */
1435     if(pMbuf->mbufSize < (checkSize + offset))
1436     {
1437         mvOsPrintf("checkSize (%d) is too large: offset=%d, mbufSize=%d\n",
1438                     checkSize, offset, pMbuf->mbufSize);
1439         return MV_TRUE;
1440     }
1441     status = mvCesaCopyFromMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset, checkSize);
1442     if(status != MV_OK)
1443     {
1444         mvOsPrintf("CesaTest: Can't copy %d bytes from Mbuf=%p to checkBuf=%p\n",
1445                     checkSize, pMbuf, cesaBinBuffer);
1446         return MV_TRUE;
1447     }
1448 /*
1449     mvDebugMemDump(cesaBinBuffer, size, 1);
1450 */
1451     mvHexToBin(hexString, (MV_U8*)cesaExpBinBuffer, size);
1452
1453     /* Compare buffers */
1454     while(checkSize > checkedSize)
1455     {
1456         size = MV_MIN(size, (checkSize - checkedSize));
1457         if(memcmp(cesaExpBinBuffer, &cesaBinBuffer[checkedSize], size) != 0)
1458         {
1459             mvOsPrintf("CheckMbuf failed: checkSize=%d, size=%d, checkedSize=%d\n",
1460                         checkSize, size, checkedSize);
1461             mvDebugMemDump(&cesaBinBuffer[checkedSize], size, 1);
1462             mvDebugMemDump(cesaExpBinBuffer, size, 1);
1463
1464             isFailed = MV_TRUE;
1465             break;
1466         }
1467         checkedSize += size;
1468     }
1469
1470     return isFailed;
1471 }
1472
1473 static MV_STATUS    cesaSetMbuf(MV_CESA_MBUF *pMbuf,
1474                         const char* hexString,
1475                         int offset, int reqSize)
1476 {
1477     MV_STATUS   status = MV_OK;
1478     int         copySize, size = strlen(hexString)/2;
1479
1480     mvHexToBin(hexString, (MV_U8*)cesaBinBuffer, size);
1481
1482     copySize = 0;
1483     while(reqSize > copySize)
1484     {
1485         size = MV_MIN(size, (reqSize - copySize));
1486
1487         status = mvCesaCopyToMbuf((MV_U8*)cesaBinBuffer, pMbuf, offset+copySize, size);
1488         if(status != MV_OK)
1489         {
1490             mvOsPrintf("cesaSetMbuf Error: Copy %d of %d bytes to MBuf\n",
1491                         copySize, reqSize);
1492             break;
1493         }
1494         copySize += size;
1495     }
1496     pMbuf->mbufSize = offset+copySize;
1497     return status;
1498 }
1499
1500 static  MV_CESA_TEST_SESSION* getTestSessionDb(int idx, int* pTestIdx)
1501 {
1502     int                 testIdx, dbIdx = idx/100;
1503
1504     if(dbIdx > MAX_TEST_TYPE)
1505     {
1506         mvOsPrintf("Wrong index %d - No such test type\n", idx);
1507         return NULL;
1508     }
1509     testIdx = idx % 100;
1510
1511     if(testIdx >= cesaTestsDB[dbIdx].numSessions)
1512     {
1513         mvOsPrintf("Wrong index %d - No such test\n", idx);
1514         return NULL;
1515     }
1516     if(pTestIdx != NULL)
1517         *pTestIdx = testIdx;
1518
1519     return  cesaTestsDB[dbIdx].pSessions;
1520 }
1521
1522 /* Debug */
1523 void    cesaTestPrintReq(int req, int offset, int size)
1524 {
1525     MV_CESA_MBUF*   pMbuf;
1526
1527     mvOsPrintf("cesaTestPrintReq: req=%d, offset=%d, size=%d\n", 
1528                 req, offset, size);
1529     mvDebugMemDump(cesaCmdRing, 128, 4);
1530
1531     pMbuf = cesaCmdRing[req].pSrc;
1532     mvCesaDebugMbuf("src", pMbuf, offset,size);
1533     pMbuf = cesaCmdRing[req].pDst;
1534     mvCesaDebugMbuf("dst", pMbuf, offset, size);
1535
1536     cesaTestPrintStatus();
1537 }
1538
1539 void    cesaLastResult(void)
1540 {
1541         mvOsPrintf("Last Result: ReqId = %d, SessionId = %d, rc = (%d)\n",
1542                 (MV_U32)cesaResult.pReqPrv, cesaResult.sessionId,
1543                 cesaResult.retCode);
1544 }
1545
1546 void    printTestResults(int idx, MV_STATUS status, int checkMode)
1547 {
1548     int                     testIdx;
1549     MV_CESA_TEST_SESSION*   pTestSessions = getTestSessionDb(idx, &testIdx);
1550
1551     if(pTestSessions == NULL)
1552         return;
1553
1554     mvOsPrintf("%-35s %4dx%-4d : ", pTestSessions[testIdx].name,
1555             cesaIteration, cesaReqSize);
1556     if( (status == MV_OK)      &&
1557         (cesaCryptoError == 0) &&
1558         (cesaError == 0)       &&
1559         (cesaReqIdError == 0) )
1560     {
1561         mvOsPrintf("Passed, Rate=%3u.%u Mbps (%5u cpp)\n", 
1562                      cesaRate, cesaRateAfterDot, cesaEndTicks - cesaBeginTicks);
1563     }
1564     else
1565     {
1566         mvOsPrintf("Failed, Status = 0x%x\n", status);
1567         if(cesaCryptoError > 0)
1568             mvOsPrintf("cryptoError : %d\n", cesaCryptoError);
1569         if(cesaReqIdError > 0)
1570             mvOsPrintf("reqIdError  : %d\n", cesaReqIdError);
1571         if(cesaError > 0)
1572             mvOsPrintf("cesaError  : %d\n", cesaError);
1573     }
1574     if(cesaTestIsrMissCount > 0)
1575         mvOsPrintf("cesaIsrMissed  : %d\n", cesaTestIsrMissCount);
1576 }
1577
1578 void cesaCheckReady(MV_CESA_RESULT* r)
1579 {
1580     int             reqId;
1581     MV_CESA_MBUF    *pMbuf;
1582     MV_BOOL         isFailed;
1583
1584     cesaResult  =  *r;
1585     reqId = (int)cesaResult.pReqPrv;
1586     pMbuf = cesaCmdRing[reqId].pDst;
1587
1588 /*
1589     mvOsPrintf("cesaCheckReady: reqId=%d, checkOffset=%d, checkSize=%d\n",
1590                     reqId, cesaCheckOffset, cesaCheckSize);
1591 */
1592     /* Check expected reqId */
1593     if(reqId != cesaExpReqId)
1594     {
1595         cesaReqIdError++;
1596 /*
1597         mvOsPrintf("CESA reqId Error: cbIter=%d (%d), reqId=%d, expReqId=%d\n",
1598                     cesaCbIter, cesaIteration, reqId, cesaExpReqId);
1599 */
1600     }
1601     else
1602     {
1603         if( (cesaCheckMode == CESA_FULL_CHECK_MODE) ||
1604             (cesaCheckMode == CESA_FAST_CHECK_MODE) )
1605         {
1606             if(cesaResult.retCode != MV_OK)
1607             {
1608                 cesaError++;
1609
1610                 mvOsPrintf("CESA Error: cbIter=%d (%d), reqId=%d, rc=%d\n",
1611                             cesaCbIter, cesaIteration, reqId, cesaResult.retCode);
1612             }
1613             else
1614             {
1615                 if( (cesaCheckSize > 0) && (cesaOutputHexStr != NULL) )
1616                 {
1617                     /* Check expected output */
1618
1619                     isFailed = cesaCheckMbuf(pMbuf, cesaOutputHexStr, cesaCheckOffset, cesaCheckSize);
1620                     if(isFailed)
1621                     {
1622                         mvOsPrintf("CESA Crypto Error: cbIter=%d (%d), reqId=%d\n",
1623                                     cesaCbIter, cesaIteration, reqId);
1624
1625                         CESA_TEST_DEBUG_PRINT(("Error: reqId=%d, reqSize=%d, checkOffset=%d, checkSize=%d\n",
1626                                     reqId, cesaReqSize, cesaCheckOffset, cesaCheckSize));
1627
1628                         CESA_TEST_DEBUG_PRINT(("Output str: %s\n", cesaOutputHexStr));
1629
1630                         CESA_TEST_DEBUG_CODE( mvCesaDebugMbuf("error", pMbuf, 0, cesaCheckOffset+cesaCheckSize) );
1631
1632                         cesaCryptoError++;
1633                     }
1634                 }
1635             }
1636         }
1637     }
1638     if(cesaCheckMode == CESA_SHOW_CHECK_MODE)
1639     {
1640         extractMbuf(pMbuf, cesaCheckOffset, cesaCheckSize, cesaHexBuffer);
1641         mvOsPrintf("%4d, %s\n", cesaCheckOffset, cesaHexBuffer);
1642     }
1643
1644     cesaCbIter++;
1645     if(cesaCbIter >= cesaIteration)
1646     {
1647         cesaCbIter = 0;
1648         cesaExpReqId = 0;
1649         cesaIsReady = MV_TRUE;
1650
1651         cesaEndTicks = CESA_TEST_TICK_GET();
1652         cesaRate = getRate(&cesaRateAfterDot);
1653     }
1654     else
1655     {
1656         cesaExpReqId = reqId + 1;
1657         if(cesaExpReqId == CESA_DEF_REQ_SIZE)
1658             cesaExpReqId = 0;
1659     }
1660 }
1661
1662
1663 #ifdef MV_NETBSD
1664 static int cesaTestReadyIsr(void *arg)
1665 #else
1666 #ifdef __KERNEL__
1667 static irqreturn_t cesaTestReadyIsr( int irq , void *dev_id)
1668 #endif
1669 #ifdef MV_VXWORKS
1670 void   cesaTestReadyIsr(void)
1671 #endif
1672 #endif
1673 {
1674     MV_U32          cause;
1675     MV_STATUS       status;
1676     MV_CESA_RESULT  result;
1677
1678     cesaTestIsrCount++;
1679     /* Clear cause register */
1680     cause = MV_REG_READ(MV_CESA_ISR_CAUSE_REG);
1681     if( (cause & MV_CESA_CAUSE_ACC_DMA_ALL_MASK) == 0)
1682     {
1683         mvOsPrintf("cesaTestReadyIsr: cause=0x%x\n", cause);
1684 #ifdef MV_NETBSD
1685         return 0;
1686 #else
1687 #ifdef __KERNEL__
1688         return 1;
1689 #else
1690         return;
1691 #endif
1692 #endif
1693     }
1694
1695     MV_REG_WRITE(MV_CESA_ISR_CAUSE_REG, 0);
1696
1697     while(MV_TRUE)
1698     {
1699         /* Get Ready requests */
1700         status = mvCesaReadyGet(&result);
1701         if(status == MV_OK)
1702             cesaCheckReady(&result);
1703
1704         break;
1705     }
1706     if( (cesaTestFull == 1) && (status != MV_BUSY) )
1707     {
1708         cesaTestFull = 0;
1709         CESA_TEST_WAKE_UP();
1710     }
1711
1712 #ifdef __KERNEL__
1713     return 1;
1714 #endif
1715 }
1716
1717 void
1718 cesaTestCheckReady(const MV_CESA_RESULT *r)
1719 {
1720         MV_CESA_RESULT result = *r;
1721
1722         cesaCheckReady(&result);
1723
1724         if (cesaTestFull == 1) {
1725                 cesaTestFull = 0;
1726                 CESA_TEST_WAKE_UP();
1727         }
1728 }
1729
1730 static INLINE int   open_session(MV_CESA_OPEN_SESSION* pOs)
1731 {
1732     MV_U16      sid;
1733     MV_STATUS   status;
1734
1735     status = mvCesaSessionOpen(pOs, (short*)&sid);
1736     if(status != MV_OK)
1737     {
1738         mvOsPrintf("CesaTest: Can't open new session - status = 0x%x\n",
1739                     status);
1740         return -1;
1741     }
1742
1743     return  (int)sid;
1744 }
1745
1746 void close_session(int sid)
1747 {
1748     MV_STATUS   status;
1749
1750     status = mvCesaSessionClose(sid);
1751     if(status != MV_OK)
1752     {
1753         mvOsPrintf("CesaTest: Can't close session %d - status = 0x%x\n",
1754                     sid, status);
1755     }
1756 }
1757
1758 MV_STATUS testOpen(int idx)
1759 {
1760     MV_CESA_OPEN_SESSION    os;
1761     int                     sid, i, testIdx;
1762     MV_CESA_TEST_SESSION*   pTestSession;
1763     MV_U16          digestSize = 0;
1764
1765     pTestSession = getTestSessionDb(idx, &testIdx);
1766     if(pTestSession == NULL)
1767     {
1768         mvOsPrintf("Test %d is not exist\n", idx);
1769         return MV_BAD_PARAM;
1770     }
1771     pTestSession = &pTestSession[testIdx];
1772
1773     if(pTestSession->sid != -1)
1774     {
1775         mvOsPrintf("Session for test %d already created: sid=%d\n",
1776                     idx, pTestSession->sid);
1777         return MV_OK;
1778     }
1779
1780     os.cryptoAlgorithm = pTestSession->cryptoAlgorithm;
1781     os.macMode = pTestSession->macAlgorithm;
1782     switch(os.macMode)
1783     {
1784         case MV_CESA_MAC_MD5:
1785         case MV_CESA_MAC_HMAC_MD5:
1786             digestSize = MV_CESA_MD5_DIGEST_SIZE;
1787             break;
1788
1789         case MV_CESA_MAC_SHA1:
1790         case MV_CESA_MAC_HMAC_SHA1:
1791             digestSize = MV_CESA_SHA1_DIGEST_SIZE;
1792             break;
1793
1794         case MV_CESA_MAC_NULL:
1795             digestSize = 0;
1796     }
1797     os.cryptoMode = pTestSession->cryptoMode;
1798     os.direction = pTestSession->direction;
1799     os.operation = pTestSession->operation;
1800
1801     for(i=0; i<pTestSession->cryptoKeySize; i++)
1802         os.cryptoKey[i] = pTestSession->pCryptoKey[i];
1803
1804     os.cryptoKeyLength = pTestSession->cryptoKeySize;
1805
1806     for(i=0; i<pTestSession->macKeySize; i++)
1807         os.macKey[i] = pTestSession->pMacKey[i];
1808
1809     os.macKeyLength = pTestSession->macKeySize;
1810     os.digestSize = digestSize;
1811
1812     sid = open_session(&os);
1813     if(sid == -1)
1814     {
1815         mvOsPrintf("Can't open session for test %d: rc=0x%x\n",
1816                     idx, cesaResult.retCode);
1817         return cesaResult.retCode;
1818     }
1819     CESA_TEST_DEBUG_PRINT(("Opened session: sid = %d\n", sid));
1820     pTestSession->sid = sid;
1821     return MV_OK;
1822 }
1823
1824 MV_STATUS   testClose(int idx)
1825 {
1826     int                     testIdx;
1827     MV_CESA_TEST_SESSION*   pTestSession;
1828
1829     pTestSession = getTestSessionDb(idx, &testIdx);
1830     if(pTestSession == NULL)
1831     {
1832         mvOsPrintf("Test %d is not exist\n", idx);
1833         return MV_BAD_PARAM;
1834     }
1835     pTestSession = &pTestSession[testIdx];
1836
1837     if(pTestSession->sid == -1)
1838     {
1839         mvOsPrintf("Test session %d is not opened\n", idx);
1840         return MV_NO_SUCH;
1841     }
1842
1843     close_session(pTestSession->sid);
1844     pTestSession->sid = -1;
1845
1846     return MV_OK;
1847 }
1848
1849 MV_STATUS testCmd(int sid, int iter, MV_CESA_COMMAND* pCmd,
1850              MV_CESA_TEST_SESSION* pTestSession, MV_U8* pIV, int ivSize)
1851 {
1852     int                 cmdReqId = 0;
1853     int                 i;
1854     MV_STATUS           rc = MV_OK;
1855     char                ivZeroHex[] = "0000";
1856
1857     if(iter == 0)
1858         iter = CESA_DEF_ITER_NUM;
1859
1860     if(pCmd == NULL)
1861     {
1862         mvOsPrintf("testCmd failed: pCmd=NULL\n");
1863         return MV_BAD_PARAM;
1864     }
1865     pCmd->sessionId = sid;
1866
1867     cesaCryptoError = 0;
1868     cesaReqIdError = 0;
1869     cesaError = 0;
1870     cesaTestIsrMissCount = 0;
1871     cesaIsReady = MV_FALSE;
1872     cesaIteration = iter;
1873
1874     if(cesaInputHexStr == NULL)
1875         cesaInputHexStr = cesaPlainHexEbc;
1876
1877     for(i=0; i<CESA_DEF_REQ_SIZE; i++)
1878     {
1879         pCmd->pSrc = (MV_CESA_MBUF*)(cesaCmdRing[i].pSrc);
1880         if(pIV != NULL)
1881         {
1882             /* If IV from SA - set IV in Source buffer to zeros */
1883             cesaSetMbuf(pCmd->pSrc, ivZeroHex, 0, pCmd->cryptoOffset);
1884             cesaSetMbuf(pCmd->pSrc, cesaInputHexStr, pCmd->cryptoOffset,
1885                         (cesaReqSize - pCmd->cryptoOffset));
1886         }
1887         else
1888         {
1889             cesaSetMbuf(pCmd->pSrc, cesaInputHexStr, 0, cesaReqSize);
1890         }
1891         pCmd->pDst = (MV_CESA_MBUF*)(cesaCmdRing[i].pDst);
1892         cesaSetMbuf(pCmd->pDst, cesaNullPlainHexText, 0, cesaReqSize);
1893
1894         memcpy(&cesaCmdRing[i], pCmd, sizeof(*pCmd));
1895     }
1896
1897     if(cesaCheckMode == CESA_SW_SHOW_CHECK_MODE)
1898     {
1899         MV_U8   pDigest[MV_CESA_MAX_DIGEST_SIZE];
1900
1901         if(pTestSession->macAlgorithm == MV_CESA_MAC_MD5)
1902         {
1903             mvMD5(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, pDigest);
1904             mvOsPrintf("SW HASH_MD5: reqSize=%d, macLength=%d\n",
1905                         cesaReqSize, pCmd->macLength);
1906             mvDebugMemDump(pDigest, MV_CESA_MD5_DIGEST_SIZE, 1);
1907             return MV_OK;
1908         }
1909         if(pTestSession->macAlgorithm == MV_CESA_MAC_SHA1)
1910         {
1911             mvSHA1(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, pDigest);
1912             mvOsPrintf("SW HASH_SHA1: reqSize=%d, macLength=%d\n",
1913                         cesaReqSize, pCmd->macLength);
1914             mvDebugMemDump(pDigest, MV_CESA_SHA1_DIGEST_SIZE, 1);
1915             return MV_OK;
1916         }
1917     }
1918
1919     cesaBeginTicks = CESA_TEST_TICK_GET();
1920     CESA_TEST_DEBUG_CODE( memset(cesaTestTrace, 0, sizeof(cesaTestTrace));
1921                      cesaTestTraceIdx = 0;
1922     );
1923
1924     if(cesaCheckMode == CESA_SW_NULL_CHECK_MODE)
1925     {
1926         volatile MV_U8   pDigest[MV_CESA_MAX_DIGEST_SIZE];
1927
1928         for(i=0; i<iter; i++)
1929         {
1930             if(pTestSession->macAlgorithm == MV_CESA_MAC_MD5)
1931             {
1932                 mvMD5(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, (unsigned char*)pDigest);
1933             }
1934             if(pTestSession->macAlgorithm == MV_CESA_MAC_SHA1)
1935             {
1936                 mvSHA1(pCmd->pSrc->pFrags[0].bufVirtPtr, pCmd->macLength, (MV_U8 *)pDigest);
1937             }
1938         }
1939         cesaEndTicks = CESA_TEST_TICK_GET();
1940         cesaRate = getRate(&cesaRateAfterDot);
1941         cesaIsReady = MV_TRUE;
1942
1943         return MV_OK;
1944     }
1945
1946     /*cesaTestIsrCount = 0;*/
1947     /*mvCesaDebugStatsClear();*/
1948
1949 #ifndef MV_NETBSD
1950     MV_REG_WRITE(MV_CESA_ISR_CAUSE_REG, 0);
1951 #endif
1952
1953     for(i=0; i<iter; i++)
1954     {
1955         unsigned long flags;
1956
1957         pCmd = &cesaCmdRing[cmdReqId];
1958         pCmd->pReqPrv = (void*)cmdReqId;
1959
1960         CESA_TEST_LOCK(flags);
1961
1962         rc = mvCesaAction(pCmd);
1963         if(rc == MV_NO_RESOURCE)
1964             cesaTestFull = 1;
1965
1966         CESA_TEST_UNLOCK(flags);
1967
1968         if(rc == MV_NO_RESOURCE)
1969         {
1970             CESA_TEST_LOCK(flags);
1971             CESA_TEST_WAIT( (cesaTestFull == 0), 100);
1972             CESA_TEST_UNLOCK(flags);
1973             if(cesaTestFull == 1)
1974             {
1975                 mvOsPrintf("CESA Test timeout: i=%d, iter=%d, cesaTestFull=%d\n",
1976                             i, iter, cesaTestFull);
1977                 cesaTestFull = 0;
1978                 return MV_TIMEOUT;
1979             }
1980
1981             CESA_TEST_LOCK(flags);
1982
1983             rc = mvCesaAction(pCmd);
1984
1985             CESA_TEST_UNLOCK(flags);
1986         }
1987         if( (rc != MV_OK) && (rc != MV_NO_MORE) )
1988         {
1989             mvOsPrintf("mvCesaAction failed: rc=%d\n", rc);
1990             return rc;
1991         }
1992
1993         cmdReqId++;
1994         if(cmdReqId >= CESA_DEF_REQ_SIZE)
1995             cmdReqId = 0;
1996
1997 #ifdef MV_LINUX
1998         /* Reschedule each 16 requests */
1999         if( (i & 0xF) == 0)
2000             schedule();
2001 #endif
2002     }
2003     return MV_OK;
2004 }
2005
2006 void    cesaTestStart(int bufNum, int bufSize)
2007 {
2008     int             i, j, idx;
2009     MV_CESA_MBUF    *pMbufSrc, *pMbufDst;
2010     MV_BUF_INFO     *pFragsSrc, *pFragsDst;
2011     char            *pBuf;
2012 #ifndef MV_NETBSD
2013     int             numOfSessions, queueDepth;
2014     char            *pSram;
2015     MV_STATUS       status;
2016     MV_CPU_DEC_WIN  addrDecWin;
2017 #endif
2018
2019     cesaCmdRing = mvOsMalloc(sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE);
2020     if(cesaCmdRing == NULL)
2021     {
2022         mvOsPrintf("testStart: Can't allocate %ld bytes of memory\n",
2023                 sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE);
2024         return;
2025     }
2026     memset(cesaCmdRing, 0, sizeof(MV_CESA_COMMAND) * CESA_DEF_REQ_SIZE);
2027
2028     if(bufNum == 0)
2029         bufNum = CESA_DEF_BUF_NUM;
2030
2031     if(bufSize == 0)
2032         bufSize = CESA_DEF_BUF_SIZE;
2033
2034     cesaBufNum = bufNum;
2035     cesaBufSize = bufSize;
2036     mvOsPrintf("CESA test started: bufNum = %d, bufSize = %d\n",
2037                 bufNum, bufSize);
2038
2039     cesaHexBuffer = mvOsMalloc(2*bufNum*bufSize);
2040     if(cesaHexBuffer == NULL)
2041     {
2042         mvOsPrintf("testStart: Can't malloc %d bytes for cesaHexBuffer.\n",
2043                     2*bufNum*bufSize);
2044         return;
2045     }
2046     memset(cesaHexBuffer, 0, (2*bufNum*bufSize));
2047
2048     cesaBinBuffer = mvOsMalloc(bufNum*bufSize);
2049     if(cesaBinBuffer == NULL)
2050     {
2051         mvOsPrintf("testStart: Can't malloc %d bytes for cesaBinBuffer\n",
2052                     bufNum*bufSize);
2053         return;
2054     }
2055     memset(cesaBinBuffer, 0, (bufNum*bufSize));
2056
2057     cesaExpBinBuffer = mvOsMalloc(bufNum*bufSize);
2058     if(cesaExpBinBuffer == NULL)
2059     {
2060         mvOsPrintf("testStart: Can't malloc %d bytes for cesaExpBinBuffer\n",
2061                     bufNum*bufSize);
2062         return;
2063     }
2064     memset(cesaExpBinBuffer, 0, (bufNum*bufSize));
2065
2066     CESA_TEST_WAIT_INIT();
2067
2068     pMbufSrc = mvOsMalloc(sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE);
2069     pFragsSrc = mvOsMalloc(sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE);
2070
2071     pMbufDst = mvOsMalloc(sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE);
2072     pFragsDst = mvOsMalloc(sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE);
2073
2074     if( (pMbufSrc == NULL) || (pFragsSrc == NULL) ||
2075         (pMbufDst == NULL) || (pFragsDst == NULL) )
2076     {
2077         mvOsPrintf("testStart: Can't malloc Src and Dst pMbuf and pFrags structures.\n");
2078         /* !!!! Dima cesaTestCleanup();*/
2079         return;
2080     }
2081
2082     memset(pMbufSrc, 0, sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE);
2083     memset(pFragsSrc, 0, sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE);
2084
2085     memset(pMbufDst, 0, sizeof(MV_CESA_MBUF) * CESA_DEF_REQ_SIZE);
2086     memset(pFragsDst, 0, sizeof(MV_BUF_INFO) * bufNum * CESA_DEF_REQ_SIZE);
2087
2088     mvOsPrintf("Cesa Test Start: pMbufSrc=%p, pFragsSrc=%p, pMbufDst=%p, pFragsDst=%p\n",
2089                 pMbufSrc, pFragsSrc, pMbufDst, pFragsDst);
2090
2091     idx = 0;
2092     for(i=0; i<CESA_DEF_REQ_SIZE; i++)
2093     {
2094         pBuf = mvOsIoCachedMalloc(cesaTestOSHandle,bufSize * bufNum * 2,
2095                                   &cesaReqBufs[i].bufPhysAddr,
2096                                   &cesaReqBufs[i].memHandle);
2097                 if(pBuf == NULL)
2098         {
2099                 mvOsPrintf("testStart: Can't malloc %d bytes for pBuf\n",
2100                     bufSize * bufNum * 2);
2101                 return;
2102         }
2103
2104         memset(pBuf, 0, bufSize * bufNum * 2);
2105         mvOsCacheFlush(cesaTestOSHandle,pBuf, bufSize * bufNum * 2);
2106         if(pBuf == NULL)
2107         {
2108             mvOsPrintf("cesaTestStart: Can't allocate %d bytes for req_%d buffers\n",
2109                         bufSize * bufNum * 2, i);
2110             return;
2111         }
2112
2113         cesaReqBufs[i].bufVirtPtr = (MV_U8*)pBuf;
2114         cesaReqBufs[i].bufSize =  bufSize * bufNum * 2;
2115
2116         cesaCmdRing[i].pSrc = &pMbufSrc[i];
2117         cesaCmdRing[i].pSrc->pFrags = &pFragsSrc[idx];
2118         cesaCmdRing[i].pSrc->numFrags = bufNum;
2119         cesaCmdRing[i].pSrc->mbufSize = 0;
2120
2121         cesaCmdRing[i].pDst = &pMbufDst[i];
2122         cesaCmdRing[i].pDst->pFrags = &pFragsDst[idx];
2123         cesaCmdRing[i].pDst->numFrags = bufNum;
2124         cesaCmdRing[i].pDst->mbufSize = 0;
2125
2126         for(j=0; j<bufNum; j++)
2127         {
2128             cesaCmdRing[i].pSrc->pFrags[j].bufVirtPtr = (MV_U8*)pBuf;
2129             cesaCmdRing[i].pSrc->pFrags[j].bufSize = bufSize;
2130             pBuf += bufSize;
2131             cesaCmdRing[i].pDst->pFrags[j].bufVirtPtr = (MV_U8*)pBuf;
2132             cesaCmdRing[i].pDst->pFrags[j].bufSize = bufSize;
2133             pBuf += bufSize;
2134         }
2135         idx += bufNum;
2136     }
2137
2138 #ifndef MV_NETBSD
2139     if (mvCpuIfTargetWinGet(CRYPT_ENG, &addrDecWin) == MV_OK)
2140         pSram = (char*)addrDecWin.addrWin.baseLow;
2141     else
2142     {
2143         mvOsPrintf("mvCesaInit: ERR. mvCpuIfTargetWinGet failed\n");
2144         return;
2145     }
2146
2147 #ifdef MV_CESA_NO_SRAM
2148     pSram = mvOsMalloc(4*1024+8);
2149     if(pSram == NULL)
2150     {
2151         mvOsPrintf("CesaTest: can't allocate %d bytes for SRAM simulation\n",
2152                 4*1024+8);
2153         /* !!!! Dima cesaTestCleanup();*/
2154         return;
2155     }
2156     pSram = (MV_U8*)MV_ALIGN_UP((MV_U32)pSram, 8);
2157 #endif /* MV_CESA_NO_SRAM */
2158
2159     numOfSessions = CESA_DEF_SESSION_NUM;
2160     queueDepth = CESA_DEF_REQ_SIZE - MV_CESA_MAX_CHAN;
2161
2162     status = mvCesaInit(numOfSessions, queueDepth, pSram, NULL);
2163     if(status != MV_OK)
2164     {
2165         mvOsPrintf("mvCesaInit is Failed: status = 0x%x\n", status);
2166         /* !!!! Dima cesaTestCleanup();*/
2167         return;
2168     }
2169 #endif /* !MV_NETBSD */
2170
2171     /* Prepare data for tests */
2172     for(i=0; i<50; i++)
2173         strcat((char*)cesaDataHexStr3, "dd");
2174
2175     strcpy((char*)cesaDataAndMd5digest3,  cesaDataHexStr3);
2176     strcpy((char*)cesaDataAndSha1digest3, cesaDataHexStr3);
2177
2178     /* Digest must be 8 byte aligned */
2179     for(; i<56; i++)
2180     {
2181         strcat((char*)cesaDataAndMd5digest3, "00");
2182         strcat((char*)cesaDataAndSha1digest3, "00");
2183     }
2184     strcat((char*)cesaDataAndMd5digest3,  cesaHmacMd5digestHex3);
2185     strcat((char*)cesaDataAndSha1digest3, cesaHmacSha1digestHex3);
2186
2187 #ifndef MV_NETBSD
2188     MV_REG_WRITE( MV_CESA_ISR_CAUSE_REG, 0);
2189     MV_REG_WRITE( MV_CESA_ISR_MASK_REG, MV_CESA_CAUSE_ACC_DMA_MASK);
2190 #endif
2191
2192 #ifdef MV_VXWORKS
2193     {
2194         MV_STATUS       status;
2195
2196         status = intConnect((VOIDFUNCPTR *)INT_LVL_CESA, cesaTestReadyIsr, (int)NULL);
2197         if (status != OK)
2198         {
2199             mvOsPrintf("CESA: Can't connect CESA (%d) interrupt, status=0x%x \n",
2200                         INT_LVL_CESA, status);
2201             /* !!!! Dima cesaTestCleanup();*/
2202             return;
2203         }
2204         cesaSemId = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
2205         if(cesaSemId == NULL)
2206         {
2207             mvOsPrintf("cesaTestStart: Can't create semaphore\n");
2208             return;
2209         }
2210         intEnable(INT_LVL_CESA);
2211     }
2212 #endif /* MV_VXWORKS */
2213
2214 #if !defined(MV_NETBSD) && defined(__KERNEL__)
2215         if( request_irq(CESA_IRQ, cesaTestReadyIsr, (SA_INTERRUPT) , "cesa_test", NULL ) ) 
2216         {
2217             mvOsPrintf( "cannot assign irq\n" );
2218             /* !!!! Dima cesaTestCleanup();*/
2219             return;
2220         }
2221         spin_lock_init( &cesaLock );
2222 #endif
2223 }
2224
2225 MV_STATUS   testRun(int idx, int caseIdx, int iter,
2226                     int reqSize, int checkMode)
2227 {
2228     int                     testIdx, count, sid, digestSize;
2229     int                     blockSize;
2230     MV_CESA_TEST_SESSION*   pTestSession;
2231     MV_CESA_COMMAND         cmd;
2232     MV_STATUS               status;
2233
2234     memset(&cmd, 0, sizeof(cmd));
2235
2236     pTestSession = getTestSessionDb(idx, &testIdx);
2237     if(pTestSession == NULL)
2238     {
2239         mvOsPrintf("Test %d is not exist\n", idx);
2240         return MV_BAD_PARAM;
2241     }
2242     pTestSession = &pTestSession[testIdx];
2243
2244     sid = pTestSession->sid;
2245     if(sid == -1)
2246     {
2247         mvOsPrintf("Test %d is not opened\n", idx);
2248         return MV_BAD_STATE;
2249     }
2250     switch(pTestSession->cryptoAlgorithm)
2251     {
2252         case MV_CESA_CRYPTO_DES:
2253         case MV_CESA_CRYPTO_3DES:
2254             blockSize = MV_CESA_DES_BLOCK_SIZE;
2255             break;
2256
2257         case MV_CESA_CRYPTO_AES:
2258             blockSize = MV_CESA_AES_BLOCK_SIZE;
2259             break;
2260
2261         case MV_CESA_CRYPTO_NULL:
2262             blockSize = 0;
2263             break;
2264
2265         default:
2266             mvOsPrintf("cesaTestRun: Bad CryptoAlgorithm=%d\n",
2267                 pTestSession->cryptoAlgorithm);
2268         return MV_BAD_PARAM;
2269     }
2270     switch(pTestSession->macAlgorithm)
2271     {
2272         case MV_CESA_MAC_MD5:
2273         case MV_CESA_MAC_HMAC_MD5:
2274             digestSize = MV_CESA_MD5_DIGEST_SIZE;
2275             break;
2276
2277         case MV_CESA_MAC_SHA1:
2278         case MV_CESA_MAC_HMAC_SHA1:
2279             digestSize = MV_CESA_SHA1_DIGEST_SIZE;
2280             break;
2281         default:
2282             digestSize = 0;
2283     }
2284
2285     if(iter == 0)
2286         iter = CESA_DEF_ITER_NUM;
2287
2288     if(pTestSession->direction == MV_CESA_DIR_ENCODE)
2289     {
2290         cesaOutputHexStr = cesaTestCases[caseIdx].cipherHexStr;
2291         cesaInputHexStr = cesaTestCases[caseIdx].plainHexStr;
2292     }
2293     else
2294     {
2295         cesaOutputHexStr = cesaTestCases[caseIdx].plainHexStr;
2296         cesaInputHexStr = cesaTestCases[caseIdx].cipherHexStr;
2297     }
2298
2299     cmd.sessionId = sid;
2300     if(checkMode == CESA_FAST_CHECK_MODE)
2301     {
2302         cmd.cryptoLength = cesaTestCases[caseIdx].cryptoLength;
2303         cmd.macLength = cesaTestCases[caseIdx].macLength;
2304     }
2305     else
2306     {
2307         cmd.cryptoLength = reqSize;
2308         cmd.macLength = reqSize;
2309     }
2310     cesaRateSize = cmd.cryptoLength;
2311     cesaReqSize = cmd.cryptoLength;
2312     cmd.cryptoOffset = 0;
2313     if(pTestSession->operation != MV_CESA_MAC_ONLY)
2314     {
2315         if( (pTestSession->cryptoMode == MV_CESA_CRYPTO_CBC) ||
2316             (pTestSession->cryptoMode == MV_CESA_CRYPTO_CTR) )
2317         {
2318             cmd.ivOffset = 0;
2319             cmd.cryptoOffset = blockSize;
2320             if(cesaTestCases[caseIdx].pCryptoIV == NULL)
2321             {
2322                 cmd.ivFromUser = 1;
2323             }
2324             else
2325             {
2326                 cmd.ivFromUser = 0;
2327                 mvCesaCryptoIvSet(cesaTestCases[caseIdx].pCryptoIV, blockSize);
2328             }
2329             cesaReqSize = cmd.cryptoOffset + cmd.cryptoLength;
2330         }
2331     }
2332
2333 /*
2334     mvOsPrintf("ivFromUser=%d, cryptoLength=%d, cesaReqSize=%d, cryptoOffset=%d\n",
2335                 cmd.ivFromUser, cmd.cryptoLength, cesaReqSize, cmd.cryptoOffset);
2336 */
2337     if(pTestSession->operation != MV_CESA_CRYPTO_ONLY)
2338     {
2339         cmd.macOffset = cmd.cryptoOffset;
2340
2341         if(cesaTestCases[caseIdx].digestOffset == -1)
2342         {
2343             cmd.digestOffset = cmd.macOffset + cmd.macLength;
2344             cmd.digestOffset = MV_ALIGN_UP(cmd.digestOffset, 8);
2345         }
2346         else
2347         {
2348             cmd.digestOffset = cesaTestCases[caseIdx].digestOffset;
2349         }
2350         if( (cmd.digestOffset + digestSize) > cesaReqSize)
2351             cesaReqSize = cmd.digestOffset + digestSize;
2352     }
2353
2354     cesaCheckMode = checkMode;
2355
2356     if(checkMode == CESA_NULL_CHECK_MODE)
2357     {
2358         cesaCheckSize = 0;
2359         cesaCheckOffset = 0;
2360     }
2361     else
2362     {
2363         if(pTestSession->operation == MV_CESA_CRYPTO_ONLY)
2364         {
2365             cesaCheckOffset = 0;
2366             cesaCheckSize = cmd.cryptoLength;
2367         }
2368         else
2369         {
2370             cesaCheckSize = digestSize;
2371             cesaCheckOffset = cmd.digestOffset;
2372         }
2373     }
2374 /*
2375     mvOsPrintf("reqSize=%d, checkSize=%d, checkOffset=%d, checkMode=%d\n",
2376                 cesaReqSize, cesaCheckSize, cesaCheckOffset, cesaCheckMode);
2377
2378     mvOsPrintf("blockSize=%d, ivOffset=%d, ivFromUser=%d, crOffset=%d, crLength=%d\n",
2379                 blockSize, cmd.ivOffset, cmd.ivFromUser,
2380                 cmd.cryptoOffset, cmd.cryptoLength);
2381
2382     mvOsPrintf("macOffset=%d, digestOffset=%d, macLength=%d\n",
2383                 cmd.macOffset, cmd.digestOffset, cmd.macLength);
2384 */
2385     status = testCmd(sid, iter, &cmd, pTestSession,
2386                      cesaTestCases[caseIdx].pCryptoIV, blockSize);
2387
2388     if(status != MV_OK)
2389         return status;
2390
2391     /* Wait when all callbacks is received */
2392     count = 0;
2393     while(cesaIsReady == MV_FALSE)
2394     {
2395         mvOsSleep(10);
2396         count++;
2397         if(count > 100)
2398         {
2399             mvOsPrintf("testRun: Timeout occured\n");
2400             return MV_TIMEOUT;
2401         }
2402     }
2403
2404     return MV_OK;
2405 }
2406
2407
2408 void cesaTestStop(void)
2409 {
2410     MV_CESA_MBUF    *pMbufSrc, *pMbufDst;
2411     MV_BUF_INFO     *pFragsSrc, *pFragsDst;
2412     int             i;
2413
2414     /* Release all allocated memories */
2415     pMbufSrc = (MV_CESA_MBUF*)(cesaCmdRing[0].pSrc);
2416     pFragsSrc = cesaCmdRing[0].pSrc->pFrags;
2417
2418     pMbufDst = (MV_CESA_MBUF*)(cesaCmdRing[0].pDst);
2419     pFragsDst = cesaCmdRing[0].pDst->pFrags;
2420
2421     mvOsFree(pMbufSrc);
2422     mvOsFree(pMbufDst);
2423     mvOsFree(pFragsSrc);
2424     mvOsFree(pFragsDst);
2425
2426     for(i=0; i<CESA_DEF_REQ_SIZE; i++)
2427     {
2428         mvOsIoCachedFree(cesaTestOSHandle,cesaReqBufs[i].bufSize,
2429                          cesaReqBufs[i].bufPhysAddr,cesaReqBufs[i].bufVirtPtr,
2430                          cesaReqBufs[i].memHandle);
2431     }
2432     cesaDataHexStr3[0] = '\0';
2433 }
2434
2435 void    desTest(int iter, int reqSize, int checkMode)
2436 {
2437     int         mode, i;
2438     MV_STATUS   status;
2439
2440     mode = checkMode;
2441     if(checkMode == CESA_FULL_CHECK_MODE)
2442         mode = CESA_FAST_CHECK_MODE;
2443     i = iter;
2444     if(mode != CESA_NULL_CHECK_MODE)
2445         i = 1;
2446
2447     testOpen(0);
2448     testOpen(1);
2449     testOpen(2);
2450     testOpen(3);
2451
2452 /* DES / ECB mode / Encrypt only */
2453     status = testRun(0, 1, iter, reqSize, checkMode);
2454     printTestResults(0, status, checkMode);
2455
2456 /* DES / ECB mode / Decrypt only */
2457     status = testRun(1, 1, iter, reqSize, checkMode);
2458     printTestResults(1, status, checkMode);
2459
2460 /* DES / CBC mode / Encrypt only */
2461     status = testRun(2, 2, i, reqSize, mode);
2462     printTestResults(2, status, mode);
2463
2464 /* DES / CBC mode / Decrypt only */
2465     status = testRun(3, 2, iter, reqSize, mode);
2466     printTestResults(3, status, mode);
2467
2468     testClose(0);
2469     testClose(1);
2470     testClose(2);
2471     testClose(3);
2472 }
2473
2474 void    tripleDesTest(int iter, int reqSize, int checkMode)
2475 {
2476     int         mode, i;
2477     MV_STATUS   status;
2478
2479     mode = checkMode;
2480     if(checkMode == CESA_FULL_CHECK_MODE)
2481         mode = CESA_FAST_CHECK_MODE;
2482     i = iter;
2483     if(mode != CESA_NULL_CHECK_MODE)
2484         i = 1;
2485
2486     testOpen(100);
2487     testOpen(101);
2488     testOpen(102);
2489     testOpen(103);
2490
2491 /* 3DES / ECB mode / Encrypt only */
2492     status = testRun(100, 1, iter, reqSize, checkMode);
2493     printTestResults(100, status, checkMode);
2494
2495 /* 3DES / ECB mode / Decrypt only */
2496     status = testRun(101, 1, iter, reqSize, checkMode);
2497     printTestResults(101, status, checkMode);
2498
2499 /* 3DES / CBC mode / Encrypt only */
2500     status = testRun(102, 2, i, reqSize, mode);
2501     printTestResults(102, status, mode);
2502
2503 /* 3DES / CBC mode / Decrypt only */
2504     status = testRun(103, 2, iter, reqSize, mode);
2505     printTestResults(103, status, mode);
2506
2507     testClose(100);
2508     testClose(101);
2509     testClose(102);
2510     testClose(103);
2511 }
2512
2513 void    aesTest(int iter, int reqSize, int checkMode)
2514 {
2515     MV_STATUS   status;
2516     int         mode, i;
2517
2518     mode = checkMode;
2519     if(checkMode == CESA_FULL_CHECK_MODE)
2520         mode = CESA_FAST_CHECK_MODE;
2521
2522     i = iter;
2523     if(mode != CESA_NULL_CHECK_MODE)
2524         i = 1;
2525
2526     testOpen(200);
2527     testOpen(201);
2528     testOpen(202);
2529     testOpen(203);
2530     testOpen(204);
2531     testOpen(205);
2532     testOpen(206);
2533     testOpen(207);
2534     testOpen(208);
2535
2536 /* AES-128 Encode ECB mode */
2537     status = testRun(200, 3, iter, reqSize, checkMode);
2538     printTestResults(200, status, checkMode);
2539
2540 /* AES-128 Decode ECB mode */
2541     status = testRun(201, 3, iter, reqSize, checkMode);
2542     printTestResults(201, status, checkMode);
2543
2544 /* AES-128 Encode CBC mode (IV from SA) */
2545     status = testRun(202, 10, i, reqSize, mode);
2546     printTestResults(202, status, mode);
2547
2548 /* AES-128 Encode CBC mode (IV from User) */
2549     status = testRun(202, 24, i, reqSize, mode);
2550     printTestResults(202, status, mode);
2551
2552 /* AES-128 Decode CBC mode */
2553     status = testRun(203, 24, iter, reqSize, mode);
2554     printTestResults(203, status, checkMode);
2555
2556 /* AES-192 Encode ECB mode */
2557     status = testRun(204, 4, iter, reqSize, checkMode);
2558     printTestResults(204, status, checkMode);
2559
2560 /* AES-192 Decode ECB mode */
2561     status = testRun(205, 4, iter, reqSize, checkMode);
2562     printTestResults(205, status, checkMode);
2563
2564 /* AES-256 Encode ECB mode */
2565     status = testRun(206, 5, iter, reqSize, checkMode);
2566     printTestResults(206, status, checkMode);
2567
2568 /* AES-256 Decode ECB mode */
2569     status = testRun(207, 5, iter, reqSize, checkMode);
2570     printTestResults(207, status, checkMode);
2571
2572 #if defined(MV_LINUX)
2573 /* AES-128 Encode CTR mode */
2574     status = testRun(208, 23, iter, reqSize, mode);
2575     printTestResults(208, status, checkMode);
2576 #endif
2577     testClose(200);
2578     testClose(201);
2579     testClose(202);
2580     testClose(203);
2581     testClose(204);
2582     testClose(205);
2583     testClose(206);
2584     testClose(207);
2585     testClose(208);
2586 }
2587
2588
2589 void    mdTest(int iter, int reqSize, int checkMode)
2590 {
2591     int         mode;
2592     MV_STATUS   status;
2593
2594     if(iter == 0)
2595         iter = CESA_DEF_ITER_NUM;
2596
2597     mode = checkMode;
2598     if(checkMode == CESA_FULL_CHECK_MODE)
2599         mode = CESA_FAST_CHECK_MODE;
2600
2601     testOpen(300);
2602     testOpen(301);
2603     testOpen(302);
2604     testOpen(303);
2605     testOpen(305);
2606
2607 /* HMAC-MD5 Generate signature test */
2608     status = testRun(300, 6, iter, reqSize, mode);
2609     printTestResults(300, status, checkMode);
2610
2611 /* HMAC-MD5 Verify Signature test */
2612     status = testRun(301, 7, iter, reqSize, mode);
2613     printTestResults(301, status, checkMode);
2614
2615 /* HMAC-MD5 Generate signature test */
2616     status = testRun(302, 8, iter, reqSize, mode);
2617     printTestResults(302, status, checkMode);
2618
2619 /* HMAC-MD5 Verify Signature test */
2620     status = testRun(303, 9, iter, reqSize, mode);
2621     printTestResults(303, status, checkMode);
2622
2623 /* HASH-MD5 Generate signature test */
2624     status = testRun(305, 15, iter, reqSize, mode);
2625     printTestResults(305, status, checkMode);
2626
2627     testClose(300);
2628     testClose(301);
2629     testClose(302);
2630     testClose(303);
2631     testClose(305);
2632 }
2633
2634 void    shaTest(int iter, int reqSize, int checkMode)
2635 {
2636     int         mode;
2637     MV_STATUS   status;
2638
2639     if(iter == 0)
2640         iter = CESA_DEF_ITER_NUM;
2641
2642     mode = checkMode;
2643     if(checkMode == CESA_FULL_CHECK_MODE)
2644         mode = CESA_FAST_CHECK_MODE;
2645
2646     testOpen(400);
2647     testOpen(401);
2648     testOpen(402);
2649     testOpen(403);
2650     testOpen(405);
2651
2652 /* HMAC-SHA1 Generate signature test */
2653     status = testRun(400, 11, iter, reqSize, mode);
2654     printTestResults(400, status, checkMode);
2655
2656 /* HMAC-SHA1 Verify Signature test */
2657     status = testRun(401, 12, iter, reqSize, mode);
2658     printTestResults(401, status, checkMode);
2659
2660 /* HMAC-SHA1 Generate signature test */
2661     status = testRun(402, 13, iter, reqSize, mode);
2662     printTestResults(402, status, checkMode);
2663
2664 /* HMAC-SHA1 Verify Signature test */
2665     status = testRun(403, 14, iter, reqSize, mode);
2666     printTestResults(403, status, checkMode);
2667
2668 /* HMAC-SHA1 Generate signature test */
2669     status = testRun(405, 16, iter, reqSize, mode);
2670     printTestResults(405, status, checkMode);
2671
2672     testClose(400);
2673     testClose(401);
2674     testClose(402);
2675     testClose(403);
2676     testClose(405);
2677 }
2678
2679 void    combiTest(int iter, int reqSize, int checkMode)
2680 {
2681     MV_STATUS   status;
2682     int         mode, i;
2683
2684     mode = checkMode;
2685     if(checkMode == CESA_FULL_CHECK_MODE)
2686         mode = CESA_FAST_CHECK_MODE;
2687
2688     if(iter == 0)
2689         iter = CESA_DEF_ITER_NUM;
2690
2691     i = iter;
2692     if(mode != CESA_NULL_CHECK_MODE)
2693         i = 1;
2694
2695     testOpen(500);
2696     testOpen(501);
2697     testOpen(502);
2698     testOpen(503);
2699     testOpen(504);
2700     testOpen(505);
2701     testOpen(506);
2702     testOpen(507);
2703
2704 /* DES ECB + MD5 encode test */
2705     status = testRun(500, 17, iter, reqSize, mode);
2706     printTestResults(500, status, mode);
2707
2708 /* DES ECB + SHA1 encode test */
2709     status = testRun(501, 18, iter, reqSize, mode);
2710     printTestResults(501, status, mode);
2711
2712 /* 3DES ECB + MD5 encode test */
2713     status = testRun(502, 17, iter, reqSize, mode);
2714     printTestResults(502, status, mode);
2715
2716 /* 3DES ECB + SHA1 encode test */
2717     status = testRun(503, 18, iter, reqSize, mode);
2718     printTestResults(503, status, mode);
2719
2720 /* 3DES CBC + MD5 encode test */
2721     status = testRun(504, 19, i, reqSize, mode);
2722     printTestResults(504, status, mode);
2723
2724 /* 3DES CBC + SHA1 encode test */
2725     status = testRun(505, 20, i, reqSize, mode);
2726     printTestResults(505, status, mode);
2727
2728 /* AES-128 CBC + MD5 encode test */
2729     status = testRun(506, 21, i, reqSize, mode);
2730     printTestResults(506, status, mode);
2731
2732 /* AES-128 CBC + SHA1 encode test */
2733     status = testRun(507, 22, i, reqSize, mode);
2734     printTestResults(507, status, mode);
2735
2736     testClose(500);
2737     testClose(501);
2738     testClose(502);
2739     testClose(503);
2740     testClose(504);
2741     testClose(505);
2742     testClose(506);
2743     testClose(507);
2744 }
2745
2746 void    cesaOneTest(int testIdx, int caseIdx,
2747                     int iter, int reqSize, int checkMode)
2748 {
2749     MV_STATUS   status;
2750
2751     if(iter == 0)
2752         iter = CESA_DEF_ITER_NUM;
2753
2754     mvOsPrintf("test=%d, case=%d, size=%d, iter=%d\n",
2755                 testIdx, caseIdx, reqSize, iter);
2756
2757     status = testOpen(testIdx);
2758
2759     status = testRun(testIdx, caseIdx, iter, reqSize, checkMode);
2760     printTestResults(testIdx, status, checkMode);
2761     status = testClose(testIdx);
2762
2763 }
2764
2765 void    cesaTest(int iter, int reqSize, int checkMode)
2766 {
2767     if(iter == 0)
2768         iter = CESA_DEF_ITER_NUM;
2769
2770     mvOsPrintf("%d iteration\n", iter);
2771     mvOsPrintf("%d size\n\n", reqSize);
2772
2773 /* DES tests */
2774     desTest(iter, reqSize, checkMode);
2775
2776 /* 3DES tests */
2777     tripleDesTest(iter, reqSize, checkMode);
2778
2779 /* AES tests */
2780     aesTest(iter, reqSize, checkMode);
2781
2782 /* MD5 tests */
2783     mdTest(iter, reqSize, checkMode);
2784
2785 /* SHA-1 tests */
2786     shaTest(iter, reqSize, checkMode);
2787 }
2788
2789 void    multiSizeTest(int idx, int iter, int checkMode, char* inputData)
2790 {
2791     MV_STATUS               status;
2792     int                     i;
2793     MV_CESA_SIZE_TEST*      pMultiTest;
2794
2795     if( testOpen(idx) != MV_OK)
2796         return;
2797
2798     if(iter == 0)
2799         iter = CESA_DEF_ITER_NUM;
2800
2801     if(checkMode == CESA_SHOW_CHECK_MODE)
2802     {
2803         iter = 1;
2804     }
2805     else
2806         checkMode = CESA_FULL_CHECK_MODE;
2807
2808     cesaTestCases[0].plainHexStr = inputData;
2809     cesaTestCases[0].pCryptoIV = NULL;
2810
2811     switch(idx)
2812     {
2813         case 302:
2814             pMultiTest = mdMultiSizeTest302;
2815             if(inputData == NULL)
2816                 cesaTestCases[0].plainHexStr = cesaDataHexStr3;
2817             break;
2818
2819         case 304:
2820             pMultiTest = mdMultiSizeTest304;
2821             if(inputData == NULL)
2822                 cesaTestCases[0].plainHexStr = hashHexStr80;
2823             break;
2824
2825         case 305:
2826             pMultiTest = mdMultiSizeTest305;
2827             if(inputData == NULL)
2828                 cesaTestCases[0].plainHexStr = hashHexStr80;
2829             break;
2830
2831         case 402:
2832             pMultiTest = shaMultiSizeTest402;
2833             if(inputData == NULL)
2834                 cesaTestCases[0].plainHexStr = hashHexStr80;
2835             break;
2836
2837         case 404:
2838             pMultiTest = shaMultiSizeTest404;
2839             if(inputData == NULL)
2840                 cesaTestCases[0].plainHexStr = hashHexStr80;
2841             break;
2842
2843         case 405:
2844             pMultiTest = shaMultiSizeTest405;
2845             if(inputData == NULL)
2846                 cesaTestCases[0].plainHexStr = hashHexStr80;
2847             break;
2848
2849         case 502:
2850             pMultiTest = tripleDesMdMultiSizeTest502;
2851             if(inputData == NULL)
2852                 cesaTestCases[0].plainHexStr = hashHexStr80;
2853             break;
2854
2855         case 503:
2856             pMultiTest = tripleDesShaMultiSizeTest503;
2857             if(inputData == NULL)
2858                 cesaTestCases[0].plainHexStr = hashHexStr80;
2859             break;
2860
2861         case 504:
2862             iter = 1;
2863             pMultiTest = cbc3desMdMultiSizeTest504;
2864             cesaTestCases[0].pCryptoIV = iv1;
2865             if(inputData == NULL)
2866                 cesaTestCases[0].plainHexStr = hashHexStr80;
2867             break;
2868
2869         case 505:
2870             iter = 1;
2871             pMultiTest = cbc3desShaMultiSizeTest505;
2872             cesaTestCases[0].pCryptoIV = iv1;
2873             if(inputData == NULL)
2874                 cesaTestCases[0].plainHexStr = hashHexStr80;
2875             break;
2876
2877         case 506:
2878             iter = 1;
2879             pMultiTest = cbcAes128md5multiSizeTest506;
2880             cesaTestCases[0].pCryptoIV = iv5;
2881             if(inputData == NULL)
2882                 cesaTestCases[0].plainHexStr = hashHexStr80;
2883             break;
2884
2885         case 507:
2886             iter = 1;
2887             pMultiTest = cbcAes128sha1multiSizeTest507;
2888             cesaTestCases[0].pCryptoIV = iv5;
2889             if(inputData == NULL)
2890                 cesaTestCases[0].plainHexStr = hashHexStr80;
2891             break;
2892
2893         default:
2894             iter = 1;
2895             checkMode = CESA_SHOW_CHECK_MODE;
2896             pMultiTest = mdMultiSizeTest302;
2897             if(inputData == NULL)
2898                 cesaTestCases[0].plainHexStr = hashHexStr80;
2899     }
2900     i = 0;
2901     while(pMultiTest[i].outputHexStr != NULL)
2902     {
2903         cesaTestCases[0].cipherHexStr = (char *)pMultiTest[i].outputHexStr;
2904         status = testRun(idx, 0, iter, pMultiTest[i].size,
2905                          checkMode);
2906         if(checkMode != CESA_SHOW_CHECK_MODE)
2907         {
2908             cesaReqSize = pMultiTest[i].size;
2909             printTestResults(idx, status, checkMode);
2910         }
2911         if(status != MV_OK)
2912             break;
2913         i++;
2914     }
2915     testClose(idx);
2916 /*
2917     mvCesaDebugStatus();
2918     cesaTestPrintStatus();
2919 */
2920 }
2921
2922 void    open_session_test(int idx, int caseIdx, int iter)
2923 {
2924     int         reqIdError, cryptoError, openErrors, i;
2925     int         openErrDisp[100];
2926     MV_STATUS   status;
2927
2928     memset(openErrDisp, 0, sizeof(openErrDisp));
2929     openErrors = 0;
2930     reqIdError = 0;
2931     cryptoError = 0;
2932     for(i=0; i<iter; i++)
2933     {
2934         status = testOpen(idx);
2935         if(status != MV_OK)
2936         {
2937             openErrors++;
2938             openErrDisp[status]++;
2939         }
2940         else
2941         {
2942             testRun(idx, caseIdx, 1, 0, CESA_FAST_CHECK_MODE);
2943             if(cesaCryptoError > 0)
2944                 cryptoError++;
2945             if(cesaReqIdError > 0)
2946                 reqIdError++;
2947
2948             testClose(idx);
2949         }
2950     }
2951     if(cryptoError > 0)
2952         mvOsPrintf("cryptoError : %d\n", cryptoError);
2953     if(reqIdError > 0)
2954         mvOsPrintf("reqIdError  : %d\n", reqIdError);
2955
2956     if(openErrors > 0)
2957     {
2958         mvOsPrintf("Open Errors = %d\n", openErrors);
2959         for(i=0; i<100; i++)
2960         {
2961             if(openErrDisp[i] != 0)
2962                 mvOsPrintf("Error %d - occurs %d times\n", i, openErrDisp[i]);
2963         }
2964     }
2965 }
2966
2967
2968 void    loopback_test(int idx, int iter, int size, char* pPlainData)
2969 {
2970 }
2971
2972
2973 #if defined(MV_VXWORKS)
2974 int testMode = 0;
2975 unsigned __TASKCONV cesaTask(void* args)
2976 {
2977     int reqSize = cesaReqSize;
2978
2979     if(testMode == 0)
2980     {
2981         cesaOneTest(cesaTestIdx, cesaCaseIdx, cesaIteration,
2982                     reqSize, cesaCheckMode);
2983     }
2984     else
2985     {
2986         if(testMode == 1)
2987         {
2988             cesaTest(cesaIteration, reqSize, cesaCheckMode);
2989             combiTest(cesaIteration, reqSize, cesaCheckMode);
2990         }
2991         else
2992         {
2993             multiSizeTest(cesaIdx, cesaIteration, cesaCheckMode, NULL);
2994         }
2995     }
2996     return 0;
2997 }
2998
2999 void oneTest(int testIdx, int caseIdx,
3000               int iter, int reqSize, int checkMode)
3001 {
3002     long    rc;
3003
3004     cesaIteration = iter;
3005     cesaReqSize = cesaRateSize = reqSize;
3006     cesaCheckMode = checkMode;
3007     testMode = 0;
3008     cesaTestIdx = testIdx;
3009     cesaCaseIdx = caseIdx;
3010     rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId);
3011     if (rc != MV_OK)
3012     {
3013         mvOsPrintf("hMW: Can't create CESA multiCmd test task, rc = %ld\n", rc);
3014     }
3015 }
3016
3017 void multiTest(int iter, int reqSize, int checkMode)
3018 {
3019     long    rc;
3020
3021     cesaIteration = iter;
3022     cesaCheckMode = checkMode;
3023     cesaReqSize = reqSize;
3024     testMode = 1;
3025     rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId);
3026     if (rc != MV_OK)
3027     {
3028         mvOsPrintf("hMW: Can't create CESA multiCmd test task, rc = %ld\n", rc);
3029     }
3030 }
3031
3032 void sizeTest(int testIdx, int iter, int checkMode)
3033 {
3034     long    rc;
3035
3036     cesaIteration = iter;
3037         cesaCheckMode = checkMode;
3038         testMode = 2;
3039         cesaIdx = testIdx;
3040     rc = mvOsTaskCreate("CESA_T", 100, 4*1024, cesaTask, NULL, &cesaTaskId);
3041     if (rc != MV_OK)
3042     {
3043         mvOsPrintf("hMW: Can't create CESA test task, rc = %ld\n", rc);
3044     }
3045 }
3046
3047 #endif /* MV_VXWORKS */
3048
3049 extern void    mvCesaDebugSA(short sid, int mode);
3050 void    cesaTestPrintSession(int idx)
3051 {
3052     int                     testIdx;
3053     MV_CESA_TEST_SESSION*   pTestSession;
3054
3055     pTestSession = getTestSessionDb(idx, &testIdx);
3056     if(pTestSession == NULL)
3057     {
3058         mvOsPrintf("Test %d is not exist\n", idx);
3059         return;
3060     }
3061     pTestSession = &pTestSession[testIdx];
3062
3063     if(pTestSession->sid == -1)
3064     {
3065         mvOsPrintf("Test session %d is not opened\n", idx);
3066         return;
3067     }
3068
3069     mvCesaDebugSA(pTestSession->sid, 1);
3070 }
3071
3072 void    cesaTestPrintStatus(void)
3073 {
3074     mvOsPrintf("\n\t Cesa Test Status\n\n");
3075
3076     mvOsPrintf("isrCount=%d\n",
3077                 cesaTestIsrCount);
3078
3079 #ifdef CESA_TEST_DEBUG
3080     {
3081         int i, j;
3082         j = cesaTestTraceIdx;
3083         mvOsPrintf("No  Type  Cause   rCause   iCause   Res     Time     pReady    pProc    pEmpty\n");
3084         for(i=0; i<MV_CESA_TEST_TRACE_SIZE; i++)
3085         {
3086             mvOsPrintf("%02d.  %d   0x%04x  0x%04x   0x%04x   0x%02x   0x%02x   %02d   0x%06x  %p  %p  %p\n",
3087                 j, cesaTestTrace[j].type, cesaTestTrace[j].cause, cesaTestTrace[j].realCause,
3088                 cesaTestTrace[j].dmaCause, cesaTestTrace[j].resources, cesaTestTrace[j].timeStamp,
3089                 cesaTestTrace[j].pReqReady, cesaTestTrace[j].pReqProcess, cesaTestTrace[j].pReqEmpty);
3090             j++;
3091             if(j == MV_CESA_TEST_TRACE_SIZE)
3092                 j = 0;
3093         }
3094     }
3095 #endif /* CESA_TEST_DEBUG */
3096 }