Example #1
0
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";
}
Example #2
0
// 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;
}
Example #3
0
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;
}
Example #4
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("点不正确!");
		}
	}

	

}