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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? drmmessage.c

?? ZORAN 962/966 SOURCE CODE,DVD chip
?? C
字號(hào):
/*
// $Header: /I76/I76_Common/I76_Reference/Playcore/Nav_Clips/AviDrm/libDrmDecrypt/DrmMessage.c 3     2/15/04 7:42p 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.
*/

/*
 Notes: All the pack functions are very similar in logic.  If you find a defect
 in one, it is probably in all of them.
*/
#include "Config.h"		// Global Configuration - do not remove!
#include "Services\Memory\malloc.h" // when using far malloc we should add this include 
#include "Services\Include\_heap.h"

#ifdef AVI_DRM_SUPPORT
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmMessage.h"

#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\Bits.h"       /* assign() */
#include "Playcore\Nav_Clips\AviDrm\libDrmDecrypt\DrmLocal.h"

#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

#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\base64.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\sha1.h"
#include "Playcore\Nav_Clips\AviDrm\LibDrmCommon\DrmErrors.h"

#include <limits.h> /* CHAR_BIT */

#define PROTECTION_FORMAT_VALID    0
#define PROTECTION_FORMAT_INVALID  1
#define SPREAD_RATIO_SWITCH        3
#define SHA1_HASH_SIZE            20
#define KEY_BAD                    4
#define KEY_OK                     5
#define USE_ALTERNATE_KEY         "0"
#define VALID_KEY_TOTAL           14
#define KEY_INDEX_TOTAL           16

typedef struct MessageKeysStruct
{
    uint8_t status;
    char keyString[DRM_PORTABLE_KEY_LENGTH + 1];
	uint8_t alternateKeyIndex;
} MessageKeys;


#ifdef USE_ONE_MASTER_KEY

CONST MessageKeys keyMap[KEY_INDEX_TOTAL] =
 {
   PROTECTION_FORMAT_INVALID, "", 0
  ,PROTECTION_FORMAT_INVALID, "", 0
  ,PROTECTION_FORMAT_VALID, "77658077013762464610390453611281332768339559", 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
  ,PROTECTION_FORMAT_VALID, USE_ALTERNATE_KEY, 2
 };

#else

CONST MessageKeys keyMap[KEY_INDEX_TOTAL] =
 {
   {PROTECTION_FORMAT_INVALID, "", 0}
  ,{PROTECTION_FORMAT_INVALID, "", 0}
  ,{PROTECTION_FORMAT_VALID, "68350122382077155371609790526077843323069757", 2}
  ,{PROTECTION_FORMAT_VALID, "17526956348125519278333379155775791404842465", 3}
  ,{PROTECTION_FORMAT_VALID, "07307313514643969633523034904779465997361500", 4}
  ,{PROTECTION_FORMAT_VALID, "54733977128285238605431520951629624437529331", 5}
  ,{PROTECTION_FORMAT_VALID, "95271872508096602223778323164547956766606317", 6}
  ,{PROTECTION_FORMAT_VALID, "19667620404347912572341155491659903450839945", 7}
  ,{PROTECTION_FORMAT_VALID, "58243572270469309545831683269013152299633661", 8}
  ,{PROTECTION_FORMAT_VALID, "48838714380920672270656324638255297385378768", 9}
  ,{PROTECTION_FORMAT_VALID, "06784853705815447409483489174064856573505938", 10}
  ,{PROTECTION_FORMAT_VALID, "00770111886686676706976265862940452724180617", 11}
  ,{PROTECTION_FORMAT_VALID, "53815691764967922077658113912876220915162495", 12}
  ,{PROTECTION_FORMAT_VALID, "04312177729617650695571887594358724097271608", 13}
  ,{PROTECTION_FORMAT_VALID, "63945301141543851075872730428987261348525394", 14}
  ,{PROTECTION_FORMAT_VALID, "66414933091815151592855735169031788977421980", 15}
 };

#endif

void wrapSecureMessage(DrmMessagePacked *transformMessage)
{
    uint8_t current;
    uint8_t carryNext;
    uint8_t carryLast;
    uint8_t maskHigh = 0x0F;
    uint8_t maskLow = 0xF0;
    uint8_t i;
    uint8_t loopSize;
	uint8_t protectionFormatIndex;
	uint8_t masterKeyHash[SHA1_HASH_SIZE] = {0};
	uint8_t cryptoCode;
    
	transformMessage->sizeInBits += PROTECTION_FORMAT_BITS;
    loopSize = getByteLoopSizeFromBits(transformMessage->sizeInBits);
    
	/* Derive protection format id from message itself.  Do not use invalid key. */
	protectionFormatIndex = (transformMessage->message[0] % VALID_KEY_TOTAL) + (KEY_INDEX_TOTAL - VALID_KEY_TOTAL);

	carryLast = protectionFormatIndex << 4; /* Shift over to make room for message. */
    cryptoCode = setHash(protectionFormatIndex, masterKeyHash);

    /* COPYPASTE_WARNING: This loop logic is very close to unwrapSecureMessage loop. */
    for (i = 0; i < loopSize; i++)
    {
        current = transformMessage->message[i];
        carryNext = current & maskHigh;
        current = current & maskLow;
        current = current >> 4;

		/* Handle 4 bits of first byte. */
		if (i == 0)
		{
			current = current ^ masterKeyHash[i];
			current = current & maskHigh;
		}

        current = current | carryLast;

		/* XOR in crypto */
		if (i != 0)
		{
			current = current ^ masterKeyHash[i];
		}

        transformMessage->message[i] = current;
        carryLast = carryNext << 4;
    }

	memset(masterKeyHash, 0xF1, SHA1_HASH_SIZE); /* Clear out hash. */

	if (cryptoCode == KEY_BAD) /* Clear out message if key is bad. */
	{
		memset(transformMessage->message, 0, MAX_MESSAGE_SIZE_BYTES);
	}
}
// <<< Robin_0915_2004
#ifndef AVI_DRM_OPTIMIZATION
void unwrapSecureMessage(DrmMessagePacked *transformMessage)
{
    uint8_t current;
    uint8_t carryNext;
    uint8_t carryLast;
    uint8_t maskHigh = 0x0F;
    uint8_t maskLow = 0xF0;
    char i;
    uint8_t loopSize;
    uint8_t protectionFormatIndex;
	uint8_t masterKeyHash[SHA1_HASH_SIZE] = {0};
	 
    loopSize = getByteLoopSizeFromBits(transformMessage->sizeInBits);
    
    protectionFormatIndex = transformMessage->message[0] >> 4;
	carryLast = 0;
	setHash(protectionFormatIndex, masterKeyHash);
    
    /* COPYPASTE_WARNING: This loop logic is very close to wrapSecureMessage loop. */
    for (i = loopSize - 1; i >= 0; i--)
    {
        current = transformMessage->message[i];

  		/* XOR in crypto */
		if (i != 0)
		{
			current = current ^ masterKeyHash[i];
		}

        carryNext = current & maskLow;
        current = current & maskHigh;

		/* Handle 4 bits of first byte. */
		if (i == 0)
		{
			current = current ^ masterKeyHash[i];
			current = current & maskHigh;
		}

        current = current << 4;
        current = current | carryLast;
        transformMessage->message[i] = current;
        carryLast = carryNext >> 4;
    }

    memset(masterKeyHash, 0xF1, SHA1_HASH_SIZE); /* Clear out hash. */
    transformMessage->sizeInBits -= PROTECTION_FORMAT_BITS;
}
#endif
// >>> Robin_0915_2004
uint8_t setHash(uint8_t protectionFormatIndex, uint8_t *keyHash)
{
	char keyString[DRM_PORTABLE_KEY_LENGTH + 1];
	uint8_t portableMasterKey[DRM_PORTABLE_KEY_LENGTH] = {0};
	uint8_t *base64;
	int outLength;
	uint8_t result;
	char *hashResult;
	uint8_t hardwareSecret[MASTER_KEY_SIZE_BYTES];
//	uint8_t *masterKey;
	char masterKey[33];
	int masterKeySize;

	result = KEY_BAD;

	/* See if we need to use alternate key. */
	if (strcmp(keyMap[protectionFormatIndex].keyString, USE_ALTERNATE_KEY) == 0)
	{
		strcpy(keyString, keyMap[(keyMap[protectionFormatIndex].alternateKeyIndex)].keyString);
	}
	else
	{
		strcpy(keyString, keyMap[protectionFormatIndex].keyString);
	}

	if (DRM_ERROR_NONE == localGetHardwareKey(hardwareSecret))
	{
		if (get_local_master_key_from_id((unsigned char *)keyString, (unsigned char *)portableMasterKey) != 1)
		{
			return KEY_BAD;
		}
	}
	else
	{
		if (get_master_key_from_id((unsigned char *)keyString, (unsigned char *)portableMasterKey) != 1)
		{
			return KEY_BAD;
		}
	}

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

			// Handle locally protected master keys.
			result = localGetHardwareKey(hardwareSecret);
			if (DRM_ERROR_NONE == result)
	{
				result = getLocalizedMasterKey((unsigned char *)masterKey);
				if (DRM_ERROR_NONE != result)
				{
					return KEY_BAD;
				}
				base64 = (UINT8*)base64Encode(masterKey, MASTER_KEY_SIZE_BYTES, (unsigned int *)&outLength);
				memcpy(portableMasterKey, base64, outLength);
				MEM_Free(SC_POOL, base64);
			}

		}

		result = KEY_OK;
		hashResult = sha1GetHash((unsigned char *)portableMasterKey, DRM_PORTABLE_KEY_LENGTH, (unsigned int *)&outLength);
		memcpy(keyHash, hashResult, SHA1_HASH_SIZE);
		MEM_Free(SC_POOL, hashResult);
	}

	memset(portableMasterKey, 0, DRM_PORTABLE_KEY_LENGTH);

	return result;
}

void packRegistrationRequest(RegistrationRequest request, DrmMessagePacked *messagePacked)
{
    packRegistrationLogic(&request, messagePacked, (uint8_t) B_BECOMES_A);
    registrationSecuritySwap(messagePacked);
}

void packRegistrationLogic(RegistrationRequest *request, DrmMessagePacked *messagePacked, uint8_t direction)
{
    uint8_t packedIndex;
    uint8_t guardIndex;
    uint8_t modelIndex;
    
    packedIndex = 0;
    
    for (guardIndex = 0; guardIndex < OWNER_GUARD_BYTES; guardIndex++)
    {
        assign(&(request->userIdGuard[guardIndex]), &(messagePacked->message[packedIndex++]), direction);
    }
    for (modelIndex = 0; modelIndex < MODEL_ID_BYTES; modelIndex++)
    {
        assign(&(request->modelId[modelIndex]), &(messagePacked->message[packedIndex++]), direction);
    }
    
	messagePacked->sizeInBits = REGISTRATION_CODE_BITS;
}

void registrationSecuritySwap(DrmMessagePacked *messagePacked)
{
	/* Mix in random number with static model number. */
	halfByteSwap(&(messagePacked->message[0]), &(messagePacked->message[4]), 0);
	halfByteSwap(&(messagePacked->message[2]), &(messagePacked->message[3]), 1);
}

#endif // AVI_DRM_SUPPORT

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清成人在线| 蜜桃av一区二区在线观看| 在线视频欧美精品| 日韩高清在线不卡| 欧美国产综合色视频| 欧美伊人久久久久久久久影院 | 欧美中文字幕一区二区三区| 久久久午夜精品| 在线观看视频一区二区欧美日韩| 亚洲欧洲一区二区在线播放| 不卡一卡二卡三乱码免费网站| www一区二区| 91在线免费视频观看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲国产日韩在线一区模特| 精品国产乱子伦一区| 色综合一个色综合| 精品一区二区三区在线播放| 夜夜夜精品看看| 国产喷白浆一区二区三区| 色哟哟国产精品| 国产传媒日韩欧美成人| 国产精品欧美久久久久一区二区| 高清av一区二区| 国产精品久久久久一区| 91蝌蚪porny| 国产一区二区91| 日韩高清不卡在线| 一区二区欧美在线观看| av在线播放一区二区三区| 精品一区二区三区在线观看| 欧美激情一区不卡| 精品久久久久久久一区二区蜜臀| 极品少妇一区二区| 国产精品久久久一本精品| 欧美sm极限捆绑bd| 欧美人伦禁忌dvd放荡欲情| 91在线视频18| av在线不卡观看免费观看| 国产一区91精品张津瑜| 久久国内精品视频| 喷白浆一区二区| 首页国产欧美久久| 一区二区三区日韩精品视频| 欧美精品一区二区三| 欧美一区二区在线视频| 欧美日韩不卡一区二区| 欧美亚洲日本一区| 欧美在线观看视频一区二区三区| 亚洲成人免费av| 亚洲一区在线看| 久久这里只精品最新地址| 欧美一三区三区四区免费在线看 | 欧美哺乳videos| 91精品国产综合久久蜜臀| 国产成人欧美日韩在线电影| 蜜桃久久精品一区二区| 日本强好片久久久久久aaa| 中文在线一区二区 | 日本欧美韩国一区三区| 天堂蜜桃91精品| 亚洲小说欧美激情另类| 久久亚洲免费视频| 2023国产精华国产精品| 国产亚洲成av人在线观看导航| 91网上在线视频| 欧美在线观看18| 成人精品免费视频| 成人激情小说网站| 91黄色小视频| 欧美美女喷水视频| 日韩欧美的一区二区| 久久综合九色综合欧美98| 欧美视频三区在线播放| 欧美美女一区二区| 精品国精品国产| 国产欧美日韩中文久久| 欧美韩国日本综合| 亚洲精选在线视频| 亚洲妇熟xx妇色黄| 捆绑变态av一区二区三区| 天天影视涩香欲综合网| 婷婷国产在线综合| 国产一区二区三区美女| 日本欧洲一区二区| 国产成人精品免费在线| 日本高清免费不卡视频| 成人综合激情网| 色八戒一区二区三区| 欧美一区二区三区电影| 国产女主播视频一区二区| 亚洲欧美另类图片小说| 三级在线观看一区二区| 国产.欧美.日韩| 在线一区二区三区四区| 精品国产免费一区二区三区香蕉| 91精品国产综合久久久久久| 久久久www成人免费毛片麻豆| 91精品国产综合久久精品app| 欧美日韩视频一区二区| 2023国产一二三区日本精品2022| 欧美成人国产一区二区| 国产亚洲精品bt天堂精选| 国产精品污污网站在线观看| 婷婷丁香激情综合| 色激情天天射综合网| 91精品国产综合久久精品图片| 日韩欧美在线一区二区三区| 亚洲欧美色一区| 成人白浆超碰人人人人| 日韩亚洲欧美综合| 亚洲国产日日夜夜| 九色综合狠狠综合久久| 欧美日韩免费在线视频| 日韩欧美不卡一区| 性欧美大战久久久久久久久| 狠狠色伊人亚洲综合成人| 风间由美一区二区三区在线观看| 国产suv精品一区二区三区| 欧美刺激脚交jootjob| 爽爽淫人综合网网站| 欧美影院精品一区| 伊人夜夜躁av伊人久久| 人妖欧美一区二区| 5566中文字幕一区二区电影| 亚洲精品成人悠悠色影视| av电影在线观看一区| 欧美久久一二三四区| 亚洲免费观看高清完整版在线 | 精品在线免费视频| 日韩欧美国产综合一区 | 久久99热国产| 日韩精品一区在线| 青青草成人在线观看| 3d动漫精品啪啪一区二区竹菊| 国产女主播一区| 国产成人自拍在线| 中文幕一区二区三区久久蜜桃| 亚洲成人你懂的| 欧美日韩视频在线一区二区| 亚洲成人资源在线| 337p亚洲精品色噜噜| 免费一级欧美片在线观看| 国产福利精品一区二区| 亚洲国产精华液网站w| 不卡视频在线观看| 亚洲精品国产视频| 国产精品自在欧美一区| 日本一区二区三区高清不卡| av一区二区三区在线| 一区二区三区四区在线| 欧美日韩国产影片| 久久精品99久久久| 欧美日韩成人综合在线一区二区| 欧美激情一区二区三区| 久久草av在线| 国产欧美日韩视频在线观看| 99国产精品国产精品久久| 亚洲线精品一区二区三区| 欧美一区二区在线视频| 国产激情视频一区二区在线观看 | 色吊一区二区三区| 日韩影院精彩在线| 国产无人区一区二区三区| 日韩国产一二三区| 欧美午夜免费电影| 亚洲视频香蕉人妖| 欧美肥妇free| 国产高清不卡一区| 久久久久国产成人精品亚洲午夜| 日本成人中文字幕在线视频| 国产亚洲精品资源在线26u| 97久久超碰精品国产| 日本欧美久久久久免费播放网| 欧美在线观看视频在线| 亚洲欧美日韩中文字幕一区二区三区| 国产精品资源网| 亚洲精品成人少妇| 色狠狠综合天天综合综合| 日韩中文欧美在线| 欧美日韩美女一区二区| 国产精品一区二区久激情瑜伽| 欧美成人一区二区| 不卡的av电影在线观看| 日本在线不卡视频| 日韩欧美一区二区三区在线| av电影天堂一区二区在线| 免费欧美在线视频| 精品理论电影在线| 欧洲一区在线观看| 国产乱人伦偷精品视频不卡| 亚洲成人资源在线| 中文字幕一区二区三区不卡 | 中文字幕不卡一区| 欧美日韩国产片| 成人性视频网站| 老司机午夜精品| 亚洲成a人v欧美综合天堂下载| 欧美日韩一区二区三区高清| 亚洲五月六月丁香激情|