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

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

?? support.c

?? 一個(gè)加密庫代碼
?? C
字號(hào):
/*
 * Copyright 1997-2005 Markus Hahn 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include "Support.h"
#include "BasicTypes.h"
#include "SHA1.h"
#include "SHA512.h"
#include "cpkernel.h"

#include <stdlib.h>
#include <memory.h>

//////////////////////////////////////////////////////////////////////////////

// the recent version of CryptPak
#define VERSION_MAJOR   5
#define VERSION_MINOR   0
#define VERSION_BUILT   0

//////////////////////////////////////////////////////////////////////////////

WORD32 CRYPTPAK_API
Support_GetVersion() 
{
	return (((WORD32) VERSION_MAJOR) << 24) |
		   (((WORD32) VERSION_MINOR) << 16) |
		    ((WORD32) VERSION_BUILT);
}

//////////////////////////////////////////////////////////////////////////////

WORD32 CRYPTPAK_API Support_GetCrunchKeyBuildBufSize(
	WORD32 lPasswLen,
	WORD32 lSaltLen,
	WORD32 lOutputLen,
	WORD8 bMethod) 
{
	switch (bMethod)
	{
		case CRUNCHKEY_METHOD_SHA512_1K:
		case CRUNCHKEY_METHOD_SHA512_100K:
			return lSaltLen + lPasswLen + SHA512_DIGESTSIZE;
		default:
			return lSaltLen + lPasswLen +       
				SHA1_DIGESTSIZE * (lOutputLen / SHA1_DIGESTSIZE + 1);
	}
}

//////////////////////////////////////////////////////////////////////////////

BYTEBOOL CRYPTPAK_API Support_CrunchKey(
	const void* pPassw, 
	WORD32 lPasswLen, 
	const void* pSalt, 
	WORD32 lSaltLen, 
	void* pOutput, 
	WORD32 lOutputLen,
	WORD8 bMethod,
	void* pBuildBuf) 
{
	int nI, nC;
	WORD8* outBuf = (WORD8*) pOutput;
	WORD8* buildBuf;
	WORD32 lBuildBufLen;
	WORD32 lBuildBufPos;
	WORD32 lRest, lToCopy;
	WORD32 lOutPos;
	BYTEBOOL blFirst = BOOL_TRUE;
	SHA512CTX ctx512;
	SHA1CTX ctx;
	WORD8 digest[SHA1_DIGESTSIZE];

	if (lOutputLen == 0) 
	{
		return BOOL_TRUE;
	}

	if (pSalt == NULL) 
	{
		lSaltLen = 0; 
	}

	// create the build buffer, if necessary

	lBuildBufLen = Support_GetCrunchKeyBuildBufSize(lPasswLen, 
		lSaltLen,
		lOutputLen, 
		bMethod);

	if (NULL == pBuildBuf)
	{
#ifdef KERNEL_COMPILE
		buildBuf = (WORD8*)ExAllocatePool( NonPagedPool,lBuildBufLen );
#else
		buildBuf = (WORD8*) malloc(lBuildBufLen);
#endif
		//
		if (buildBuf == NULL) 
		{
			return BOOL_FALSE;   
		}
	}
	else  
	{
		buildBuf = (WORD8*) pBuildBuf;
	}

	lOutPos = 0;
	lRest = lOutputLen;

	if ((CRUNCHKEY_METHOD_SHA512_1K == bMethod) ||
	    (CRUNCHKEY_METHOD_SHA512_100K == bMethod))
	{
		// initialize hash and copy password and salt to the right position
		lBuildBufLen = 0;
		
		memset(&buildBuf[lBuildBufLen], 0, SHA512_DIGESTSIZE);
		lBuildBufLen += SHA512_DIGESTSIZE;

		memcpy(&buildBuf[lBuildBufLen], pPassw, lPasswLen);
		lBuildBufLen += lPasswLen;

		if (pSalt)
		{
			memcpy(&buildBuf[lBuildBufLen], pSalt, lSaltLen);
			lBuildBufLen += lSaltLen;
		}

		// process hash, password and salt many, many times
		SHA512_Initialize(&ctx512);
		nC = (CRUNCHKEY_METHOD_SHA512_1K == bMethod) ? 1000 : 100000;
		for (nI = 0; nI < nC; nI++)
		{
			SHA512_Update(&ctx512, buildBuf, lBuildBufLen);
			SHA512_Final(&ctx512, buildBuf);
			SHA512_Reset(&ctx512);
		}
		memset(&ctx512, 0, sizeof(ctx512));
		
		// now put out the key, repeat the process above to generate more data
		// if we don't have enough material (to make the whole key look random)
		while (lRest)
		{
			lToCopy = (lRest > SHA512_DIGESTSIZE) ? SHA512_DIGESTSIZE : lRest;
			
			memcpy(&outBuf[lOutPos], buildBuf, lToCopy);

			if (lRest -= lToCopy)
			{
				lOutPos += lToCopy;
				SHA512_Update(&ctx512, buildBuf, lBuildBufLen);
				SHA512_Final(&ctx512, buildBuf);
				SHA512_Reset(&ctx512);
			}
		}
	}
	else
	{
		// concat salt and key
		if (pSalt != NULL) 
		{
			memcpy(&buildBuf[0], 
				pSalt, 
				lSaltLen);
		}
		memcpy(&buildBuf[lSaltLen], 
			pPassw, 
			lPasswLen);
		lBuildBufPos = lSaltLen + lPasswLen;

		SHA1_Initialize(&ctx);

		for (;;)
		{
			if (blFirst == BOOL_TRUE) 
			{
				blFirst = BOOL_FALSE;
			}
			else 
			{
				SHA1_Reset(&ctx);
			}

			SHA1_Update(&ctx, buildBuf, lBuildBufPos);
			SHA1_Final(digest, &ctx);

			// finished?
			if (lRest <= SHA1_DIGESTSIZE) 
			{
				memcpy(&outBuf[lOutPos], digest, lRest);

				// xor the rest of the last digest over the beginning of the
				// output buffer?
				if (bMethod == CRUNCHKEY_METHOD_SHAEXTXORLOOP) 
				{
					lOutPos = 0;

					while (lRest < SHA1_DIGESTSIZE) 
					{
						outBuf[lOutPos++] ^= digest[lRest++];
						if (lOutPos == lOutputLen) 
						{
							lOutPos = 0;
						}
					}
				}
				break; // leave do..while
			}
			else 
			{
				memcpy(&outBuf[lOutPos], digest, SHA1_DIGESTSIZE);
				lOutPos += SHA1_DIGESTSIZE; 

				// append the new digest to the build buffer
				memcpy(&buildBuf[lBuildBufPos], digest, SHA1_DIGESTSIZE);
				memset(digest, 0, SHA1_DIGESTSIZE);
				lBuildBufPos += SHA1_DIGESTSIZE;

				lRest -= SHA1_DIGESTSIZE;
			}
		}
		memset(&ctx, 0, sizeof(ctx));
	}

	memset(buildBuf, 0, lBuildBufLen);

	if (NULL == pBuildBuf) 
	{
#ifdef KERNEL_COMPILE
		ExFreePool( buildBuf );
#else
		free(buildBuf);
#endif
	}

	return BOOL_TRUE;
}

//////////////////////////////////////////////////////////////////////////////

static char* BASE64_TAB =			\
	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"	\
	"abcdefghijklmnopqrstuvwxyz"	\
	"0123456789"					\
	"+/";

#define BASE64_FILLCHAR		'='

// the last byte in the handle word contains the number of bytes in the handle
#define BASE64_COUNT_OFS	3

//////////////////////////////////////////////////////////////////////////////

int CRYPTPAK_API BASE64_Encode(
	WORD32* plHandle, 
	const void* pData, 
	int nInpSize, 
	char* outp, 
	int blFlush)
{
	int nOfs;
	const WORD8* inp;
	char* outpStart;
	WORD8 hnd[4];
	WORD32 handle;

	inp = (const WORD8*)pData;
	outpStart = outp;

	handle = *plHandle;
	WORD32_TO_BYTES(handle, hnd)

	nOfs = hnd[BASE64_COUNT_OFS];

	while (nInpSize)
	{
		hnd[nOfs++] = *inp++;
		nInpSize--;

		if (3 == nOfs)
		{
			*outp++ = BASE64_TAB[hnd[0] >> 2];
			*outp++ = BASE64_TAB[((hnd[0] & 0x03) << 4) | (hnd[1] >> 4)];
			*outp++ = BASE64_TAB[((hnd[1] & 0x0f) << 2) | (hnd[2] >> 6)];
			*outp++ = BASE64_TAB[hnd[2] & 0x3f];
			nOfs = 0;
		}
	}
	
	if (blFlush)
	{
		if (0 < nOfs)
		{
			hnd[(1 == nOfs) ? 1 : 2] = 0;

			*outp++ = BASE64_TAB[hnd[0] >> 2];
			*outp++ = BASE64_TAB[((hnd[0] & 0x03) << 4) | (hnd[1] >> 4)];

			if (1 == nOfs)
			{
				*outp++ = BASE64_FILLCHAR;
			}
			else
			{
				*outp++ = BASE64_TAB[((hnd[1] & 0x0f) << 2) | (hnd[2] >> 6)];
			}
			*outp++ = BASE64_FILLCHAR;
		}
	}
	else
	{
		hnd[BASE64_COUNT_OFS] = (WORD8)nOfs;
		*plHandle = BYTES_TO_WORD32(hnd);
	}

	return (int)(outp - outpStart);
}

//////////////////////////////////////////////////////////////////////////////

int BASE64_Lookup(
	WORD8 c)
{
	     if ('A' <= c  && 'Z' >= c)	return  c - 'A';	
	else if	('a' <= c  && 'z' >= c)	return (c - 'a') + 26;	
	else if ('0' <= c  && '9' >= c)	return (c - '0') + 52;	
	else if ('+' == c)				return 62;	
	else if ('/' == c)				return 63;
	else							return -1;
}

int CRYPTPAK_API BASE64_Decode(
	WORD32* plHandle,
	const char* inp,
	int nInpSize, 
	void* pData)
{
	char c;
	int nOfs, nRest, nHH, nHL, nLH, nLL;
	WORD32 handle;
	WORD8 hnd[4];
	WORD8 *outp, *outpStart;

	outpStart = outp = (WORD8*)pData;

	handle = *plHandle;
	WORD32_TO_BYTES(handle, hnd)

	// determine how many characters we have cached
	nOfs = hnd[BASE64_COUNT_OFS];

	nRest = 3;		// (3 = "no fill character detected yet")

	while (nInpSize)
	{
		// fill character?
		if (BASE64_FILLCHAR == (c = *inp++))
		{
			switch (nOfs)
			{
				case 2:	
					nRest = 1; 
					break;
				case 3:	
					if (3 == nRest) nRest = 2; 
					break; 
				default: 
					return -1;
			}
		}
		else
		{
			if (3 == nRest)
			{
				hnd[nOfs] = (WORD8)c;
			}
			else
			{
				return -1;	// nothing else allowed after the fillchar
			}
		}

		if (4 == ++nOfs)
		{
			// get the necessary four 6bit values 
						   if (-1 == (nHH = BASE64_Lookup(hnd[0]))) return -1;
						   if (-1 == (nHL = BASE64_Lookup(hnd[1]))) return -1;
			if (1 < nRest) if (-1 == (nLH = BASE64_Lookup(hnd[2]))) return -1;
			if (2 < nRest) if (-1 == (nLL = BASE64_Lookup(hnd[3]))) return -1;

			// reassemble up to three bytes
			               *outp++ = (WORD8)(( nHH         << 2) | (nHL >> 4));
			if (1 < nRest) *outp++ = (WORD8)(((nHL & 0x0f) << 4) | (nLH >> 2));
			if (2 < nRest) *outp++ = (WORD8)(((nLH & 0x03) << 6) |  nLL);

			nOfs = 0;
		}

		nInpSize--;
	}

	if (3 == nRest)
	{
		// (counter might have been overwritten)
		hnd[BASE64_COUNT_OFS] = (WORD8)nOfs;  

		*plHandle = BYTES_TO_WORD32(hnd);
	}

	return (int)(outp - outpStart);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩在线一区模特 | 国产乱码精品一区二区三区忘忧草 | 欧美在线综合视频| 日韩午夜在线观看| 一区二区三区精品在线| 国产一本一道久久香蕉| 欧美日韩激情一区二区| 国产精品久久久久久久久搜平片| 日韩va亚洲va欧美va久久| 色婷婷av一区二区三区之一色屋| 亚洲一二三四区| 成人精品免费视频| 精品久久久久久久久久久院品网| 亚洲成人综合网站| 日本电影欧美片| 综合婷婷亚洲小说| 成人小视频在线观看| 久久影院视频免费| 奇米四色…亚洲| 91精品国产91久久久久久最新毛片 | 五月天丁香久久| 国产一区不卡视频| 日韩免费电影一区| 日韩精品视频网站| 欧美亚洲愉拍一区二区| 一区二区三区精品在线观看| 91麻豆免费看片| 亚洲欧美色一区| 91搞黄在线观看| 亚洲国产cao| 欧美中文字幕一区二区三区亚洲 | 95精品视频在线| 91成人在线精品| 久久精品免费在线观看| 蜜臀91精品一区二区三区 | 青青国产91久久久久久| 欧美高清www午色夜在线视频| 亚洲尤物视频在线| 91精品国产免费| 麻豆国产91在线播放| 精品国产乱码久久久久久1区2区| 久久电影网站中文字幕| 精品国产一区二区三区久久影院| 国产永久精品大片wwwapp| 久久精品水蜜桃av综合天堂| 国产成人aaa| 亚洲男人天堂一区| 欧美精品 日韩| 精品一区二区影视| 国产精品私人自拍| 欧美自拍丝袜亚洲| 免费在线一区观看| 国产日韩成人精品| 91久久国产综合久久| 亚洲电影一区二区三区| 日韩精品在线网站| 99re这里只有精品首页| 香蕉成人啪国产精品视频综合网| 日韩精品一区二区三区在线观看 | 亚洲欧美偷拍卡通变态| 欧美日韩一区二区三区在线看| 欧美a级理论片| 国产日韩欧美a| 欧美日韩高清一区二区不卡| 国产精品正在播放| 亚洲精品高清在线观看| 日韩免费高清av| 91美女在线视频| 在线精品视频一区二区| 免费成人在线播放| 亚洲视频 欧洲视频| 日韩色视频在线观看| av资源网一区| 免费成人av资源网| 亚洲美女一区二区三区| 欧美不卡一二三| 色婷婷国产精品| 国产jizzjizz一区二区| 亚洲电影视频在线| 国产精品国产成人国产三级| 日韩一区二区电影网| 色偷偷88欧美精品久久久| 国产麻豆9l精品三级站| 欧美日韩精品福利| 美女网站色91| 国产精品色噜噜| 在线观看av不卡| 午夜国产不卡在线观看视频| 色综合视频在线观看| 亚洲欧美综合网| 国产精品一区二区在线观看不卡| 精品国产乱码久久久久久老虎 | 亚洲自拍偷拍麻豆| 欧美影片第一页| 国产成人在线视频免费播放| 日本亚洲天堂网| 亚洲一区二区三区中文字幕| 国产精品色一区二区三区| 精品少妇一区二区三区在线播放| 欧美在线视频全部完| zzijzzij亚洲日本少妇熟睡| 国产一区二区福利视频| 精品午夜久久福利影院| 老汉av免费一区二区三区| 五月天视频一区| 亚洲国产精品一区二区久久恐怖片| 亚洲色图制服丝袜| 中文字幕在线一区| 亚洲国产精品成人综合| 国产午夜精品理论片a级大结局| 精品久久国产97色综合| 欧美精品电影在线播放| 欧美日韩国产片| 欧美日韩国产一级二级| 91精品国产91综合久久蜜臀| 日韩一区二区三区在线| 日韩国产精品久久久久久亚洲| 亚洲理论在线观看| 亚洲欧洲av色图| 亚洲男人的天堂网| 亚洲精品va在线观看| 亚洲精品亚洲人成人网| 亚洲精品精品亚洲| 亚洲午夜电影在线观看| 久久99热这里只有精品| 国产精品一二三区在线| 成人一道本在线| 色婷婷精品大在线视频| 欧美日韩国产在线观看| 日韩一区二区在线观看视频 | 91色porny| 欧美久久久久免费| 欧美第一区第二区| 国产欧美日本一区二区三区| 国产精品无人区| 亚洲精品高清在线观看| 99久久伊人网影院| 成人免费看的视频| 91网站黄www| 欧美在线观看视频在线| 欧美久久一二区| 久久欧美中文字幕| 亚洲欧美偷拍三级| 蜜臀99久久精品久久久久久软件| 国产成人免费视频网站高清观看视频 | 日韩成人免费看| 国产精品一二二区| 欧美羞羞免费网站| 久久中文娱乐网| 一区二区三区国产精品| 久久成人免费网站| bt欧美亚洲午夜电影天堂| 欧美体内she精高潮| 久久蜜桃av一区二区天堂 | 9人人澡人人爽人人精品| 欧美视频一区在线| 国产日韩欧美亚洲| 日韩激情av在线| 成人高清视频在线| 91精品免费观看| 中文字幕佐山爱一区二区免费| 婷婷六月综合网| a级精品国产片在线观看| 日韩亚洲欧美在线观看| 日韩美女啊v在线免费观看| 蓝色福利精品导航| 91电影在线观看| 亚洲国产精品精华液2区45| 奇米影视在线99精品| 色系网站成人免费| 国产精品免费视频网站| 日本美女视频一区二区| 在线视频欧美精品| 综合欧美一区二区三区| 国产精品小仙女| 欧美一级视频精品观看| 亚洲综合av网| 99国产精品国产精品久久| 久久久精品黄色| 韩国成人精品a∨在线观看| 欧美疯狂性受xxxxx喷水图片| 国产精品羞羞答答xxdd| 欧美一区二区人人喊爽| 亚洲一区二区三区四区中文字幕| 成人一二三区视频| 国产亚洲综合在线| 国产精品一二三四五| 久久久久久亚洲综合影院红桃| 日韩国产精品91| 欧美精品一级二级三级| 亚洲蜜臀av乱码久久精品| av中文一区二区三区| 国产精品系列在线| 岛国精品一区二区| 中文字幕av一区二区三区高| 国产精品18久久久久| 国产欧美精品日韩区二区麻豆天美| 极品少妇xxxx精品少妇| 欧美精品一区二区三区四区| 国产麻豆精品视频|