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

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

?? tripledes.c

?? 一個(gè)加密庫(kù)代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(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 "TripleDES.h"


// internal constants
#define KEYSETUP_ENCRYPTION     0
#define KEYSETUP_DECRYPTION     1



// prototypes of the support routines
void _expandPureDESKey(const WORD8*, WORD8*);
void _keysetup(WORD8*, int, WORD32*);
void _processBlock(WORD8*, WORD8*, WORD32*);
void _blkcpy(WORD8*, WORD8*);
void _blkcpy_r(WORD8*, WORD8*);


WORD32 TripleDES_GetCipherInfo
(CIPHERINFOBLOCK* pInfo) 
{
	WORD8* pSrc;
	WORD8* pDst;
	CIPHERINFOBLOCK tempinfo;
	WORD32 lI;

	// prepare the information context
	tempinfo.lSizeOf = pInfo->lSizeOf;
	tempinfo.lBlockSize = TRIPLEDES_BLOCKSIZE;
	tempinfo.lKeySize = TRIPLEDES_KEYSIZE; 
	tempinfo.blOwnHasher = BOOL_FALSE;
	tempinfo.lInitDataSize = TRIPLEDES_BLOCKSIZE;
	tempinfo.lContextSize = sizeof(TRIPLEDESCTX);
	tempinfo.bCipherIs = CIPHER_IS_BLOCKLINK;

	// copy as many bytes of the information block as possible
	pSrc = (WORD8*) &tempinfo;
	pDst = (WORD8*) pInfo;
	for (lI = 0; lI < tempinfo.lSizeOf; lI++)
		*pDst++ = *pSrc++;

	return CIPHER_ERROR_NOERROR;
}



WORD32 TripleDES_SelfTest 
(void* pTestContext) 
{
	// test the cipher for correct encrypting and decrypting
	// (we test only a single DES stage with the original validation sets)

	static WORD8 refkey[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
	static WORD8 plainBlock[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 };
	static WORD8 cipherBlock[8] = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d };
	WORD8 workBlock[8];
	WORD32 k[32];
	int nI;

	// encrypt the test block
	_keysetup(refkey, KEYSETUP_ENCRYPTION, k);
	_processBlock(plainBlock, workBlock, k);

	// equal ciphertexts?
	for (nI = 0; nI < 8; nI++)
		if (workBlock[nI] != cipherBlock[nI]) return CIPHER_ERROR_INVALID;

	// decrypt the test block
	_keysetup(refkey, KEYSETUP_DECRYPTION, k);
	_processBlock(workBlock, workBlock, k);

	// equal plaintexts?
	for (nI = 0; nI < 8; nI++) 
	{
		if (plainBlock[nI] != workBlock[nI]) return CIPHER_ERROR_INVALID;
	}
	return CIPHER_ERROR_NOERROR;
}



WORD32 TripleDES_CreateWorkContext
(void* pContext,
 const WORD8* pKey,
 WORD32 lKeyLen,
 WORD32 lMode,
 void* pInitData,
 Cipher_RandomGenerator GetRndBytes,
 const void* pRndGenData) 
{
	int nI;
	WORD8* pbInit;
	WORD8 deskey1[8];
	WORD8 deskey2[8];
	WORD8 deskey3[8];
	TRIPLEDESCTX* pCtx;

	pCtx = (TRIPLEDESCTX*) pContext;
	pCtx->blLegacy = (CIPHER_GETFLAGS(lMode) & CIPHER_MODE_FLAG_LEGACY) ? BOOL_TRUE : BOOL_FALSE;

	// create three DES keys from the "pure" key, ignoring the parity
	_expandPureDESKey(pKey, deskey1);
	_expandPureDESKey(pKey + 7, deskey2);
	_expandPureDESKey(pKey + 14, deskey3);

	// run the key setups
	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT) 
	{
		_keysetup(deskey1, KEYSETUP_ENCRYPTION, pCtx->k1);
		_keysetup(deskey2, KEYSETUP_DECRYPTION, pCtx->k2);
		_keysetup(deskey3, KEYSETUP_ENCRYPTION, pCtx->k3);
	}
	else 
	{
		_keysetup(deskey1, KEYSETUP_DECRYPTION, pCtx->k1);
		_keysetup(deskey2, KEYSETUP_ENCRYPTION, pCtx->k2);
		_keysetup(deskey3, KEYSETUP_DECRYPTION, pCtx->k3);
	}

	// delete the DES keys
	for (nI = 0; nI < 8; nI++) 
	{
		deskey1[nI] = 0;
		deskey2[nI] = 0;
		deskey3[nI] = 0;
	}

	// for encryption create a CBC IV
	pbInit = (WORD8*) pInitData;
	if (lMode == CIPHER_MODE_ENCRYPT)
	{
		GetRndBytes(pbInit, TRIPLEDES_BLOCKSIZE, pRndGenData);
	}

	if (pCtx->blLegacy)
	{
		// the old code stored everything completely reversed
		_blkcpy_r(pbInit, pCtx->cbciv);
	}
	else
	{
		_blkcpy(pbInit, pCtx->cbciv);
	}

	// FIXME: weak keys in triple-DES?
	return CIPHER_ERROR_NOERROR;
}


void TripleDES_ResetWorkContext
(void* pContext,
 WORD32 lMode,
 void* pInitData,
 Cipher_RandomGenerator GetRndBytes,
 const void* pRndGenData) 
{
	TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext;

	// just reset the CBC IV 
	WORD8* pbInit = (WORD8*) pInitData;
	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT)
		GetRndBytes(pbInit, TRIPLEDES_BLOCKSIZE, pRndGenData);

	if (pCtx->blLegacy)
	{
		_blkcpy_r(pbInit, pCtx->cbciv);
	}
	else
	{
		_blkcpy(pbInit, pCtx->cbciv);
	}
}



WORD32 TripleDES_DestroyWorkContext
(void* pContext) 
{
	// clear the context
	int nI;
	WORD8* pClearIt = (WORD8*) pContext;
	for (nI = 0; nI < sizeof(TRIPLEDESCTX); nI++) 
		pClearIt[nI] = 0x00;
	return CIPHER_ERROR_NOERROR;
}



void TripleDES_EncryptBuffer
(void* pContext,
 const void* pSource,
 void* pTarget,
 WORD32 lNumOfBytes) 
{
	WORD32 lI, lJ;
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext;

	lNumOfBytes &= ~(TRIPLEDES_BLOCKSIZE - 1);

	// work through all blocks... 
	for (lI = 0; lI < lNumOfBytes; lI += TRIPLEDES_BLOCKSIZE) 
	{
		// copy and chain the recent block 
		if (pCtx->blLegacy)
		{
			// (we have to bring back the CBC IV into 64bit little endian)
			for (lJ = 0; lJ < TRIPLEDES_BLOCKSIZE; lJ++)
				pbOut[lI + lJ] = pbIn[lI + lJ] ^ pCtx->cbciv[(TRIPLEDES_BLOCKSIZE - 1) - lJ];
		}
		else
		{
			for (lJ = 0; lJ < TRIPLEDES_BLOCKSIZE; lJ++)
				pbOut[lI + lJ] = pbIn[lI + lJ] ^ pCtx->cbciv[lJ];
		}

		// encrypt the block
		_processBlock(&pbOut[lI], &pbOut[lI], pCtx->k1);
		_processBlock(&pbOut[lI], &pbOut[lI], pCtx->k2);
		_processBlock(&pbOut[lI], &pbOut[lI], pCtx->k3);

		// set the new CBC IV (same as above)
		if (pCtx->blLegacy)
		{
			_blkcpy_r(&pbOut[lI], pCtx->cbciv);
		}
		else
		{
			_blkcpy(&pbOut[lI], pCtx->cbciv);
		}
	}
}



void TripleDES_DecryptBuffer
(void* pContext,
 const void* pSource,
 void* pTarget, 
 WORD32 lNumOfBytes,
 const void* pPreviousBlock) 
{
	WORD32 lI, lJ;
	WORD8 saveiv[TRIPLEDES_BLOCKSIZE];
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	WORD8* pbPrev;
	TRIPLEDESCTX* pCtx = (TRIPLEDESCTX*) pContext;

	lNumOfBytes &= ~(TRIPLEDES_BLOCKSIZE - 1);

	// load a new CBC IV, if necessary 
	if (pPreviousBlock != CIPHER_NULL)  
	{
		pbPrev = (WORD8*)pPreviousBlock;
		if (pCtx->blLegacy)
		{
			_blkcpy_r(pbPrev, pCtx->cbciv);
		}
		else
		{
			_blkcpy(pbPrev, pCtx->cbciv);
		}
	}

	// work through all blocks... 
	for (lI = 0; lI < lNumOfBytes; lI += 8) 
	{
		// save the recent CBC IV (don't care for the layout right now)
		_blkcpy(&pbIn[lI], saveiv);

		// decrypt the block 
		_processBlock(&pbIn [lI], &pbOut[lI], pCtx->k3);
		_processBlock(&pbOut[lI], &pbOut[lI], pCtx->k2);
		_processBlock(&pbOut[lI], &pbOut[lI], pCtx->k1);

		// dechain the recent block
		if (pCtx->blLegacy)
		{
			// same as above: bring back the IV into the old format
			for (lJ = 0; lJ < TRIPLEDES_BLOCKSIZE; lJ++)
				pbOut[lI + lJ] ^= pCtx->cbciv[(TRIPLEDES_BLOCKSIZE - 1) - lJ];
		}
		else
		{
			for (lJ = 0; lJ < TRIPLEDES_BLOCKSIZE; lJ++)
				pbOut[lI + lJ] ^= pCtx->cbciv[lJ];
		}

		// set the new CBC IV (normalized)
		if (pCtx->blLegacy)
		{
			_blkcpy_r(saveiv, pCtx->cbciv);
		}
		else
		{
			_blkcpy(saveiv, pCtx->cbciv);
		}
	}
}

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


// support routines implementation...


// constant stuff...

static WORD8 pc1[56] = 
{
	56, 48, 40, 32, 24, 16,  8,  0, 57, 49, 41, 33, 25, 17,
	9,  1, 58, 50, 42, 34, 26, 18, 10,  2, 59, 51, 43, 35,
	62, 54, 46, 38, 30, 22, 14,  6, 61, 53, 45, 37, 29, 21,
	13,  5, 60, 52, 44, 36, 28, 20, 12,  4, 27, 19, 11,  3 
};

static WORD8 totrot[16] = 
{
	1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 
};

static WORD8 pc2[48] = 
{
	13, 16, 10, 23,  0,  4,  2, 27, 14,  5, 20,  9,
	22, 18, 11,  3, 25,  7, 15,  6, 26, 19, 12,  1,
	40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
	43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 
};


static WORD16 bytebit[8] = 
{
	0200, 0100, 040, 020, 010, 04, 02, 01 
};

static WORD32 bigbyte[24] = 
{
	0x800000L,  0x400000L,  0x200000L,  0x100000L,
	0x80000L,   0x40000L,   0x20000L,   0x10000L,
	0x8000L,    0x4000L,    0x2000L,    0x1000L,
	0x800L,     0x400L,     0x200L,     0x100L,
	0x80L,      0x40L,      0x20L,      0x10L,
	0x8L,       0x4L,       0x2L,       0x1L    
};

static unsigned long SP1[64] = 
{
	0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
	0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
	0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
	0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
	0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
	0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
	0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
	0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
	0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
	0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
	0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
	0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
	0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
	0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
	0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久ai换脸 | 免费国产亚洲视频| 精品国产凹凸成av人网站| 99精品国产视频| 另类小说一区二区三区| 亚洲女人小视频在线观看| 欧美男同性恋视频网站| 豆国产96在线|亚洲| 一区二区三区不卡在线观看 | 99精品视频在线观看| 亚洲一区二区欧美激情| 久久人人超碰精品| 欧美日韩视频在线观看一区二区三区| 久久99精品久久久久婷婷| 亚洲精品伦理在线| 久久一区二区三区国产精品| 色久优优欧美色久优优| 国产在线视频精品一区| 亚洲午夜久久久久久久久久久| 亚洲精品一区二区三区蜜桃下载| 91福利视频在线| 懂色av噜噜一区二区三区av| 天使萌一区二区三区免费观看| 欧美国产日韩一二三区| 欧美成人一区二区| 欧美日韩免费观看一区三区| 成人黄页在线观看| 狠狠色2019综合网| 日产国产欧美视频一区精品| 国产精品乱子久久久久| 欧美精品久久天天躁| 成人白浆超碰人人人人| 国产成人免费9x9x人网站视频| 国产精品国产精品国产专区不蜜 | 婷婷久久综合九色综合绿巨人| 国产午夜精品一区二区三区嫩草| 欧美精品在线观看一区二区| 91一区在线观看| 国产一区二区三区av电影| 图片区小说区国产精品视频| 亚洲精品一二三四区| 欧美国产成人精品| 91精品国产综合久久精品麻豆 | 一级中文字幕一区二区| 国产精品久久久久久久第一福利| 国产亚洲污的网站| 2022国产精品视频| 欧美videossexotv100| 91麻豆精品久久久久蜜臀| 欧美午夜精品电影| 色综合久久久网| 99re这里只有精品首页| kk眼镜猥琐国模调教系列一区二区| 激情av综合网| 国产在线精品视频| 国精品**一区二区三区在线蜜桃| 久久综合综合久久综合| 蜜臀av性久久久久蜜臀av麻豆| 日日夜夜一区二区| 日韩电影一区二区三区| 亚洲一级二级三级| 亚洲成人av中文| 日日嗨av一区二区三区四区| 日本不卡123| 激情丁香综合五月| 国产精品一区二区果冻传媒| 国产黄色91视频| 成人精品视频.| 91免费国产在线| 欧美日韩一级片在线观看| 色综合 综合色| 在线影视一区二区三区| 欧美色男人天堂| 精品久久一二三区| 欧美激情综合在线| 亚洲卡通欧美制服中文| 亚洲大片在线观看| 美女视频黄频大全不卡视频在线播放| 麻豆精品视频在线观看| 国产91在线观看| 欧洲激情一区二区| 精品人伦一区二区色婷婷| 国产欧美日韩视频一区二区| 国产精品夫妻自拍| 午夜亚洲福利老司机| 日本美女一区二区三区| 丁香啪啪综合成人亚洲小说| 91免费看片在线观看| 日韩三级免费观看| 国产精品青草久久| 亚洲国产精品久久艾草纯爱| 久久99久久久久| 97se亚洲国产综合自在线观| 6080yy午夜一二三区久久| 久久免费午夜影院| 成人欧美一区二区三区黑人麻豆| 天天做天天摸天天爽国产一区| 亚洲成av人片在线观看| 国产一区二区成人久久免费影院| 91视频.com| 欧美电视剧在线看免费| 中文字幕五月欧美| 蜜臀av亚洲一区中文字幕| 99精品欧美一区二区蜜桃免费| av在线一区二区| 日韩欧美成人激情| 一区二区三区欧美| 国模套图日韩精品一区二区 | 久久91精品国产91久久小草| 成人黄色大片在线观看| 欧美一区二区在线免费播放| 中文字幕第一区二区| 日本成人在线电影网| 色诱视频网站一区| 6080yy午夜一二三区久久| 欧美精品tushy高清| 精品999久久久| 亚洲人成在线播放网站岛国| 久草中文综合在线| 欧美日韩视频在线一区二区| 久久蜜桃一区二区| 免费观看日韩电影| 欧美视频三区在线播放| 国产精品人成在线观看免费| 调教+趴+乳夹+国产+精品| 99久久er热在这里只有精品15 | 国产精品美女久久久久久久久| 《视频一区视频二区| 美国欧美日韩国产在线播放| 国产成人免费视频一区| 色综合天天性综合| 久久九九99视频| 精品亚洲成a人在线观看| 欧美年轻男男videosbes| 一二三四区精品视频| 99综合电影在线视频| 日本一区二区在线不卡| 国产真实精品久久二三区| 欧美一级欧美一级在线播放| 亚洲福利一二三区| 欧美在线小视频| 中文字幕国产精品一区二区| 国内精品国产三级国产a久久| 欧美成人aa大片| 久久99热国产| 欧美成人三级电影在线| 久久99精品一区二区三区| 欧美视频在线一区二区三区| 久久亚洲精品国产精品紫薇| 免费成人av在线| 欧美日韩国产一二三| 亚洲黄色尤物视频| 丰满岳乱妇一区二区三区| 欧美一级日韩一级| 另类小说一区二区三区| 欧美精品精品一区| 婷婷综合五月天| 日韩精品在线一区| 国产乱码精品一区二区三| 国产日韩成人精品| 成人午夜av影视| 亚洲色图在线播放| 在线观看亚洲专区| 亚洲激情一二三区| 久久国产日韩欧美精品| 欧美一区二区三级| 久久精品国产99久久6| 久久伊人中文字幕| 成人高清av在线| 亚洲美女少妇撒尿| 欧美精品乱码久久久久久| 免费成人在线观看| 欧美成人女星排行榜| 蜜臀av性久久久久av蜜臀妖精| 久久亚洲一区二区三区四区| gogo大胆日本视频一区| 亚洲国产视频在线| 91精品久久久久久久91蜜桃| 亚洲国产aⅴ成人精品无吗| 欧美欧美欧美欧美| 精品系列免费在线观看| 国产精品久线观看视频| 成人福利在线看| 日本一二三不卡| 欧洲亚洲精品在线| 另类欧美日韩国产在线| 国产精品欧美久久久久一区二区| 色婷婷av一区二区三区之一色屋| 日韩中文字幕不卡| 国产精品色噜噜| 欧美日本一道本在线视频| 免费xxxx性欧美18vr| 国产日韩成人精品| 欧美美女直播网站| 久久精品99久久久| 99精品视频在线免费观看| 日本欧美一区二区三区| 中文字幕永久在线不卡| 在线播放91灌醉迷j高跟美女 | 日韩欧美亚洲一区二区|