📄 cprm_test.c
字号:
BufPtr = BufPtr + length - 4;
}
else
break;
}
fclose( stream );
}
else
printf("File could not be opened\n" );
CPRM_Process_MKB(TmpBuf, &mediaKey);
printf("mediakey = %0.8x%0.8x\n",(UINT32)mediaKey,(UINT32)(mediaKey >> 32));
free(TmpBuf);
return OK_COMMAND;
}
UINT32 TstAlgorithmCmd(CommandTableStruct_T *CmdTable)
{
UINT32 Response[2];
UINT32 Buf[6];
#ifdef Debug_CPRM_Message
printf("Key = 0x5e916a, 0xef341fa3\n");
printf("Input = 0x89067f2b, 0xe2a60d6f\n");
#endif
Buf[1] = 0x89067f2b;
Buf[0] = 0xe2a60d6f;
CPRM_C2_E(0x5e916a, 0xef341fa3, Buf, 1);
#ifdef license_4C_Test
if((Buf[1] != 0x2fe75ad4) || (Buf[0] != 0xa8c1eae2))
#else
if((Buf[1] != 0x8fe65fe4) || (Buf[0] != 0xf7ba8005))
#endif
printf("CPRM_C2_E fail\n");
else
printf("CPRM_C2_E pass\n");
CPRM_C2_D(0x5e916a, 0xef341fa3, Buf, 1);
if((Buf[1] != 0x89067f2b) || (Buf[0] != 0xe2a60d6f))
printf("CPRM_C2_D fail\n");
else
printf("CPRM_C2_D pass\n");
#ifdef Debug_CPRM_Message
printf("Key = 0x7cb3c4, 0xdb094713\n");
printf("Input = 0xa24632d8, 0x24320844, 0x7d8111df, 0x8ce24172, 0x76be42d7, 0x0db14418\n");
#endif
Buf[0] = 0x24320844;
Buf[1] = 0xa24632d8;
Buf[2] = 0x8ce24172;
Buf[3] = 0x7d8111df;
Buf[4] = 0x0db14418;
Buf[5] = 0x76be42d7;
CPRM_C2_ECBC(0x7cb3c4, 0xdb094713, Buf, 3);
#ifdef license_4C_Test
if((Buf[1] != 0x41a58620) || (Buf[0] != 0x7cd88c65) ||
(Buf[3] != 0x108d6fb9) || (Buf[2] != 0xeae7c9c7) ||
(Buf[5] != 0x87e87358) || (Buf[4] != 0x9e2135e8))
#else
if((Buf[1] != 0x50fc09d1) || (Buf[0] != 0x691c5102) ||
(Buf[3] != 0x541d322f) || (Buf[2] != 0x68e7fd79) ||
(Buf[5] != 0x91a80c3d) || (Buf[4] != 0x9d9f310d))
#endif
printf("CPRM_C2_ECBC fail\n");
else
printf("CPRM_C2_ECBC pass\n");
CPRM_C2_DCBC(0x7cb3c4, 0xdb094713, Buf, 3);
#ifdef Debug_CPRM_Message
printf("CPRM_C2_DCBC = %0.8x %0.8x\n", Buf[1], Buf[0]);
printf("CPRM_C2_DCBC = %0.8x %0.8x\n", Buf[3], Buf[2]);
printf("CPRM_C2_DCBC = %0.8x %0.8x\n", Buf[5], Buf[4]);
#endif
if((Buf[1] != 0xa24632d8) || (Buf[0] != 0x24320844) ||
(Buf[3] != 0x7d8111df) || (Buf[2] != 0x8ce24172) ||
(Buf[5] != 0x76be42d7) || (Buf[4] != 0x0db14418))
printf("CPRM_C2_DCBC fail\n");
else
printf("CPRM_C2_DCBC pass\n");
CPRM_C2_G(0xc61f84, 0x36cc3ce5, 0x16e0b4c4, 0x5dfeeae7, Response);
#ifdef license_4C_Test
if((Response[1] != 0x22b567e5) || (Response[0] != 0xccaa3179))
#else
if((Response[1] != 0x33a48465) || (Response[0] != 0xbadd8256))
#endif
printf("CPRM_C2_G fail\n");
else
printf("CPRM_C2_G pass\n");
return OK_COMMAND;
}
UINT32 EncryptFileCmd(CommandTableStruct_T *CmdTable)
{
FILE *src;
UINT32 *Buf,file_length = 0, tmp_length;
UINT32 dsc;
UINT32 ReadSize;
#ifdef license_4C_Test
#ifndef AUTO_CBC_DMAmode
//Deal With Protect Area File
if(!fLib_WriteTKMG(&fLib_ProtectAreaCard, &fLib_CPRMAudio))
{
printf("Can not found SD CPRM Protected Area!!!\n");
return FALSE;
}
#endif
#endif
//Deal With User Area File
if ((dsc = fLib_OpenFile(CmdTable->Argu[0].Str, 4, 0)) == NULL)
{
printf("Can not open file %s\n", CmdTable->Argu[0].Str);
return FALSE;
}
//Assign data into buffer, only for demo
//////////////////////////////////////////////////////
if ((src = fopen("c:\\FREAD.TXT", "rb")) == NULL)
{
printf("Can not open c:\\FREAD.TXT\n");
fclose(dsc);
return FALSE;
}
Buf = malloc(10240);
while((ReadSize = fread(Buf, 1, 10240, src)) > 0)
file_length += ReadSize;
free(Buf);
fclose(src);
src = fopen("c:\\FREAD.TXT", "rb");
Buf = malloc(file_length);
fread(Buf, 1, file_length, src);
if((file_length % 64) != 0)
tmp_length = file_length - (file_length % 64);
else
tmp_length = file_length;
//////////////////////////////////////////////////////
#ifdef AUTO_CBC_DMAmode
*(&fLib_SDCard.AUTO_CBC) = TRUE;
if(fLib_WriteCPRMFile(dsc, Buf, file_length, fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0]) != 0)
{
printf("Can not write file %s to Card\n", CmdTable->Argu[0].Str);
*(&fLib_SDCard.AUTO_CBC) = FALSE;
free(Buf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
*(&fLib_SDCard.AUTO_CBC) = FALSE;
#else
#ifdef AUTO_CBC_PIOmode
*(&fLib_SDCard.AUTO_CBC) = TRUE;
if(fLib_WriteCPRMFile(dsc, Buf, file_length, fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0]) != 0)
{
printf("Can not write file %s to Card\n", CmdTable->Argu[0].Str);
*(&fLib_SDCard.AUTO_CBC) = FALSE;
free(Buf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
*(&fLib_SDCard.AUTO_CBC) = FALSE;
#else
//64 bit = 8 byte one time
if(!CPRM_C2_ECBC(fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0], Buf, tmp_length / 8))
{
printf("CPRM_C2_ECBC fail\n");
free(Buf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
if(fLib_WriteFile(dsc, Buf, file_length) != 0)
{
printf("Can not write file %s to Card\n", CmdTable->Argu[0].Str);
free(Buf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
#endif
#endif
free(Buf);
fclose(src);
fLib_CloseFile(dsc);
return TRUE;
}
UINT32 DecryptFileCmd(CommandTableStruct_T *CmdTable)
{
FILE *src;
UINT32 *Buf,*DescryptBuf,i,file_length = 0;
UINT32 dsc;
BOOL flag = TRUE;
//Deal With User Area File
if ((dsc = fLib_OpenFile(CmdTable->Argu[0].Str, 0, 0)) == NULL)
{
printf("Can not open file %s\n", CmdTable->Argu[0].Str);
return FALSE;
}
file_length = fLib_FileLen(dsc);
DescryptBuf = malloc(file_length);
//Assign data into buffer, only for demo
//////////////////////////////////////////////////////
if ((src = fopen("c:\\FREAD.TXT", "rb")) == NULL)
{
printf("Can not open file c:\\FREAD.TXT\n");
free(DescryptBuf);
fLib_CloseFile(dsc);
return FALSE;
}
Buf = malloc(file_length);
fread(Buf, 1, file_length, src);
//////////////////////////////////////////////////////
if((file_length % 64) != 0)
file_length = file_length - (file_length % 64);
#ifdef AUTO_CBC_DMAmode
*(&fLib_SDCard.AUTO_CBC) = TRUE;
if(fLib_ReadCPRMFile(dsc, DescryptBuf, file_length, fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0]) != 0)
{
printf("Can not Read file %s\n", CmdTable->Argu[0].Str);
*(&fLib_SDCard.AUTO_CBC) = FALSE;
free(Buf);
free(DescryptBuf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
*(&fLib_SDCard.AUTO_CBC) = FALSE;
#else
#ifdef AUTO_CBC_PIOmode
*(&fLib_SDCard.AUTO_CBC) = TRUE;
if(fLib_ReadCPRMFile(dsc, DescryptBuf, file_length, fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0]) != 0)
{
printf("Can not Read file %s\n", CmdTable->Argu[0].Str);
*(&fLib_SDCard.AUTO_CBC) = FALSE;
free(Buf);
free(DescryptBuf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
*(&fLib_SDCard.AUTO_CBC) = FALSE;
#else
if(fLib_ReadFile(dsc, DescryptBuf, file_length) != 0)
{
printf("Can not Read file %s\n", CmdTable->Argu[0].Str);
free(Buf);
free(DescryptBuf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
//64 bit = 8 byte one time
if(!CPRM_C2_DCBC(fLib_CPRMAudio.TKMG.EKEY_H[0], fLib_CPRMAudio.TKMG.EKEY_L[0], DescryptBuf, file_length / 8))
{
printf("CPRM_C2_DCBC fail\n");
free(Buf);
free(DescryptBuf);
fclose(src);
fLib_CloseFile(dsc);
return FALSE;
}
#endif
#endif
//Assign data into buffer, only for demo
//////////////////////////////////////////////////////
for (i = 0; i < file_length / 4; i++)
{
if(*(Buf + i) != *(DescryptBuf + i))
{
printf("Compare Fail!, Addr = %0.3x, C = %0.8x, F = %0.8x\n",i*4,*(Buf + i),*(DescryptBuf + i));
flag = FALSE;
break;
}
}
if (flag)
printf("Compare Pass\n");
else
printf("Compare Fail\n");
//////////////////////////////////////////////////////
free(Buf);
free(DescryptBuf);
fclose(src);
fLib_CloseFile(dsc);
return TRUE;
}
UINT32 TstPLMCmd(CommandTableStruct_T *CmdTable)
{
UINT32 *DescryptBuf,file_length = 0;
UINT32 dsc;
if((dsc = fLib_OpenFile( "c:\\SD_AUDIO\\SD_AUDIO.PLM", 0, 0)) != NULL )
{
file_length = fLib_FileLen(dsc);
DescryptBuf = malloc(file_length);
if(fLib_ReadFile(dsc, DescryptBuf, file_length) != 0)
{
printf("Can not Read file c:\\SD_AUDIO\\SD_AUDIO.PLM\n");
free(DescryptBuf);
fLib_CloseFile(dsc);
return FALSE;
}
}
else
{
printf("File c:\\SD_AUDIO\\SD_AUDIO.PLM not be found\n");
return FALSE;
}
if(!SD_PLMGParse(&fLib_CPRMAudio, DescryptBuf, file_length))
{
free(DescryptBuf);
return FALSE;
}
free(DescryptBuf);
return OK_COMMAND;
}
UINT32 TstTKMCmd(CommandTableStruct_T *CmdTable)
{
UINT32 *DescryptBuf,file_length = 0;
UINT32 dsc;
if((dsc = fLib_OpenFile( "c:\\SD_AUDIO\\SD_AUDIO.TKM", 0, 0)) != NULL )
{
file_length = fLib_FileLen(dsc);
DescryptBuf = malloc(file_length);
if(fLib_ReadFile(dsc, DescryptBuf, file_length) != 0)
{
printf("Can not Read file c:\\SD_AUDIO\\SD_AUDIO.TKM\n");
free(DescryptBuf);
fLib_CloseFile(dsc);
return FALSE;
}
}
else
{
printf("File c:\\SD_AUDIO\\SD_AUDIO.TKM not be found\n");
return FALSE;
}
if(!SD_TrackMGParse(&fLib_CPRMAudio, DescryptBuf, file_length))
{
free(DescryptBuf);
return FALSE;
}
free(DescryptBuf);
return OK_COMMAND;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -