twl_wrapsdk/build/tests/os/svc-sha1/ARM7/src/main.c
yutaka fa95dbc025 add SVC_InitSignHeap
add test codes to use new system calls

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@215 4ee2a332-4b2b-5046-8439-1ba90f034370
2007-08-02 09:50:11 +00:00

199 lines
7.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: NitroSDK - OS - demos - svc-sha1
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Log: main.c,v $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <twl.h>
static const u32 gs_data[] ATTRIBUTE_ALIGN(32) = {
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567,
0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567, 0x89abcdef, 0x01234567
};
//================================================================================
static void dump(const char *str, const void *ptr, u32 length)
{
u8 *data = (u8*)ptr;
int i;
OS_TPrintf("\n[%s] (%d bytes):\n\t", str, length);
for (i = 0; i < length; i++) {
OS_TPrintf("%02X", *data++);
if ((i & 0xF) == 0xF) OS_TPrintf("\n\t");
else OS_TPrintf(" ");
}
OS_TPrintf("\n");
}
/*
SHA1 API
*/
typedef struct SHA1_CTX // <20><><EFBFBD>ۂɂ́A<CD81>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ璆<C882>g<EFBFBD>͉<EFBFBD><CD89>ł<EFBFBD><C582>ǂ<EFBFBD>
{
u32 h0,h1,h2,h3,h4;
u32 Nl,Nh;
u32 data[16];
int num;
void (*sha_block)(struct SHA1_CTX *c, const u8 *W, int num);
}
SHA1_CTX;
static inline void SHA1_Init(SHA1_CTX *ctx)
{
if (ctx == NULL)
return;
MI_CpuClear8(ctx, sizeof(SHA1_CTX));
SVC_SHA1Init(ctx);
}
static inline void SHA1_Update(SHA1_CTX *ctx, const void* data, u32 len)
{
if (ctx == NULL)
return;
if (len > 0 && data == NULL)
return;
SVC_SHA1Update(ctx, data, len);
}
static inline void SHA1_GetHash(SHA1_CTX *ctx, u8* md)
{
if (ctx == NULL)
return;
if (md == NULL)
return;
SVC_SHA1GetHash(md, ctx);
}
static inline void SHA1_Calc(u8* md, const void* data, u32 len)
{
SVC_CalcSHA1(md, data, len);
}
/*---------------------------------------------------------------------------*
Name: TwlMain
Description: main
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void TwlMain()
{
OS_Init();
OS_Printf("ARM7 starts.\n");
OS_InitTick();
OS_EnableIrq();
dump("Source:", gs_data, sizeof(gs_data));
/*
TEST1: <20><><EFBFBD>x<EFBFBD><78>SHA1<41><31><EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD>
*/
{
u8 md[20];
OSTick begin = OS_GetTick();
SHA1_Calc(md, gs_data, sizeof(gs_data)); // calc sha1 at once
OS_TPrintf("\nSHA1_Calc was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
dump("Test1 Result:", md, sizeof(md));
}
/*
TEST2: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɕ<EFBFBD><C995><EFBFBD><EFBFBD><EFBFBD>SHA1<41><31><EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD>
*/
{
u8 md[20];
SHA1_CTX ctx;
OSTick begin = OS_GetTick();
SHA1_Init(&ctx);
OS_TPrintf("\nSHA1_Init was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
SHA1_Update(&ctx, gs_data, sizeof(gs_data));
OS_TPrintf("\n1st SHA1_Update was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
SHA1_Update(&ctx, gs_data, sizeof(gs_data));
OS_TPrintf("\n2nd SHA1_Update was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
SHA1_GetHash(&ctx, md);
OS_TPrintf("\nSHA1_GetHash was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
dump("Test2 Result:", md, sizeof(md));
}
#if 0 // ARM7<4D>ɂ<EFBFBD>DGT<47><54><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>͂Ȃ<CD82><C882>H
/*
TEST3: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɕ<EFBFBD><C995><EFBFBD><EFBFBD><EFBFBD>SHA1<41><31><EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD> (DGT<47><54><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
*/
{
u8 md[20];
DGTHash2Context ctx;
OSTick begin = OS_GetTick();
DGT_Hash2Reset(&ctx);
OS_TPrintf("\nDGT_Hash2Reset was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
DGT_Hash2SetSource(&ctx, (const u8*)gs_data, sizeof(gs_data));
OS_TPrintf("\n1st DGT_Hash2SetSource was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
DGT_Hash2SetSource(&ctx, (const u8*)gs_data, sizeof(gs_data));
OS_TPrintf("\n2nd DGT_Hash2SetSource was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
begin = OS_GetTick();
DGT_Hash2GetDigest(&ctx, md);
OS_TPrintf("\nDGT_Hash2GetDigest was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
dump("Test3 Result:", md, sizeof(md));
}
#endif
/*
TEST4: SHA1<41>𗘗p<F0979897><70><EFBFBD>āA<C481>΂<EFBFBD><CE82><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD>ɂ΂炯<CE82><E782AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>o<EFBFBD>̓T<CD83>C<EFBFBD>Y<EFBFBD>͔C<CD94><43>)
SHA1<41>𗘗p<F0979897><70><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂ŏo<C58F>̓f<CD83>[<5B>^<5E>̐擪160bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ȍ~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982>
<20><><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>b<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>΋^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>Ďg<C48E>p<EFBFBD>ł<EFBFBD><C582><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>SVC_SHA1*<2A>𗘗p<F0979897><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E682A2><EFBFBD><EFBFBD>
<20><><EFBFBD>O<EFBFBD><4F>SVC_EqualizeSHA1<41>̕<EFBFBD><CC95><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>ȁH
*/
{
u8 md[20];
OSTick begin = OS_GetTick();
SVC_RandomSHA1(md, sizeof(md), gs_data, sizeof(gs_data)); // map gs_data to md
OS_TPrintf("\nSVC_RandomSHA1 was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin));
dump("Test4 Result:", md, sizeof(md));
}
// done
OS_TPrintf("\nARM7 ends.\n");
//OS_Terminate();
}