亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? drmadpapi.c

?? ZORAN 962/966 SOURCE CODE,DVD chip
?? C
字號:
/*
// $Header: /I76/I76_Common/I76_Reference/Playcore/Nav_Clips/AviDrm/libDrmDecrypt/DrmAdpApi.c 5     3/10/04 8:40p 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 "Config.h"		// Global Configuration - do not remove!

#ifdef AVI_DRM_SUPPORT
#include "Services\Memory\malloc.h" // when using far malloc we should add this include 
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmAdpApi.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmAdpHelper.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\Bits.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmAdpModelId.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmTypeDefs.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmTypes.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmMessage.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmLocal.h"
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmMemory.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmSizes.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmErrors.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\base64.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\crypt_util.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmTypeDefs.h"
#include "Playcore\AuxCache\AuxCache.h"
#include "Services\Include\_heap.h"
// <<< Robin_0915_2004
#ifndef AVI_DRM_OPTIMIZATION
#ifdef USE_ONE_MASTER_KEY
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\master_key_one.h"
#else
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\master_key_all.h"
#endif
#endif
// >>> Robin_0915_2004
#include <string.h>
//#include <memory.h>


#ifdef AVI_MALLOC_SIZE_DOWN
//#ifdef NEW_SC_KEYS
extern BYTE* far g_ScAviDrm_KeysOffset;
#endif

void drmSetRandomSample(void)
{
	drmHelperSetRandomSample();
}

uint32_t drmGetRandomSampleCounter(void)
{
	return drmHelperGetRandomSampleCounter();
}


uint8_t drmGetRegistrationCodeString(char *registrationCodeString)
{
    uint8_t returnCode = DRM_ERROR_NONE;
    DrmMemory memory;
    DrmMessagePacked messagePacked;
    RegistrationRequest request;
    memset(&messagePacked,0,sizeof(DrmMessagePacked));
    memset((void*)&messagePacked,0,sizeof(DrmMessagePacked));
    memset((void*)&memory,0,sizeof(DrmMemory));

    returnCode = loadDrmMemory(&memory);
    
    if (returnCode == DRM_ERROR_NONE)
    {
       tr_printf(("drmGetRegistrationCodeString:: set data.\n"));
        /* Set data. */
       tr_printf(("Last memory owner guard: %02x%02x%02x\n",((BYTE*)memory.owner.guard)[0],((BYTE*)memory.owner.guard)[1],((BYTE*)memory.owner.guard)[2]));
		if (0 == memcmp(memory.owner.guard, nullGuard, OWNER_GUARD_BYTES))
		{
        uint16_t   uiIndex = 0,uiIndexMax;

			srand(uiIndex);

			drmSetRandomSample();
			
			uiIndexMax = rand() % 10000;
			tr_printf(("first loop %d\n",uiIndexMax ));
			for (uiIndex=0; uiIndex< uiIndexMax ; uiIndex++)
				;//random delay
			drmSetRandomSample();
			uiIndexMax = rand() % 10000;
			for (uiIndex=0; uiIndex< uiIndexMax ; uiIndex++)
				;//random delay
			drmSetRandomSample();
			
			returnCode = randomizeGuard(&memory);
         tr_printf(("randomizeGuard %s\n",(returnCode)?"ERROR":"OK"));

			if (returnCode == DRM_ERROR_NEED_MORE_RANDOM_SAMPLE)
			{
            tr_printf(("Error: DRM_ERROR_NEED_MORE_RANDOM_SAMPLE\n"));
				return returnCode;
			}
			returnCode = saveDrmMemory(&memory);

         tr_printf(("saveDrmMemory %s\n",(returnCode)?"ERROR":"OK"));

		}
      else{
		  tr_printf(("USING OLD MEMORY OWNER GUARD (OK)\n"));}
		//drmGetModelId(request.modelId);
        request.modelId[0] = MODEL_ID_LOW_BYTE;
        request.modelId[1] = MODEL_ID_TOP_BYTE;
        memcpy(request.userIdGuard, memory.owner.guard, OWNER_GUARD_BYTES);
    
        /* Pack, wrap, and convert for human display. */
        packRegistrationRequest(request, &messagePacked);
        wrapSecureMessage(&messagePacked);
		  base32Encode40Bits(messagePacked.message, registrationCodeString);
    }
    else
    {
       tr_printf(("loadDrmMemory failed. status:%d\n",returnCode));
    }
    
    tr_printf(("drmGetRegistrationCodeString %s\n",(returnCode)?"ERROR":"OK"));
    
    return returnCode;
}


uint8_t drmInitPlaybackContext( uint8_t *drmContext )
{
	char portableMasterKey[DRM_PORTABLE_KEY_LENGTH];
	int masterKeySize;
	int i=0;
	keyInstance masterKeyInstance;
	int decryptedBlockSize = 0;
	uint8_t *to;
//	uint8_t *from;
	cipherInstance cipher;
	DrmHeader* drmHeader ;//= {0};
	DrmPlaybackContext *context = (DrmPlaybackContext *) drmContext; //it is the same pointer
	int result = 0;
   	char masterKey[33];
	uint8_t hardwareSecret[MASTER_KEY_SIZE_BYTES];

	// Put in to memory structure.
	//memcpy(&drmHeader, drmHeaderInfo, sizeof(DrmHeader));
   drmHeader = (DrmHeader*)drmContext;

	// Get master key.
	if(!get_master_key_from_id((unsigned char *)drmHeader->masterKeyId, (unsigned char *)portableMasterKey))
	{
		return 1;
	}

	base64Decode(portableMasterKey, DRM_PORTABLE_KEY_LENGTH, (unsigned int *)&masterKeySize, masterKey);
	if(masterKeySize != MASTER_KEY_SIZE_BYTES)
	{
		return 1;
	}

	// Handle locally protected master keys.
	result = localGetHardwareKey(hardwareSecret);
	if (DRM_ERROR_NONE == result)
	{
		result = getLocalizedMasterKey((unsigned char *)masterKey);
		if (DRM_ERROR_NONE != result)
		{
			return result;
		}
	}

	cipherInit(&cipher, MODE_ECB, NULL);
	crypt_util_make_key((unsigned char *)masterKey, DIR_DECRYPT, &masterKeyInstance, MASTER_KEY_SIZE_BYTES);

	to   = (uint8_t *) MEM_Allocate(SC_POOL, sizeof(DrmAdpTargetHeader));
	//from = (uint8_t *) malloc(sizeof(DrmAdpTargetHeader));

	//memcpy(from, &drmHeader->adpTarget, sizeof(DrmAdpTargetHeader));

	crypt_util_decrypt(&cipher, &masterKeyInstance, (unsigned char *)&drmHeader->adpTarget, sizeof(DrmAdpTargetHeader), to, &decryptedBlockSize);

	if(decryptedBlockSize != sizeof(DrmAdpTargetHeader))
	{
		MEM_Free(SC_POOL, to);
		//free(from);
		return 1;
	}

	// Put in xor.
	for (i = sizeof(DrmAdpTargetHeader) - 1; i > 0; i--)
	{
		to[i] = to[i] ^ to[i-1];
	}

	memcpy(&drmHeader->adpTarget, to, sizeof(DrmAdpTargetHeader));
	//free(from);
	MEM_Free(SC_POOL, to);

	if (!(DRM_TYPE_RENTAL == drmHeader->adpTarget.drmMode ||
          DRM_TYPE_PURCHASE == drmHeader->adpTarget.drmMode ||
		  DRM_TYPE_ACTIVATION_PURCHASE == drmHeader->adpTarget.drmMode ||
		  DRM_TYPE_ACTIVATION_RENTAL == drmHeader->adpTarget.drmMode ||
		  DRM_TYPE_BASE == drmHeader->adpTarget.drmMode) )
    {
        tr_printf(("DRM_TYPE_ILLEGAL"));
        return 1;
    }

	// no need for memcpy, since context and drmInfoHeader are the same!
   // memcpy(&(context->clearHeader), &drmHeader, sizeof(DrmHeader)); 
	
	context->state = DRM_STATE_INITIALIZED;
 	return 0;
}


uint8_t drmQueryRentalStatus(uint8_t *drmContext, uint8_t *useLimit, uint8_t *useCount)
{
    uint8_t returnCode = DRM_ERROR_NONE;
	DrmMemory memory;
	uint8_t i;
	DrmPlaybackContext *context = (DrmPlaybackContext *) drmContext;
	uint16_t memorySerialNumber;
	uint16_t fileSerialNumber;

	*useLimit = 0;
	*useCount = 0;

	if (DRM_STATE_INITIALIZED != context->state)
	{
		return DRM_ERROR_NOT_INITIALIZED;
	}

	context->state = DRM_STATE_RENTAL_QUERIED;

	if (!(DRM_TYPE_RENTAL == context->clearHeader.adpTarget.drmMode ||
		  DRM_TYPE_ACTIVATION_RENTAL == context->clearHeader.adpTarget.drmMode))
	{
		return DRM_ERROR_NOT_LIMITED_RENTAL_TYPE;
	}
	if (USE_LIMIT_ID_UNLIMITED == context->clearHeader.adpTarget.rentalRecord.useLimitId)
	{
		return DRM_ERROR_NOT_LIMITED_RENTAL_TYPE;
	}

    returnCode = loadDrmMemory(&memory);
    
    if (returnCode == DRM_ERROR_NONE)
    {
		/* Check if correct user only if not activation record.. */
		if ((0 != memcmp(context->clearHeader.adpTarget.userId, memory.owner.userId, OWNER_USER_ID_BYTES)) &&
			(DRM_TYPE_RENTAL == context->clearHeader.adpTarget.drmMode ||
			 DRM_TYPE_PURCHASE == context->clearHeader.adpTarget.drmMode))
		{
			return DRM_ERROR_NOT_AUTH_USER;
		}

		/* Ensure slot number is in range. */
		if (context->clearHeader.adpTarget.rentalRecord.slotNumber >= TOTAL_PLAY_SLOTS)
		{
			return DRM_ERROR_BAD_SLOT_NUMBER;
		}

		memorySerialNumber = pack(memory.slots[context->clearHeader.adpTarget.rentalRecord.slotNumber].serialNumber[0],
								  memory.slots[context->clearHeader.adpTarget.rentalRecord.slotNumber].serialNumber[1]);
		fileSerialNumber = pack(context->clearHeader.adpTarget.rentalRecord.serialNumber[0],
								context->clearHeader.adpTarget.rentalRecord.serialNumber[1]);

		/* Check if correct serial number. Only check if it is not an activation. */
		if (!(DRM_TYPE_ACTIVATION_RENTAL == context->clearHeader.adpTarget.drmMode  &&
			  0 == memcmp(context->clearHeader.adpTarget.activateRecord.memoryGuard, memory.owner.guard, OWNER_GUARD_BYTES)) )
		{
			if (fileSerialNumber < memorySerialNumber)
			{
				return DRM_ERROR_RENTAL_EXPIRED;
			}
		}

		/* Find use limit id. */
		for (i = 0; i < USE_LIMITS; i++)
		{
			if (useLimitIdInfo[i].id == context->clearHeader.adpTarget.rentalRecord.useLimitId)
			{
				*useLimit = useLimitIdInfo[i].uses;
				break;
			}
		}

		if (fileSerialNumber == memorySerialNumber)
		{
			*useCount = memory.slots[context->clearHeader.adpTarget.rentalRecord.slotNumber].counter;
		}
		else
		{
			*useCount = 0;
		}

		/* If a first time, uses will be zero. */
		if (fileSerialNumber > memorySerialNumber)
		{
			*useCount = 0;
		}

		// when activation, *useCount reset 0, Robin_0623_2004_A
		if (DRM_TYPE_ACTIVATION_PURCHASE == context->clearHeader.adpTarget.drmMode ||DRM_TYPE_ACTIVATION_RENTAL == context->clearHeader.adpTarget.drmMode)
			if (0 == memcmp(context->clearHeader.adpTarget.activateRecord.memoryGuard, memory.owner.guard, OWNER_GUARD_BYTES))
			*useCount = 0;
		
    }

    return returnCode;
}
#ifdef AVI_MALLOC_SIZE_DOWN
uint8_t drmCommitPlayback(uint8_t *drmContext, DWORD dwClipStartAddr, DWORD pdwOffset)
#else
uint8_t drmCommitPlayback(uint8_t *drmContext)
#endif
{
	uint8_t sessionKey[KEY_SIZE_BYTES];
	uint8_t encryptedFrameKey[KEY_SIZE_BYTES];
	keyInstance sessionKeyInstance;
	int i;
	int decryptedFrameKeySize = 0;
	cipherInstance cipher;
	DrmPlaybackContext *context = (DrmPlaybackContext *) drmContext;
	uint8_t result = 0;
#ifdef AVI_MALLOC_SIZE_DOWN
    uint8_t FrameKey[KEY_SIZE_BYTES];
	UINT16 scratchPadOffset;
#endif

	if (DRM_STATE_RENTAL_QUERIED != context->state)
	{
		return DRM_ERROR_NOT_RENTAL_QUERIED;
	}

	// Try to get the session key.


   result = getSessionKey(context->clearHeader.adpTarget, sessionKey);
	if (DRM_ERROR_NONE != result)
	{
		return result;
	}

	// Populate the frame key table.
	cipherInit(&cipher, MODE_ECB, NULL);
	crypt_util_make_key((unsigned char *)sessionKey, DIR_DECRYPT, &sessionKeyInstance, KEY_SIZE_BYTES);
#ifdef AVI_MALLOC_SIZE_DOWN
	scratchPadOffset = sizeof( DrmHeader );
	pdwOffset += sizeof( DrmHeader );
	for (i = 0; i < DRM_FRAME_KEY_COUNT; i++)
	{
        if (!AuxCache_GetBytes(dwClipStartAddr, pdwOffset, KEY_SIZE_BYTES, FrameKey))
        {
            return DRM_ERROR_DECRYPTION_FAILED;		
        }		
		
		memcpy(encryptedFrameKey, FrameKey, KEY_SIZE_BYTES);
		
		crypt_util_decrypt(&cipher, &sessionKeyInstance, encryptedFrameKey, KEY_SIZE_BYTES, FrameKey, &decryptedFrameKeySize);
		if(decryptedFrameKeySize != KEY_SIZE_BYTES)
		{
			return DRM_ERROR_DECRYPTION_FAILED;
		}		
//#ifdef NEW_SC_KEYS
		memcpy(g_ScAviDrm_KeysOffset+scratchPadOffset,FrameKey,KEY_SIZE_BYTES);

		scratchPadOffset += KEY_SIZE_BYTES;
		pdwOffset += KEY_SIZE_BYTES;
	
	}
#else
	for (i = 0; i < DRM_FRAME_KEY_COUNT; i++)
	{
		memcpy(encryptedFrameKey, context->clearHeader.frameKeys[i], KEY_SIZE_BYTES);
		
		crypt_util_decrypt(&cipher, &sessionKeyInstance, encryptedFrameKey, KEY_SIZE_BYTES, context->clearHeader.frameKeys[i], &decryptedFrameKeySize);
		if(decryptedFrameKeySize != KEY_SIZE_BYTES)
		{
			return DRM_ERROR_DECRYPTION_FAILED;
		}		
	}

#endif
	context->state = DRM_STATE_COMMITTED;

	return result;
}

#endif // AVI_DRM_SUPPORT

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av片在线观看| 亚洲国产精品精华液2区45| 欧美岛国在线观看| 亚洲色图视频网| 国产福利精品一区二区| 欧美精品久久久久久久多人混战| 国产午夜精品一区二区三区四区| 亚洲综合久久av| gogo大胆日本视频一区| xvideos.蜜桃一区二区| 日本视频一区二区| 欧美自拍偷拍午夜视频| 国产精品福利在线播放| 精彩视频一区二区三区| 777亚洲妇女| 亚洲妇熟xx妇色黄| 91福利小视频| 亚洲综合色成人| 色综合久久综合网97色综合| 国产精品丝袜一区| 成人一区在线观看| 久久精品在线观看| 国产白丝精品91爽爽久久| 久久日韩粉嫩一区二区三区| 免费一区二区视频| 91精品国产91热久久久做人人 | 欧美一级二级三级乱码| 五月天激情小说综合| 欧美在线影院一区二区| 亚洲夂夂婷婷色拍ww47| 欧美在线啊v一区| 一二三区精品福利视频| 欧美性生活久久| 亚洲综合免费观看高清完整版 | a美女胸又www黄视频久久| 中文字幕精品在线不卡| 成人网在线免费视频| 中文字幕成人av| 91在线丨porny丨国产| 亚洲卡通动漫在线| 欧美唯美清纯偷拍| 午夜免费欧美电影| 欧美一区二区视频在线观看2020| 久久不见久久见免费视频7| 久久精品亚洲一区二区三区浴池| 国产原创一区二区| 国产欧美精品一区二区三区四区 | 韩国成人福利片在线播放| 精品日韩一区二区三区| 国产ts人妖一区二区| 成人免费在线播放视频| 欧美吞精做爰啪啪高潮| 美国毛片一区二区| 欧美国产精品中文字幕| 91网站最新网址| 午夜av区久久| 久久久久88色偷偷免费| 91成人看片片| 国产真实乱对白精彩久久| 中文无字幕一区二区三区| 91老师片黄在线观看| 美女一区二区三区在线观看| 国产清纯白嫩初高生在线观看91| 99国产精品视频免费观看| 亚洲h精品动漫在线观看| 日韩欧美中文字幕一区| 成人app软件下载大全免费| 香蕉久久一区二区不卡无毒影院| 欧美成va人片在线观看| 91麻豆精品在线观看| 久久国产精品99精品国产 | 精品国产自在久精品国产| 成人成人成人在线视频| 日本不卡不码高清免费观看| 国产精品久久久一区麻豆最新章节| 欧美日韩中文精品| 成人国产在线观看| 精品一区二区日韩| 亚洲最大成人综合| 国产精品麻豆视频| 欧美成人aa大片| 欧美色男人天堂| 不卡视频免费播放| 黄色资源网久久资源365| 一区二区不卡在线播放| 日本一区二区三区高清不卡 | 在线视频国内一区二区| 成人一区二区视频| 久久精品国产99久久6| 亚洲综合色在线| 国产精品理论片| 久久一夜天堂av一区二区三区| 精品视频1区2区| 91国在线观看| www.欧美日韩| 国产a精品视频| 日本丰满少妇一区二区三区| 51精品秘密在线观看| 国产一区二区0| 国产精品久久久久影院老司| 色悠悠亚洲一区二区| 成人免费av网站| 国产成人午夜视频| 国内精品伊人久久久久av一坑| 午夜欧美视频在线观看| 伊人开心综合网| 亚洲欧美日韩在线播放| 国产精品你懂的| 日本一区二区三区高清不卡| 国产欧美一区二区精品性| 日韩欧美一区电影| 一区二区久久久久久| 中文字幕在线观看不卡| 中文字幕不卡三区| 国产精品天天看| 中文字幕av资源一区| 国产精品黄色在线观看| 综合网在线视频| 一区二区三区四区在线| 一卡二卡欧美日韩| 亚洲成人在线观看视频| 日韩国产在线一| 日韩电影在线观看电影| 免费高清成人在线| 黑人巨大精品欧美黑白配亚洲| 国产精品主播直播| 成人自拍视频在线观看| 91啪九色porn原创视频在线观看| 92国产精品观看| 欧美三级乱人伦电影| 6080yy午夜一二三区久久| 日韩女优制服丝袜电影| 久久九九影视网| 中文字幕一区二区三区视频| 亚洲高清不卡在线| 看片的网站亚洲| 懂色一区二区三区免费观看 | 国产**成人网毛片九色 | 日韩免费电影网站| 久久久国产一区二区三区四区小说| 国产亚洲精品7777| 夜夜亚洲天天久久| 免费成人在线播放| 国产91色综合久久免费分享| 欧美在线一区二区| 欧美精品一区二区高清在线观看| 欧美国产精品一区二区三区| 一区二区三区四区五区视频在线观看| 亚洲国产欧美在线| 国产大片一区二区| 欧美性猛片xxxx免费看久爱| 精品国产乱码久久久久久老虎 | 美女在线视频一区| 99久久国产免费看| 日韩一区二区三区免费看| 中文字幕日韩一区二区| 免费精品视频在线| 色域天天综合网| 国产亚洲人成网站| 日韩二区三区在线观看| 91久色porny | av一区二区三区| 91麻豆精品91久久久久久清纯| 中文字幕免费一区| 麻豆国产精品777777在线| 一本久久a久久精品亚洲| 91精品国产丝袜白色高跟鞋| 亚洲精品一二三| 国产成人8x视频一区二区| 7777精品久久久大香线蕉| 中文字幕一区二区三区不卡| 九九热在线视频观看这里只有精品| 一本大道av伊人久久综合| 国产亚洲精久久久久久| 麻豆久久久久久久| 欧美三级电影在线看| 亚洲色图在线视频| 粉嫩久久99精品久久久久久夜| 欧美成人激情免费网| 午夜精品123| 欧美日韩综合不卡| 亚洲综合丁香婷婷六月香| av一本久道久久综合久久鬼色| 欧美精品一区二区在线观看| 人妖欧美一区二区| 3d动漫精品啪啪1区2区免费| 一区二区三区中文字幕精品精品 | 欧美一级一区二区| 午夜天堂影视香蕉久久| 色噜噜久久综合| 亚洲人精品午夜| 99久久久国产精品| 国产精品国产成人国产三级| 国产精品18久久久| 欧美国产一区视频在线观看| 国产成人在线视频网址| 久久久一区二区| 国产精品一区二区三区网站| 久久久久久久久免费| 国产福利精品一区二区|