diff --git a/build/tests/os/svc-rsa/ARM7/src/main.c b/build/tests/os/svc-rsa/ARM7/src/main.c index 0977555..13a7851 100644 --- a/build/tests/os/svc-rsa/ARM7/src/main.c +++ b/build/tests/os/svc-rsa/ARM7/src/main.c @@ -75,8 +75,6 @@ static void dump(const char *str, const void *ptr, u32 length) OS_TPrintf("\n"); } -typedef int RSA_CTX[3]; - /*---------------------------------------------------------------------------* Name: TwlMain @@ -88,7 +86,7 @@ typedef int RSA_CTX[3]; *---------------------------------------------------------------------------*/ void TwlMain() { - RSA_CTX ctx; // heap管理情報 + SVCSignHeapContext ctx; // heap管理情報 u8 md[20]; // calculated by gs_data u8 data[128]; // decrypted by gs_sign u8 hash[20]; // decrypted and extructed by gs_sign @@ -108,7 +106,7 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_InitSignHeap(ctx, gs_heap, sizeof(gs_heap)); + SVC_InitSignHeap(&ctx, gs_heap, sizeof(gs_heap)); OS_TPrintf("SVC_InitSignHeap was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); } @@ -118,8 +116,8 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_DecryptoSign(ctx, data, gs_sign, gs_key); - OS_TPrintf("SVC_DecryptoSign was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); + SVC_DecryptSign(&ctx, data, gs_sign, gs_key); + OS_TPrintf("SVC_DecryptSign was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); dump("RSA Result:", data, sizeof(data)); } @@ -129,8 +127,8 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_DecryptoSignDER(ctx, hash, gs_sign, gs_key); - OS_TPrintf("SVC_DecryptoSignDER was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); + SVC_DecryptSignDER(&ctx, hash, gs_sign, gs_key); + OS_TPrintf("SVC_DecryptSignDER was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); dump("Extracted hash:", hash, sizeof(hash)); } diff --git a/build/tests/os/svc-rsa/ARM9/src/main.c b/build/tests/os/svc-rsa/ARM9/src/main.c index 8d43ea3..697f42f 100644 --- a/build/tests/os/svc-rsa/ARM9/src/main.c +++ b/build/tests/os/svc-rsa/ARM9/src/main.c @@ -75,8 +75,6 @@ static void dump(const char *str, const void *ptr, u32 length) OS_TPrintf("\n"); } -typedef int RSA_CTX[3]; - /*---------------------------------------------------------------------------* Name: TwlMain @@ -88,7 +86,7 @@ typedef int RSA_CTX[3]; *---------------------------------------------------------------------------*/ void TwlMain() { - RSA_CTX ctx; // heap管理情報 + SVCSignHeapContext ctx; // heap管理情報 u8 md[20]; // calculated by gs_data u8 data[128]; // decrypted by gs_sign u8 hash[20]; // decrypted and extructed by gs_sign @@ -108,7 +106,7 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_InitSignHeap(ctx, gs_heap, sizeof(gs_heap)); + SVC_InitSignHeap(&ctx, gs_heap, sizeof(gs_heap)); OS_TPrintf("SVC_InitSignHeap was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); } @@ -118,8 +116,8 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_DecryptoSign(ctx, data, gs_sign, gs_key); - OS_TPrintf("SVC_DecryptoSign was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); + SVC_DecryptSign(&ctx, data, gs_sign, gs_key); + OS_TPrintf("SVC_DecryptSign was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); dump("RSA Result:", data, sizeof(data)); } @@ -129,8 +127,8 @@ void TwlMain() { OSTick begin = OS_GetTick(); - SVC_DecryptoSignDER(ctx, hash, gs_sign, gs_key); - OS_TPrintf("SVC_DecryptoSignDER was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); + SVC_DecryptSignDER(&ctx, hash, gs_sign, gs_key); + OS_TPrintf("SVC_DecryptSignDER was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); dump("Extracted hash:", hash, sizeof(hash)); } diff --git a/build/tests/os/svc-sha1/ARM7/src/main.c b/build/tests/os/svc-sha1/ARM7/src/main.c index e266f67..7850491 100644 --- a/build/tests/os/svc-sha1/ARM7/src/main.c +++ b/build/tests/os/svc-sha1/ARM7/src/main.c @@ -53,26 +53,17 @@ static void dump(const char *str, const void *ptr, u32 length) /* SHA1 API */ -typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い -{ - 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) +static inline void SHA1_Init(SVCSHA1Context *ctx) { if (ctx == NULL) return; - MI_CpuClear8(ctx, sizeof(SHA1_CTX)); +// ctx->sha_block = NULL; +// MI_CpuClear8(ctx, sizeof(SVCSHA1Context)); SVC_SHA1Init(ctx); } -static inline void SHA1_Update(SHA1_CTX *ctx, const void* data, u32 len) +static inline void SHA1_Update(SVCSHA1Context *ctx, const void* data, u32 len) { if (ctx == NULL) return; @@ -81,13 +72,13 @@ static inline void SHA1_Update(SHA1_CTX *ctx, const void* data, u32 len) SVC_SHA1Update(ctx, data, len); } -static inline void SHA1_GetHash(SHA1_CTX *ctx, u8* md) +static inline void SHA1_GetHash(SVCSHA1Context *ctx, u8* md) { if (ctx == NULL) return; if (md == NULL) return; - SVC_SHA1GetHash(md, ctx); + SVC_SHA1GetHash(ctx, md); } static inline void SHA1_Calc(u8* md, const void* data, u32 len) @@ -133,7 +124,7 @@ void TwlMain() { u8 md[20]; - SHA1_CTX ctx; + SVCSHA1Context ctx; OSTick begin = OS_GetTick(); SHA1_Init(&ctx); OS_TPrintf("\nSHA1_Init was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); diff --git a/build/tests/os/svc-sha1/ARM9/src/main.c b/build/tests/os/svc-sha1/ARM9/src/main.c index c1df644..eba158f 100644 --- a/build/tests/os/svc-sha1/ARM9/src/main.c +++ b/build/tests/os/svc-sha1/ARM9/src/main.c @@ -53,26 +53,17 @@ static void dump(const char *str, const void *ptr, u32 length) /* SHA1 API */ -typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い -{ - 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) +static inline void SHA1_Init(SVCSHA1Context *ctx) { if (ctx == NULL) return; - MI_CpuClear8(ctx, sizeof(SHA1_CTX)); +// ctx->sha_block = NULL; +// MI_CpuClear8(ctx, sizeof(SVCSHA1Context)); SVC_SHA1Init(ctx); } -static inline void SHA1_Update(SHA1_CTX *ctx, const void* data, u32 len) +static inline void SHA1_Update(SVCSHA1Context *ctx, const void* data, u32 len) { if (ctx == NULL) return; @@ -81,13 +72,13 @@ static inline void SHA1_Update(SHA1_CTX *ctx, const void* data, u32 len) SVC_SHA1Update(ctx, data, len); } -static inline void SHA1_GetHash(SHA1_CTX *ctx, u8* md) +static inline void SHA1_GetHash(SVCSHA1Context *ctx, u8* md) { if (ctx == NULL) return; if (md == NULL) return; - SVC_SHA1GetHash(md, ctx); + SVC_SHA1GetHash(ctx, md); } static inline void SHA1_Calc(u8* md, const void* data, u32 len) @@ -133,7 +124,7 @@ void TwlMain() DC_FlushAll(); // 条件をそろえる { u8 md[20]; - SHA1_CTX ctx; + SVCSHA1Context ctx; OSTick begin = OS_GetTick(); SHA1_Init(&ctx); OS_TPrintf("\nSHA1_Init was consumed %d usec\n", (int)OS_TicksToMicroSeconds(OS_GetTick()-begin)); diff --git a/include/twl/os/common/systemCall.h b/include/twl/os/common/systemCall.h index ed83d48..608264c 100644 --- a/include/twl/os/common/systemCall.h +++ b/include/twl/os/common/systemCall.h @@ -22,37 +22,64 @@ extern "C" { #endif -int SVC_InitSignHeap( - int acmemory_pool[3], +typedef struct +{ + u32* head; + u32* tail; + u32 size; +} +SVCSignHeapContext; + +typedef struct SVCSHA1Context +{ + u32 h0,h1,h2,h3,h4; + u32 Nl,Nh; + u32 data[16]; + int num; + void (*sha_block)(struct SVCSHA1Context *c, const u8 *W, int num); +} +SVCSHA1Context; + +typedef struct +{ + void* output; + const void* input; + const void* key; +} +SVCSignBuffers; + + +void SVC_InitSignHeap( + SVCSignHeapContext* acmemory_pool, void* heap, unsigned int length ); -int SVC_DecryptoRSA( - const void* acmemory_pool, - const void* pData, +int SVC_DecryptRSA( + const SVCSignHeapContext* acmemory_pool, + const SVCSignBuffers* pData, unsigned int* len // 出力サイズ ); -int SVC_DecryptoSign( - const void* acmemory_pool, +int SVC_DecryptSign( + const SVCSignHeapContext* acmemory_pool, void* buffer, // 出力領域 const void* sgn_ptr, // データへのポインタ const void* key_ptr // キーへのポインタ ); -int SVC_DecryptoSignDER( - const void* acmemory_pool, +int SVC_DecryptSignDER( + const SVCSignHeapContext* acmemory_pool, void* buffer, // 出力領域 const void* sgn_ptr, // データへのポインタ const void* key_ptr // キーへのポインタ ); -void SVC_SHA1Init( void *c ); -void SVC_SHA1Update( void *c, const unsigned char *data, unsigned long len ); -void SVC_SHA1GetHash( unsigned char *md, void *c ); +void SVC_SHA1Init( SVCSHA1Context *ctx ); +void SVC_SHA1Update( SVCSHA1Context *ctx, const unsigned char *data, unsigned long len ); +void SVC_SHA1GetHash( SVCSHA1Context *ctx, unsigned char *md ); -int SVC_CalcSHA1( +void SVC_CalcSHA1( void* buffer, // 出力領域 const void* buf, // データへのポインタ unsigned int len // データの長さ diff --git a/lib/ARM7-TS/etc/libsyscall_sp.twl.a b/lib/ARM7-TS/etc/libsyscall_sp.twl.a index 1df274f..5ae53a5 100644 Binary files a/lib/ARM7-TS/etc/libsyscall_sp.twl.a and b/lib/ARM7-TS/etc/libsyscall_sp.twl.a differ diff --git a/lib/ARM9-TS/etc/libsyscall.twl.a b/lib/ARM9-TS/etc/libsyscall.twl.a index 1df274f..5ae53a5 100644 Binary files a/lib/ARM9-TS/etc/libsyscall.twl.a and b/lib/ARM9-TS/etc/libsyscall.twl.a differ