⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cprm_test.c

📁 FIC8120方案的 StartCell_Driver
💻 C
📖 第 1 页 / 共 2 页
字号:
					
				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 + -