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

📄 drmpd.h

📁 瑞芯微RK2608固件源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
//	UWORD32 mem342;			// 2 WORD16		#0x240	可能没用
	SHA_CONTEXT m_shadata;	// 58 WORD16	#0x244
	UWORD32 mem4[24];		// 48 WORD16	#0x2b8	to generate mackey
//	WORD16 mem5[116];		// 116 WORD16	#0x318	好像没用
} CIPHER_CONTEXT;		// 512 WORD16 - 116 WORD16

typedef struct tag_structX_unknown3
{
	DRM_BYTE mem11;				// 1 DRM_BYTE		errorResult
//	DRM_BYTE mem12;				// 1 DRM_BYTE		可能没用
//	WORD16 mem13;			// 1 WORD16		可能没用
	LIC_Data ld;			// 32 WORD16	#0x4
	DRM_BYTE *pbPMID;			// 2 WORD16		#0x44
	LENGTH_TYPE cbPMID;			// 2 WORD16		#0x48
	UWORD32 mem5;			// 2 WORD16		#0x4c lic中无信息位数54
	UWORD32 mem6;			// 2 WORD16		#0x50 lic counter
	UWORD32 mem7;			// 2 WORD16		#0x54
	UWORD32 mem8;			// 2 WORD16		#0x58
	UWORD32 mem9;			// 2 WORD16		#0x5c
} structX_unknown3;		// 48 WORD16

typedef struct tag_structX_unknown2
{
//	WORD16 mem1[34];		// 34 WORD16	可能没用
	structX_unknown3 mem2;	// 48 WORD16
} structX_unknown2;		// 82 WORD16

typedef struct tag_struct_DRM_state
{
	DRM_BYTE m_DecryptInited;		// 1 DRM_BYTE
//	DRM_BYTE mem12;					// 1 DRM_BYTE	可能没用
//	WORD16 mem13;				// 1 WORD16	可能没用
	CIPHER_CONTEXT mem2;		// 512 WORD16	#0x4
	structX_unknown2 mem3;		// 82 WORD16	#0x404
//	DRM_BYTE* mem4;					// 2 WORD16		#0x4a8
} struct_DRM_state;

typedef struct tag_PMLICENSE
{
	UWORD32 mem1;		// 2 WORD16
	UWORD32 mem2;		// 2 WORD16
	LIC_Data ld;		// 32 WORD16 
} PMLICENSE;		// 36 WORD16

//typedef struct tagLD
//{
//	DRM_BYTE KID[32];
//	DRM_BYTE member1[9];
//	DRM_BYTE rights[4];
//	DRM_BYTE appSec[4];
//	DRM_BYTE expiryDate[4];
//	DRM_BYTE member2[11];
//} LD;
//
//typedef struct tagPMLICENSE
//{
//	DRM_BYTE member1[8];
//	LD ld;	  
//} PMLICENSE;



/*
 *     FUNCTIONS
 */
#if SIXTEEN_BIT_ADDRESSING
void F(DRM_DWORD* pl, DRM_DWORD* pr, COUNT_TYPE S, DRM_DWORD* pwork, 
	DRM_DWORD* pzork, DRM_DWORD* pTable); 
UWORD32 rotate_left(UWORD32 a, UWORD16 n);
extern void ZSP_swapWORD(UWORD16 *pdata, LENGTH_TYPE len);
void memcpyDWORD(UWORD32* pto, UWORD32* pfrom, LENGTH_TYPE len);
LENGTH_TYPE ZSP_DRM_strlen(DRM_BYTE *string);
UWORD16 ZSP_DRM_memcmp(DRM_BYTE* p1, DRM_BYTE* p2, LENGTH_TYPE len);
void ZSP_DRM_memcpy(DRM_BYTE* pto, DRM_BYTE* pfrom, LENGTH_TYPE len);
void DRM_BYT_CopyBytes( 
       OUT   void 	*f_pbTo, 
    IN       COUNT_TYPE f_ibTo, 
    IN const void 	*f_pbFrom,
    IN       COUNT_TYPE f_ibFrom,
    IN       LENGTH_TYPE f_cb );
DRM_BYTE DRM_16B_Read8BitByte(
    IN  const void	  *f_pv,
    IN        COUNT_TYPE  f_ib);
void DRM_16B_Write8BitByte(
    OUT void        *f_pv,
    IN  COUNT_TYPE        f_ib,
    IN  DRM_BYTE  		f_mb);
#endif

//// drmpd
DRM_RESULT  CDrmPD_Init__(void* pDRM_state);
DRM_RESULT  CDrmPD_InitDecrypt__( void* pDRM_state,
                            PMLICENSE* pmlic,
                            DRM_BYTE* pPMID,
                            LENGTH_TYPE cbPMID,
                            DRM_BYTE* pLicData,
                            UWORD32* pOffset,
                            UWORD32* pActual);
                           
DRM_RESULT  CDrmPD_Decrypt__ (/*void* pDRM_state, */DRM_BYTE* pbBuffer, LENGTH_TYPE cbBuffer);  
DRM_RESULT  CDrmPD_InitPacket__(void* pDRM_state, DRM_BYTE* pLast15, UWORD16 cbPayloadSize);                         

//// pdlicstr
//void    SetSecret_1of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_2of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_3of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_4of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_5of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_6of7__(struct_DRM_state* pin);
//DRM_RESULT  SetSecret_7of7__(struct_DRM_state* pin);
UWORD32 hash__(DRM_BYTE* pin);

DRM_RESULT  CPDLicStore_Init__(structX_unknown3* pin);
DRM_RESULT MatchLicense__(LIC_Data* pld, 
					DRM_BYTE* pLicData);
DRM_RESULT PMIDToPMKey__(struct_DRM_state* pDRMState,
//				   UWORD32 temp1,
				   UWORD16 temp,
				   SHA_CONTEXT* pContextSHA,
				   DRM_BYTE* pPMID,
				   LENGTH_TYPE cbPMID,
				   DRM_BYTE* pLicData,
				   DRM_BYTE* pbPMKey,
				   LENGTH_TYPE cbPMKey);
void FlipBits__(DRM_BYTE* pbIn, LENGTH_TYPE cbIn);
DRM_RESULT PMContentKeyToContentKey__(struct_DRM_state* pDRMState,
							    DRM_BYTE* pbPMKey,
							    LENGTH_TYPE cbKey,
							    DRM_BYTE* pbKey);

DRM_RESULT  CPDLicStore_Lookup__(
              				structX_unknown3* pin,
							struct_DRM_state* pDRMState,
							DRM_BYTE* pPMID,
							LENGTH_TYPE cbPMID,
							LIC_Data* pld,
							PMLICENSE* pmlic,
							DRM_BYTE* pLicData,
							UWORD32* pOffset,
							UWORD32* pActual,
							DRM_BYTE* pbKey);
//// dess
void  desSkey__(
    IN OUT DESTable      *pTable,    
    IN OUT DRM_BYTE      *p, 
    IN     DRM_UINT      c );
void desSkey_LS__(struct_DRM_state* pDRMState, 
				DESTable* pdestable, 
				DRM_BYTE* pbKey, 
				LENGTH_TYPE cbKey);
void desS__(
    DRM_BYTE*      rgbOut,//8byte 
    DRM_BYTE*      p,//可能为8byte            
    DESTable*      pTable,
    DRM_INT        op );
//// xsum
DRM_RESULT checksum2__(struct_DRM_state* pDRMState,
			     DRM_BYTE* pbPMKey,
			     LENGTH_TYPE cbPMKey,
			     DRM_BYTE* pLicData,
			     LENGTH_TYPE licDataLen,	// 实际上固定为64
			     DRM_BYTE* pbCheckSum);

//// so1
//DRM_BYTE    SO1_GetB0__(void);
//DRM_BYTE    SO1_GetB1__(void);
//DRM_BYTE    SO1_GetB2__(void);
//DRM_BYTE    SO1_GetB3__(void);
//DRM_BYTE    SO1_GetB4__(void);

//// so2
//UWORD32 SO2_BiggerAction__(UWORD32* pin);
//UWORD32 SO2_Action__(UWORD32 in);

//// so3
//COUNT_TYPE  SO3_CheapRec__(COUNT_TYPE in);
//COUNT_TYPE  SO3_ErsatzRec__(COUNT_TYPE in);


//// so4
//DRM_BYTE    SO4_Random__(UWORD32* pin);
//UWORD16 SO4_scp_rand__(UWORD32* pin);

//// soalter
//void    SOAlter_Init__(DRM_BYTE* pin);
//void    SOAlter_Init2__(DRM_BYTE* pin, DRM_BYTE a1, DRM_BYTE a2);
//DRM_BYTE    SOAlter_Alter__(DRM_BYTE* pin, DRM_BYTE a1);

//// sobuf
//void    SOBuf_Init__(DRM_BYTE** ppin);
//DRM_RESULT  SOBuf_SetByte__(DRM_BYTE** ppin, COUNT_TYPE index, DRM_BYTE val);
//DRM_RESULT  SOBuf_GetByte__(DRM_BYTE** ppin, COUNT_TYPE index, DRM_BYTE* out);


///// blackbox
//void    DRMInit__(CIPHER_CONTEXT* pin);
DRM_RESULT  DRMDecrypt__(CIPHER_CONTEXT* pin, LENGTH_TYPE cbBuffer, DRM_BYTE* pbBuffer);
DRM_RESULT  DRMInitPacket__(CIPHER_CONTEXT* pin, UWORD16 cbPayloadSize, DRM_BYTE* pLast15);
UWORD32 AllignedDWORD__(DRM_BYTE* pin);
DRM_RESULT DRMKeySetup__(CIPHER_CONTEXT* pContext, DRM_BYTE cbData, DRM_BYTE* pbData);

//// cbc64ws4
void CBC64WS4_asm__(UWORD32 *pbData,
				  LENGTH_TYPE cBlocks,
				  UWORD32 rgdwKeys[2],
				  DRM_CBCKey *pCBCKey);
//void egcd__(UWORD64 a, UWORD64 b, UWORD64* p1, UWORD64* p2, UWORD64* p3);
void CBC64Init__( DRM_CBCKey *cbckey, DRM_CBCState *cbcstate, UWORD32 *pKey );
void CBC64InvKey__( DRM_CBCKey *cbckey, DRM_CBCKey *cbcInvKey );
void   CBC64Update__( 
     IN      DRM_CBCKey *key, 
     IN  OUT DRM_CBCState *cbcstate,
     IN      LENGTH_TYPE cbData, 
     IN      DRM_BYTE *pbData );
    
UWORD32 CBC64Finalize__( DRM_CBCKey *key, DRM_CBCState *cbcstate, UWORD32 *pKey2 );
UWORD32 inv32__( UWORD32 n );
UWORD32 CBC64Invert__( DRM_CBCKey *key, DRM_CBCKey *ikey, 
                      UWORD32 MacA1,   UWORD32 MacA2,
                      UWORD32 MacB1,   UWORD32 MacB2,    UWORD32 *pInvKey2 );    
void    CBC64InitState__( DRM_CBCState *cbcstate );

//// desport
void  des__(
          DRM_BYTE  rgbOut[__CB_DECL(DES_BLOCKLEN)],
    const DRM_BYTE  rgbIn [__CB_DECL(DES_BLOCKLEN)],          
          DESTable *pTable,
          DRM_INT   op );   
            
//// deskey
void deskey__(
    OUT       DESTable *pTable,
    IN  const DRM_BYTE  rgbKey[__CB_DECL(DES_KEYSIZE)] );

//// msrc4
extern void  rc4__(
    IN OUT RC4_KEYSTRUCT *pKS,
    IN     LENGTH_TYPE       cbBuffer,
    IN OUT DRM_BYTE      	 *pbBuffer );
    
void  rc4_key__(
        OUT   RC4_KEYSTRUCT  *pKS,
    IN        LENGTH_TYPE       cbKey,
    IN  const DRM_BYTE       *pbKey );

//// sha
void  A_SHAInit__(
    IN OUT SHA_CONTEXT* pShaContext );
    
void  A_SHAUpdate__(
    IN OUT   SHA_CONTEXT *pShaContext,  
    IN const DRM_BYTE    *pbData,       
    IN       LENGTH_TYPE    cbData );

void  SHA_UpdateOffset__(
    IN const DRM_BYTE    *pbData,
    IN       COUNT_TYPE    ibData,
    IN       LENGTH_TYPE    cbData,
    IN OUT   SHA_CONTEXT *pShaContext );

static void SHATransform__(
    IN       DRM_DWORD ABCDE[5],
    IN const DRM_BYTE  bInput[__CB_DECL(SHA_BLOCK_SIZE)] );

static void _GetDRMDWORD(
    OUT      UWORD32 *dwTo,
    IN       LENGTH_TYPE  dwCount,
    IN const DRM_BYTE  *bIn );
    
void  _PackDRMDWORD(
    IN const DRM_DWORD *dwFrom,
    IN       LENGTH_TYPE  dwCount, 
    OUT      DRM_BYTE  *bOut);

static WORD32 _ft(WORD32 b, WORD32 c, WORD32 d, COUNT_TYPE t);

static UWORD32 _K(COUNT_TYPE t);

void A_SHAFinal__(
    IN  SHA_CONTEXT *pShaContext,
    OUT DRM_BYTE     rgbDigest[__CB_DECL(SHA_DIGEST_LEN)] );

       
    

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -