diff --git a/trunk/CardSaveDataMover/Imp/source/main.cpp b/trunk/CardSaveDataMover/Imp/source/main.cpp index 4d1f190..6865d78 100644 --- a/trunk/CardSaveDataMover/Imp/source/main.cpp +++ b/trunk/CardSaveDataMover/Imp/source/main.cpp @@ -37,10 +37,17 @@ #define KEY_LENGTH 2048 #define LIST_FILE "sdmc:/csm_list.txt" #define SIGN_FILE "sdmc:/csm_sign.dat" -#define PUBK_FILE "sdmc:/csm_key_public.der" +//#define PUBK_FILE "sdmc:/csm_key_public.der" #define PRVK_FILE "sdmc:/csm_key_private.der" +extern "C" { + extern u8* PUBLIC_KEY_BEGIN[]; + extern u8* PUBLIC_KEY_END[]; + + const void* PUBLIC_KEY = PUBLIC_KEY_BEGIN; +} + demo::RenderSystemDrawing s_RenderSystem; nn::fnd::ExpHeap appHeap; uptr heapForGx; @@ -74,7 +81,7 @@ bool ImportFile(nn::fs::MediaType mediaType, wchar_t* filename) u8 s_list[200][nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN+1] NN_ATTRIBUTE_ALIGN(32);//シリアルリスト u8 sign[1024*10] NN_ATTRIBUTE_ALIGN(32);//署名 -u8 key[1024*10] NN_ATTRIBUTE_ALIGN(32);//署名 +//u8 key[1024*10] NN_ATTRIBUTE_ALIGN(32);//署名 u8 serialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN+1]; bool GetSerial(){ @@ -137,6 +144,23 @@ bool VeriRsa(u8* src,size_t sz,u8* sig,u8* pub) return res.IsSuccess(); } +bool VeriRsa(u8* src,size_t sz,u8* sig) +{ + nn::crypto::RsaKey key; + //nn::crypto::Initialize(); + nn::ps::CTR::Initialize(); + nn::Result res = key.InitializePublicKey(PUBLIC_KEY_BEGIN,KEY_LENGTH); + NN_LOG("inipubkey desc= %d\n",res.GetDescription()); + if (res.IsSuccess()) + { + res = nn::ps::CTR::VerifyRsaSha256(src,sz,sig,key); + NN_LOG("verisig desc= %d\n",res.GetDescription()); + } + //nn::crypto::Finalize(); + nn::ps::CTR::Finalize(); + return res.IsSuccess(); +} + void ErrorStop(char *s) @@ -264,6 +288,7 @@ void nnMain( void ) } } } + fsize = FileRead(SIGN_FILE); if(fsize > 0)//署名リード成功 @@ -271,16 +296,18 @@ void nnMain( void ) if (fsize>sizeof(sign))fsize = sizeof(sign); memcpy(sign,readBuf,fsize); - fsize = FileRead(PUBK_FILE); - if(fsize > 0)//公開鍵リード成功 + //fsize = FileRead(PUBK_FILE); + //if(fsize > 0)//公開鍵リード成功 { - if (fsize>sizeof(key))fsize = sizeof(key); - memcpy(key,readBuf,fsize); + //if (fsize>sizeof(key))fsize = sizeof(key); + //memcpy(key,readBuf,fsize); fsize = FileRead(LIST_FILE); if(fsize > 0)//リストリード成功 { - if (VeriRsa(readBuf,fsize,sign,key)) + + //if (VeriRsa(readBuf,fsize,sign,key)) + if (VeriRsa(readBuf,fsize,sign)) {//署名検証OK int list_ct = 0; n=0;