mvCesaTest.c 103 KB

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