?? drmlocal.c
字號(hào):
/*
// $Header: /I76/I76_Common/I76_Reference/Playcore/Nav_Clips/AviDrm/libDrmDecrypt/DrmLocal.c 3 2/15/04 7:41p Lotan $
// Copyright (c) DivXNetworks, Inc. http://www.divxnetworks.com
// All rights reserved.
//
// This software is the confidential and proprietary information of DivXNetworks
// Inc. ("Confidential Information"). You shall not disclose such Confidential
// Information and shall use it only in accordance with the terms of the license
// agreement you entered into with DivXNetworks, Inc.
*/
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmLocal.h"
#include "Playcore\PS\PS.h"
#include "Services\Memory\malloc.h"
#include "Include\cpu_address.h"
#ifdef AVI_DRM_SUPPORT
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmErrors.h"
#include "eeprom.h"
//#include <stdio.h> /* io */
#include <string.h> /* strcmp */
#include "Playcore\Timing\Timing.h" /* clock */
#include "Services\Include\_heap.h"
#include "dvp_api.h"
#define CLOCKS_PER_SEC 67000UL
BYTE far drmKeyFinal[32];
/*
char drmLocalFileName[256] = "";
*/
//char *drmLocalFileName;
void init_DrmLocalKey(void)
{
UINT16 i,prev,after;
UINT16 *pRomBuffer,*pRomBufferAfterXor,*pRomBufferAfterOr;
pRomBuffer=(UINT16*)MEM_Allocate(SC_POOL, 16*2);
pRomBufferAfterXor=(UINT16*)MEM_Allocate(SC_POOL,16*2);
pRomBufferAfterOr=(UINT16*)MEM_Allocate(SC_POOL,16*2);
for(i=0;i<16;i++)
{
pRomBuffer[i] = DVP_DRRead(0x282+i);
}
for(i=0;i<16;i++)
{
if(i==0)
prev=pRomBuffer[15];
else
prev=pRomBuffer[i-1];
if(i==16)
after=pRomBuffer[0];
else
after=pRomBuffer[i+1];
pRomBufferAfterXor[i]=prev^pRomBuffer[i]^after;
}
for(i=0;i<16;i++)
{
if(i==0)
prev=pRomBufferAfterXor[15];
else
prev=pRomBufferAfterXor[i-1];
if(i==16)
after=pRomBufferAfterXor[0];
else
after=pRomBufferAfterXor[i+1];
pRomBufferAfterOr[i]=(prev<<7)|(after>>7);
pRomBufferAfterOr[i]=pRomBufferAfterXor[i]&pRomBufferAfterOr[i];
if(i%2==0)
{
pRomBufferAfterOr[i]=pRomBufferAfterOr[i]>>1;
}
else
{
pRomBufferAfterOr[i]=pRomBufferAfterOr[i]<<1;
}
drmKeyFinal[2*i+1]=pRomBufferAfterOr[i]&0xff;
drmKeyFinal[2*i]=pRomBufferAfterOr[i]>>8;
}
MEM_Free(SC_POOL, pRomBuffer);
MEM_Free(SC_POOL, pRomBufferAfterXor);
MEM_Free(SC_POOL, pRomBufferAfterOr);
}
static uint8_t localTicker = 1;
UINT8 localGetRapidUpdater(void)
{
uint8_t result = 0;
result = (uint8_t) (timing_get_clock() & 0x000000FF); /* REPLACE_WITH_PLATFORM_DEPENDANT_IMPLEMENTATION if PE_Clips_GetClock() does not update fast enough. */
result += localTicker;
localTicker++;
return result;
}
void localWaitSecond(void)
{
uint32_t tick = timing_get_clock();//PE_Clips_GetClock();
uint32_t expire = tick + CLOCKS_PER_SEC;
while (tick < expire)
{
tick = timing_get_clock();
}
}
uint8_t localLoadDrmMemory(DrmMemory *memory)
{
DrmPackedMemory memoryPacked;
BOOL returnCode = TRUE;
PS_LoadDrmMemory((unsigned char *)&memoryPacked,sizeof(DrmPackedMemory));
if (returnCode == TRUE)
{
returnCode = unpackDrmMemory(memoryPacked, memory);
}
return returnCode;
}
uint8_t localSaveDrmMemory(DrmMemory *memory)
{
DrmPackedMemory memoryPacked;
BOOL returnCode = TRUE;
packDrmMemory(*memory, &memoryPacked);
PS_SaveDrmMemory((unsigned char *)&memoryPacked,sizeof(DrmPackedMemory));
if (returnCode == TRUE)
{
returnCode = unpackDrmMemory(memoryPacked, memory);
}
return returnCode;
}
uint8_t localGetHardwareKey(uint8_t *hardwareKey)
{
memcpy(hardwareKey, drmKeyFinal, 32);
return DRM_ERROR_NONE;
}
#endif // AVI_DRM_SUPPORT
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -