fex_err_t fex_read( File_Extractor* fe, void* out, long count ) { if ( count == (long) FILE_READ( out, count, fe->file ) ) return 0; if ( FILE_GZ(feof,gzeof)( fe->file ) ) return "Unexpected end of file"; return "Couldn't read from file"; }
// ZIPで圧縮されたRONのロード // 返り値:-2=一時ファイルを作成/-1=エラー/その他=ROMのサイズ // もし、ROMのサイズ>ROMバッファのサイズ の場合は一時ファイルを作成 s32 load_file_zip(char *filename) { struct SZIPFileHeader data; char tmp[MAX_PATH]; s32 retval = -1; u8 *buffer = NULL; u8 *cbuffer; char *ext; FILE_ID fd; FILE_ID tmp_fd; u32 zip_buffer_size; u32 write_tmp_flag = NO; u32 use_vram; use_vram = NO; zip_buffer_size = 16 * 1024 * 1024; cbuffer = malloc(zip_buffer_size); while(cbuffer == NULL) { zip_buffer_size -= (256 * 1024); if(zip_buffer_size == 0) break; cbuffer = malloc(zip_buffer_size); } if(zip_buffer_size == 0) { use_vram = YES; zip_buffer_size = ZIP_BUFFER_SIZE; cbuffer = (u8 *)UNIVERSAL_VRAM_ADDR; // 汎用フレームバッファを使用 } chdir(rom_path); FILE_OPEN(fd, filename, READ); if(!FILE_CHECK_VALID(fd)) return -1; { FILE_READ(fd, &data, sizeof(struct SZIPFileHeader)); // EDIT: Check if this is a zip file without worrying about endian // It checks for the following: 0x50 0x4B 0x03 0x04 (PK..) // Used to be: if(data.Sig != 0x04034b50) break; if( data.Sig[0] != 0x50 || data.Sig[1] != 0x4B || data.Sig[2] != 0x03 || data.Sig[3] != 0x04 ) { goto outcode; } FILE_READ(fd, tmp, data.FilenameLength); tmp[data.FilenameLength] = 0; // end string if(data.ExtraFieldLength) FILE_SEEK(fd, data.ExtraFieldLength, SEEK_CUR); if(data.GeneralBitFlag & 0x0008) { FILE_READ(fd, &data.DataDescriptor, sizeof(struct SZIPFileDataDescriptor)); } ext = strrchr(tmp, '.') + 1; // file is too big if(data.DataDescriptor.UncompressedSize > gamepak_ram_buffer_size) { write_tmp_flag = YES; // テンポラリを使用するフラグをONに FILE_OPEN(tmp_fd, ZIP_TMP, WRITE); } else write_tmp_flag = NO; if(!strncasecmp(ext, "bin", 3) || !strncasecmp(ext, "gba", 3)) { buffer = gamepak_rom; // ok, found switch(data.CompressionMethod) { case 0: //無圧縮 retval = data.DataDescriptor.UncompressedSize; FILE_READ(fd, buffer, retval); goto outcode; case 8: //圧縮 { z_stream stream = {0}; s32 err; /* * z.next_in = 入力ポインタ; * z.avail_in = 入力データの残量; * z.next_out = 出力ポインタ; * z.avail_out = 出力バッファの残量; */ stream.next_in = (Bytef*)cbuffer; stream.avail_in = (u32)zip_buffer_size; stream.next_out = (Bytef*)buffer; if(write_tmp_flag == NO) { stream.avail_out = data.DataDescriptor.UncompressedSize; retval = (u32)data.DataDescriptor.UncompressedSize; } else { stream.avail_out = gamepak_ram_buffer_size; retval = -2; } stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; stream.opaque = (voidpf)0; err = inflateInit2(&stream, -MAX_WBITS); FILE_READ(fd, cbuffer, zip_buffer_size); sceKernelDcacheWritebackAll(); if(err == Z_OK) { while(err != Z_STREAM_END) { err = inflate(&stream, Z_SYNC_FLUSH); if(err == Z_BUF_ERROR) { stream.avail_in = (u32)zip_buffer_size; stream.next_in = (Bytef*)cbuffer; FILE_READ(fd, cbuffer, zip_buffer_size); sceKernelDcacheWritebackAll(); } if((write_tmp_flag == YES) && (stream.avail_out == 0)) /* 出力バッファが尽きれば */ { FILE_WRITE(tmp_fd, buffer, gamepak_ram_buffer_size); stream.next_out = buffer; /* 出力ポインタを元に戻す */ stream.avail_out = gamepak_ram_buffer_size; /* 出力バッファ残量を元に戻す */ } } if((write_tmp_flag == YES) && ((gamepak_ram_buffer_size - stream.avail_out) != 0)) FILE_WRITE(tmp_fd, buffer, gamepak_ram_buffer_size - stream.avail_out); err = Z_OK; inflateEnd(&stream); } goto outcode; } } } } outcode: FILE_CLOSE(fd); if(write_tmp_flag == YES) FILE_CLOSE(tmp_fd); if(use_vram == NO) free(cbuffer); chdir(main_path); return retval; }
int main() { int ulRet = 0; char data_value[2048] = {0}; int data_len = 2048; char szDBPath [1024] = {0}; int i = 0; int j = 0; unsigned char dataKey[16]; unsigned char keyIV[10]; unsigned char input[48] ; unsigned char output[33]; unsigned char output1[33]; unsigned int outputlen = 1024, outputlen1 = 1024; int keyPairCnt = 0; //for (i = 0; i < 16;i++) //{ // dataKey[i] = i; //} //for (i = 0; i < 10;i++) //{ // keyIV[i] = i; //} //funcddd((unsigned char *)"MHgCIGujeBGA0OXGoh1WYU7LKorsgKoiHqDQMn4ih1elxxDuAiB89t9D1kA4y95TThSBSjdZTMyToc1JBMMbj+r+yi9u6AQgIuMHlcX/N7mKvOfvU6jcYEeO9E+CM34VVQSQd7T1+MMEEIBRaH9mAh7qTuOPDVIrY14=",strlen("MHgCIGujeBGA0OXGoh1WYU7LKorsgKoiHqDQMn4ih1elxxDuAiB89t9D1kA4y95TThSBSjdZTMyToc1JBMMbj+r+yi9u6AQgIuMHlcX/N7mKvOfvU6jcYEeO9E+CM34VVQSQd7T1+MMEEIBRaH9mAh7qTuOPDVIrY14=")); //funcddd(0,1); strcpy((char *)input, "work hard"); //cryptoWithSeckey(dataKey,sizeof(dataKey), // keyIV,sizeof(keyIV), // 0x00001082,0, // input,48, // output,&outputlen); //outputlen = 1024; //cryptoWithSeckey(dataKey,sizeof(dataKey), // keyIV,sizeof(keyIV), // 0x00001082,1, // output,48, // output1,&outputlen1); setLicense("1","1"); setSystemDBDir("d:/nss_db"); for(i; i < 1000000; i++) { sprintf(szDBPath, "%s%d/", "d:/nss_db/", i); if( _mkdir(szDBPath) == 0 ) { if (0 == i % 1) { printf("mkdir %s OK\n", szDBPath); } } else { printf("mkdir %s ERR\n", szDBPath); } setSystemDBDir(szDBPath); ulRet = verifyPIN("","12345678", 0); //{ // int certCnt; // char nickname[255] = {0}; // char buffer[1024*4]; // ulRet = filterCert(&certCnt,"","","",0,0); // getCertNickName(nickname, 0); // ulRet = filterCert(&certCnt,"","","",0,0); // ulRet = encryptMessage(buffer, "abc","SM3",1); // ulRet = decryptMessage(buffer, buffer,"SM3",1); // ulRet = signMessage(buffer, "abc",0,"SM3",0); // ulRet = verifyMessage("abc",buffer,0,"SM3",0); // certCnt = 1; //} //ulRet = InitPIN("0Mozilla", "0Mozilla"); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = InitPIN("0Mozilla", "0Mozilla"); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); //ulRet = verifyPIN("","0Mozilla1", 0); if (0 == ulRet) { } else if (3 != ulRet) { printf("%s err\n", "verifyPIN"); break; } else { #if defined(PKCS11_USE_SO_PIN) ulRet = SetPIN("","12345678",0); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = InitPIN("12345678", "12345678"); if (ulRet) { printf("%s err\n", "InitPIN"); break; } #else ulRet = changePIN("", "", "0Mozilla"); if (ulRet) { printf("%s err\n", "InitPIN"); break; } #endif } for( j = 0; j < 1; j++) { // 0 ulRet = verifyPIN("","12345678", 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } //test_process("0Mozilla", 1); { char * tt = "MIIB0zCCAXigAwIBAgICNTUwCgYIKoEcz1UBg3UwEzERMA8GA1UEAx4Ilj9lr4SCgqwwHhcNMTYwNjIwMTA0NzE0WhcNMTYwNzEwMTA0NzE0WjBSMQ4wDAYDVQQKEwV0cnVzdDEOMAwGA1UECxMFdHJ1c3QxHzAdBgkqhkiG9w0BCQEWEDI0NDU0MDQ5OUBxcS5jb20xDzANBgNVBAMMBsDux7/HvzBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABKfvhpW55Z/E4DIA+sUof7EeVUkZJuI5DDSrdG4Zf7LaCDEzBb8CJ0Gvlls0OxkoPGIS4ECKMrBpodjjcX7HWyijfTB7MA8GA1UdEwEB/wQFMAMCAQEwHQYDVR0OBBYEFJ0dh7sd1NP3L0/mVZLC1687ww6tMDwGA1UdIwQ1MDOAFPWFFozl/60F0a0Vw5b/98Fz4bTToRekFTATMREwDwYDVQQDHgiWP2WvhIKCrIICRkYwCwYDVR0PBAQDAgbAMAoGCCqBHM9VAYN1A0kAMEYCIQCmJIXfnVUYW2WdP1SwZeeUAVXDnORKoppe1dBudKTaOAIhAIbeAZ+ndEPRAr6hQDhjYIAz4gnFPM28DOP/gxUTPgk0"; int certCnt; char nickname[255] = {0}; char * filepw = "12345678"; char * filename = "sm2.pfx"; char buffer[1024*4]; char pfxBuffer[1024*4]; int pfxBufferLen = 1024*4; FILE_READ("","SN-100000100000004.pfx",pfxBuffer,&pfxBufferLen); //importCert(0,tt); //ulRet = filterCert(&certCnt,"","","",0,0); ulRet = filterCert(&certCnt,"","","",0,0); getCertNickName(nickname, 0); //ulRet = FilePfxExport_main(pfxBuffer,&pfxBufferLen,filepw,nickname,NULL); //FILE_WRITE("","ppk.pfx",pfxBuffer,pfxBufferLen); ulRet = FilePfxImport_main(pfxBuffer, pfxBufferLen,filepw,nickname,NULL); ulRet = filterCert(&certCnt,"","","",0,0); ulRet = encryptMessage(buffer, "abc","SM3",1); ulRet = decryptMessage(buffer, buffer,"SM3",1); ulRet = signMessage(buffer, "abc",0,"SM3",0); ulRet = verifyMessage("abc",buffer,0,"SM3",0); certCnt = 1; } return 0; ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } #if defined(PKCS11_USE_SO_PIN) // 1 ulRet = SetPIN("0Mozilla",szDBPath,0); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = verifyPIN("","0Mozilla", 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 2048, "RSA"); if (ulRet) { printf("%s err\n", "genCSR"); break; } //2 ulRet = SetPIN("0Mozilla",szDBPath,1); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = verifyPIN("",szDBPath, 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } //3 ulRet = SetPIN(szDBPath, "0Mozilla",0); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = verifyPIN("",szDBPath, 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } //4 ulRet = InitPIN("0Mozilla","0Mozilla"); if (ulRet) { printf("%s err\n", "InitPIN"); break; } ulRet = verifyPIN("","0Mozilla", 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } #else ulRet = SetPIN("0Mozilla","test",1); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = verifyPIN("","test", 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } ulRet = changePIN("", "test","0Mozilla"); if (ulRet) { printf("%s err\n", "SetPIN"); break; } ulRet = verifyPIN("","0Mozilla", 0); if (ulRet) { printf("%s err\n", "verifyPIN"); break; } ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); if (ulRet) { printf("%s err\n", "genCSR"); break; } #endif printf("current j = %d\n" , j); } //ulRet = genCSR( data_value, "", "李强强", "*****@*****.**", "trust", "trust", 256, "SM2"); //ulRet = enumKeyPair(&keyPairCnt); //{ // char * digital = "MHgCIF1PHwjtpIM8tOnxvBwVXVt6xJoyAgBZqb7H4wE0SN9RAiDsiL8W8TLVmslY57rUC50tGQbq3uHIMVBy6++MrWyo0AQg/UR08eazuJPhNDfIkN3g5O18iqj1J6ekoA9pdekv0/wEEKOO0iOf0QpP7lTgnVtV0/o="; // char * iv = "hqF+O1JTu1xnOHKZsrpMmA=="; // char * key = "nGameazgInZiRHBycWzXfkH3FtzSM8FVDTn4MVRjAh+TikzDtd1K4FkPzghs58zh"; // importDEPrivateKey(0,digital,0x00001082,iv,key); //} { //char * tt = "MIICAjCCAaigAwIBAgIBATAKBggqgRzPVQGDdTArMQ0wCwYDVQQDEwRyb290MRowGAYJKoZIhvcNAQkBFgtyb290QGNhLmNvbTAeFw0xNTExMTMwNjEyMDJaFw0xNjAxMDcwNjEyMDJaMFIxDjAMBgNVBAoTBXRydXN0MQ4wDAYDVQQLEwV0cnVzdDEfMB0GCSqGSIb3DQEJARYQMjQ0NTQwNDk5QHFxLmNvbTEPMA0GA1UEAwwGwO7Hv8e/MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEzx3tRmgaUr0d0Q9NcoZQ26Srn/g3TyooA20MSiDRKgOm9HnYp4bkYbvOQki25vz5hdUV+KAR/BrLgW8474zIeqOBlTCBkjAPBgNVHRMBAf8EBTADAgEBMB0GA1UdDgQWBBSe2mE9d+LGYPimZ7Dstz5LgW6i/DBTBgNVHSMETDBKgBRT9Im/OTjF4gLZpb1RTRwYg9RhVaEvpC0wKzENMAsGA1UEAxMEcm9vdDEaMBgGCSqGSIb3DQEJARYLcm9vdEBjYS5jb22CAQEwCwYDVR0PBAQDAgbAMAoGCCqBHM9VAYN1A0gAMEUCIEaMK0VHMuWoUQZsYF8I8/J0CUEIA8zlHmLoFY5e6MFlAiEAotRlzDuUDk/b0mqjEBTagZMJxbuUToHgvFbKnAht6Xc="; //int certCnt; //char buffer[10000]; //importCert(0,tt); //ulRet = filterCert(&certCnt,"","","",0,0); //ulRet = signMessage(buffer, "abc",0,"SM3",1); //ulRet = verifyMessage("abc",buffer,0,"SM3",1); //certCnt = 1; } { //unsigned char datakey[32] = {0xC2,0x17,0x51,0x1E,0x23,0x5A,0x2A,0xCE,0x72,0x15,0xCF,0x7F,0xE6,0x26,0x7D,0xD1,0xBB,0x1C,0x57,0x21,0x4A,0xC9,0x8A,0xFF,0x34,0x68,0x02,0xEC,0x28,0x68,0xDC,0xF3}; //ulRet = importSM2PrivateKey(datakey, 32); } if (0 == i%1) { unsigned char in_value[32] = {0}; unsigned int in_len = 32; unsigned int out_len = 256; unsigned char out_value[256] = {0}; int certID = 0; char nickname[100] = {0}; memcpy(in_value,"112233445566", 12); ulRet = enumKeyPair(&keyPairCnt); if (ulRet) { printf("%s err\n", "enumKeyPair"); break; } ulRet = cryptoWithKeyPairID(0,0,in_value, in_len,out_value,&out_len); if (ulRet) { printf("%s err\n", "cryptoWithKeyPairID"); break; } memset(in_value, 0, in_len); in_len *= 2; ulRet = cryptoWithKeyPairID(0,1,out_value, out_len,in_value,&in_len); if (ulRet) { printf("%s err\n", "cryptoWithKeyPairID"); break; } ulRet = sgnvfyMsgWithKeyPairID(0,0,320, in_value, in_len,out_value,&out_len); if (ulRet) { printf("%s err\n", "sgnvfyMsgWithKeyPairID"); break; } ulRet = sgnvfyMsgWithKeyPairID(0,1,320,in_value, in_len,out_value,&out_len); FILE_LOG_HEX("cc.txt",out_value,(unsigned long)out_len); if (ulRet) { printf("%s err\n", "sgnvfyMsgWithKeyPairID"); break; } printf("%s %d\n", "enumKeyPair", keyPairCnt); } } printf("number %d is ok\n",i); printf("input any key to close\n",i); getchar(); return 0; }
long fex_read_avail ( File_Extractor* fe, void* out, long count ) { return FILE_READ( out, count, fe->file ); }
void CommonToolsDlgSM2Point::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 // CDialogEx::OnOK(); char data_value_xy[BUFFER_LEN_1K * 4] = {0}; char data_value_tmp[BUFFER_LEN_1K * 4] = {0}; char file_xy[BUFFER_LEN_1K * 4] = {0}; unsigned int data_len_xy = BUFFER_LEN_1K * 4; unsigned int data_len_tmp = BUFFER_LEN_1K * 4; OpenSSL_Initialize(); switch(m_iSelXY) { case E_INPUT_TYPE_FILE: { editXY.GetWindowText(file_xy,BUFFER_LEN_1K * 4); FILE_READ("",file_xy,(unsigned char *)data_value_xy,&data_len_xy); } break; default: { editXY.GetWindowText(data_value_tmp,BUFFER_LEN_1K * 4); data_len_tmp = strlen(data_value_tmp); OPF_Str2Bin(data_value_tmp,data_len_tmp, (unsigned char *)data_value_xy,&data_len_xy); } break; } if(g_KeyAlgType == E_KEY_ALG_ECC_512) { unsigned int ulRet = -1; if(data_len_xy == 2* GM_ECC_512_BYTES_LEN) { ulRet = OpenSSL_GMECC512Point((unsigned char *)data_value_xy,GM_ECC_512_BYTES_LEN,(unsigned char *)data_value_xy + GM_ECC_512_BYTES_LEN,GM_ECC_512_BYTES_LEN); } OpenSSL_Finalize(); if (0 == ulRet) { MessageBox("点正确!"); } else { MessageBox("点不正确!"); } } else { unsigned int ulRet = -1; if(data_len_xy == 2* SM2_BYTES_LEN) { ulRet = OpenSSL_SM2Point((unsigned char *)data_value_xy,SM2_BYTES_LEN,(unsigned char *)data_value_xy + SM2_BYTES_LEN,SM2_BYTES_LEN); } OpenSSL_Finalize(); if (0 == ulRet) { MessageBox("点正确!"); } else { MessageBox("点不正确!"); } } }