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

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

?? modes.cpp

?? 加密函數庫:包括多種加密解密算法,數字簽名,散列算法
?? CPP
字號:
// modes.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "modes.h"

#include "des.h"

#include "strciphr.cpp"

NAMESPACE_BEGIN(CryptoPP)

void Modes_TestInstantiations()
{
	CFB_Mode<DES>::Encryption m0;
	CFB_Mode<DES>::Decryption m1;
	OFB_Mode<DES>::Encryption m2;
	CTR_Mode<DES>::Encryption m3;
	ECB_Mode<DES>::Encryption m4;
	CBC_Mode<DES>::Encryption m5;
}

// explicit instantiations for Darwin gcc-932.1
template class CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher> >;
template class CFB_EncryptionTemplate<>;
template class CFB_DecryptionTemplate<>;
template class AdditiveCipherTemplate<>;
template class CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
template class CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
template class CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, CFB_ModePolicy> >;
template class AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, OFB_ModePolicy> >;
template class AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, CTR_ModePolicy> >;

void CipherModeBase::SetKey(const byte *key, unsigned int length, const NameValuePairs &params)
{
	UncheckedSetKey(params, key, length);	// the underlying cipher will check the key length
}

void CipherModeBase::GetNextIV(byte *IV)
{
	if (!IsForwardTransformation())
		throw NotImplemented("CipherModeBase: GetNextIV() must be called on an encryption object");

	m_cipher->ProcessBlock(m_register);
	memcpy(IV, m_register, BlockSize());
}

void CipherModeBase::SetIV(const byte *iv)
{
	if (iv)
		Resynchronize(iv);
	else if (IsResynchronizable())
	{
		if (!CanUseStructuredIVs())
			throw InvalidArgument("CipherModeBase: this cipher mode cannot use a null IV");

		// use all zeros as default IV
		SecByteBlock iv(BlockSize());
		memset(iv, 0, iv.size());
		Resynchronize(iv);
	}
}

void CTR_ModePolicy::SeekToIteration(dword iterationCount)
{
	int carry=0;
	for (int i=BlockSize()-1; i>=0; i--)
	{
		unsigned int sum = m_register[i] + byte(iterationCount) + carry;
		m_counterArray[i] = (byte) sum;
		carry = sum >> 8;
		iterationCount >>= 8;
	}
}

static inline void IncrementCounterByOne(byte *inout, unsigned int s)
{
	for (int i=s-1, carry=1; i>=0 && carry; i--)
		carry = !++inout[i];
}

static inline void IncrementCounterByOne(byte *output, const byte *input, unsigned int s)
{
	for (int i=s-1, carry=1; i>=0; i--)
		carry = !(output[i] = input[i]+carry) && carry;
}

inline void CTR_ModePolicy::ProcessMultipleBlocks(byte *output, const byte *input, unsigned int n)
{
	unsigned int s = BlockSize(), j = 0;
	for (unsigned int i=1; i<n; i++, j+=s)
		IncrementCounterByOne(m_counterArray + j + s, m_counterArray + j, s);
	m_cipher->ProcessAndXorMultipleBlocks(m_counterArray, input, output, n);
	IncrementCounterByOne(m_counterArray, m_counterArray + s*(n-1), s);
}

void CTR_ModePolicy::OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, unsigned int iterationCount)
{
	unsigned int maxBlocks = m_cipher->OptimalNumberOfParallelBlocks();
	if (maxBlocks == 1)
	{
		unsigned int sizeIncrement = BlockSize();
		while (iterationCount)
		{
			m_cipher->ProcessAndXorBlock(m_counterArray, input, output);
			IncrementCounterByOne(m_counterArray, sizeIncrement);
			output += sizeIncrement;
			input += sizeIncrement;
			iterationCount -= 1;
		}
	}
	else
	{
		unsigned int sizeIncrement = maxBlocks * BlockSize();
		while (iterationCount >= maxBlocks)
		{
			ProcessMultipleBlocks(output, input, maxBlocks);
			output += sizeIncrement;
			input += sizeIncrement;
			iterationCount -= maxBlocks;
		}
		if (iterationCount > 0)
			ProcessMultipleBlocks(output, input, iterationCount);
	}
}

void CTR_ModePolicy::CipherResynchronize(byte *keystreamBuffer, const byte *iv)
{
	unsigned int s = BlockSize();
	memcpy(m_register, iv, s);
	m_counterArray.New(s * m_cipher->OptimalNumberOfParallelBlocks());
	memcpy(m_counterArray, iv, s);
}

void BlockOrientedCipherModeBase::UncheckedSetKey(const NameValuePairs &params, const byte *key, unsigned int length)
{
	m_cipher->SetKey(key, length, params);
	ResizeBuffers();
	const byte *iv = params.GetValueWithDefault(Name::IV(), (const byte *)NULL);
	SetIV(iv);
}

void BlockOrientedCipherModeBase::ProcessData(byte *outString, const byte *inString, unsigned int length)
{
	unsigned int s = BlockSize();
	assert(length % s == 0);
	unsigned int alignment = m_cipher->BlockAlignment();
	bool inputAlignmentOk = !RequireAlignedInput() || IsAlignedOn(inString, alignment);

	if (IsAlignedOn(outString, alignment))
	{
		if (inputAlignmentOk)
			ProcessBlocks(outString, inString, length / s);
		else
		{
			memcpy(outString, inString, length);
			ProcessBlocks(outString, outString, length / s);
		}
	}
	else
	{
		while (length)
		{
			if (inputAlignmentOk)
				ProcessBlocks(m_buffer, inString, 1);
			else
			{
				memcpy(m_buffer, inString, s);
				ProcessBlocks(m_buffer, m_buffer, 1);
			}
			memcpy(outString, m_buffer, s);
			inString += s;
			outString += s;
			length -= s;
		}
	}
}

void CBC_Encryption::ProcessBlocks(byte *outString, const byte *inString, unsigned int numberOfBlocks)
{
	unsigned int blockSize = BlockSize();
	while (numberOfBlocks--)
	{
		xorbuf(m_register, inString, blockSize);
		m_cipher->ProcessBlock(m_register);
		memcpy(outString, m_register, blockSize);
		inString += blockSize;
		outString += blockSize;
	}
}

void CBC_CTS_Encryption::ProcessLastBlock(byte *outString, const byte *inString, unsigned int length)
{
	if (length <= BlockSize())
	{
		if (!m_stolenIV)
			throw InvalidArgument("CBC_Encryption: message is too short for ciphertext stealing");

		// steal from IV
		memcpy(outString, m_register, length);
		outString = m_stolenIV;
	}
	else
	{
		// steal from next to last block
		xorbuf(m_register, inString, BlockSize());
		m_cipher->ProcessBlock(m_register);
		inString += BlockSize();
		length -= BlockSize();
		memcpy(outString+BlockSize(), m_register, length);
	}

	// output last full ciphertext block
	xorbuf(m_register, inString, length);
	m_cipher->ProcessBlock(m_register);
	memcpy(outString, m_register, BlockSize());
}

void CBC_Decryption::ProcessBlocks(byte *outString, const byte *inString, unsigned int numberOfBlocks)
{
	unsigned int blockSize = BlockSize();
	while (numberOfBlocks--)
	{
		memcpy(m_temp, inString, blockSize);
		m_cipher->ProcessBlock(m_temp, outString);
		xorbuf(outString, m_register, blockSize);
		m_register.swap(m_temp);
		inString += blockSize;
		outString += blockSize;
	}
}

void CBC_CTS_Decryption::ProcessLastBlock(byte *outString, const byte *inString, unsigned int length)
{
	const byte *pn, *pn1;
	bool stealIV = length <= BlockSize();

	if (stealIV)
	{
		pn = inString;
		pn1 = m_register;
	}
	else
	{
		pn = inString + BlockSize();
		pn1 = inString;
		length -= BlockSize();
	}

	// decrypt last partial plaintext block
	memcpy(m_temp, pn1, BlockSize());
	m_cipher->ProcessBlock(m_temp);
	xorbuf(m_temp, pn, length);

	if (stealIV)
		memcpy(outString, m_temp, length);
	else
	{
		memcpy(outString+BlockSize(), m_temp, length);
		// decrypt next to last plaintext block
		memcpy(m_temp, pn, length);
		m_cipher->ProcessBlock(m_temp);
		xorbuf(outString, m_temp, m_register, BlockSize());
	}
}

NAMESPACE_END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日产欧产美韩系列久久99| 日韩精品一二三四| 久久久精品tv| 精品国产三级电影在线观看| 欧美一区三区四区| 欧美一区二区三区四区高清| 欧美精品丝袜久久久中文字幕| 欧美影院一区二区| 9191久久久久久久久久久| 欧美性感一类影片在线播放| 欧美久久久久久久久| 欧美一级高清大全免费观看| 精品乱码亚洲一区二区不卡| 国产亚洲精品aa| 综合精品久久久| 亚洲国产欧美在线| 日韩一区精品字幕| 国产精品99久久不卡二区| 不卡的av中国片| 欧美色视频一区| 日韩欧美高清dvd碟片| 精品国偷自产国产一区| 国产精品久久国产精麻豆99网站| 亚洲欧美在线高清| 香蕉成人啪国产精品视频综合网 | 久久成人免费电影| 国产成人一级电影| 日本二三区不卡| 欧美电影免费观看高清完整版在| 中文字幕欧美区| 亚洲h在线观看| 国产麻豆精品视频| 欧美日韩色综合| 国产亚洲精品中文字幕| 亚洲国产视频一区| 国产一区二区美女诱惑| 在线免费不卡电影| 久久一区二区视频| 亚洲一区在线观看免费观看电影高清| 日本vs亚洲vs韩国一区三区二区| 成人黄色一级视频| 日韩三级伦理片妻子的秘密按摩| 国产精品久久国产精麻豆99网站| 视频一区二区国产| 91麻豆swag| 久久久亚洲午夜电影| 亚洲成av人片在线观看| 成人黄动漫网站免费app| 欧美一级一级性生活免费录像| 国产精品麻豆欧美日韩ww| 麻豆精品国产91久久久久久| 在线区一区二视频| 中文字幕日韩一区| 国产精品一区二区视频| 欧美日韩一区在线观看| 日韩久久一区二区| 国产v综合v亚洲欧| 欧美精品一区二区在线播放| 日韩综合在线视频| 欧美日韩高清影院| 亚洲在线观看免费| 色婷婷一区二区| 亚洲欧洲日产国码二区| 国产麻豆精品视频| 久久久www成人免费无遮挡大片 | 久久久综合视频| 青青草国产成人99久久| 欧美日韩久久一区二区| 亚洲成人午夜电影| 欧美日本在线播放| 日韩和欧美一区二区| 337p亚洲精品色噜噜噜| 五月婷婷综合在线| 91精品国产入口在线| 亚洲成av人片一区二区梦乃| 欧美日本一道本| 天堂va蜜桃一区二区三区漫画版| 欧美中文字幕一区二区三区| 亚洲欧美另类久久久精品2019| 成人免费av在线| 亚洲欧美综合网| 一本色道a无线码一区v| 亚洲精品乱码久久久久久 | 亚洲不卡一区二区三区| 欧美性大战久久久久久久| 性久久久久久久久| 精品日韩99亚洲| 国产999精品久久久久久绿帽| 国产女人18毛片水真多成人如厕| 成人美女在线观看| 亚洲男人都懂的| 欧美精品 国产精品| 全国精品久久少妇| 国产日产欧美一区| 在线视频亚洲一区| 免费成人美女在线观看.| 久久久www成人免费毛片麻豆| av一区二区三区四区| 亚洲地区一二三色| 久久久99免费| 色综合天天综合网天天看片| 首页欧美精品中文字幕| 久久久午夜精品| 91国偷自产一区二区三区成为亚洲经典 | 亚洲一区视频在线| 欧美一级免费大片| 成人国产电影网| 午夜精品123| 久久一区二区三区国产精品| 色又黄又爽网站www久久| 久久精品72免费观看| 欧美国产在线观看| 欧美一级免费大片| 91蝌蚪porny九色| 国产一区二区三区四区在线观看| 国产精品乱码一区二三区小蝌蚪| 91黄色免费看| 大尺度一区二区| 免费成人在线影院| 一区二区三区欧美日| 久久色在线视频| 欧美丰满高潮xxxx喷水动漫| 成人亚洲一区二区一| 婷婷国产在线综合| 亚洲欧洲国产专区| 久久天堂av综合合色蜜桃网| 精品视频资源站| 色综合中文字幕国产 | 国产精品青草综合久久久久99| 欧美日韩免费电影| av在线播放成人| 国产成人av一区二区三区在线 | 色狠狠一区二区三区香蕉| 激情综合色综合久久| 亚洲一区二区三区自拍| 国产精品久久久久一区二区三区 | 欧美视频三区在线播放| www.日韩精品| 国产成人av一区二区| 久草精品在线观看| 日韩高清一级片| 亚洲综合小说图片| 亚洲综合色成人| 亚洲综合一区在线| 亚洲亚洲人成综合网络| 亚洲美女屁股眼交| 综合精品久久久| 成人免费在线视频观看| 国产日韩av一区| 国产精品无遮挡| 国产精品视频yy9299一区| 国产亚洲一区二区三区| 国产三级一区二区| 久久精品视频在线免费观看| 精品美女被调教视频大全网站| 欧美一级艳片视频免费观看| 91精品国产综合久久福利| 欧美一级黄色大片| 精品国产百合女同互慰| 久久精品一区蜜桃臀影院| 国产欧美日韩三级| 亚洲天堂免费在线观看视频| 亚洲欧美日韩中文播放| 樱花草国产18久久久久| 亚洲成人你懂的| 久久国产欧美日韩精品| 国产一区二区91| 成人精品国产一区二区4080| 不卡av免费在线观看| 91视频观看视频| 欧美人牲a欧美精品| 欧美一个色资源| 国产亚洲欧美日韩日本| 国产精品国产三级国产三级人妇| 亚洲精品乱码久久久久久日本蜜臀| 亚洲综合成人在线视频| 美女一区二区在线观看| 丁香啪啪综合成人亚洲小说| 一道本成人在线| 91精品麻豆日日躁夜夜躁| 久久精品亚洲麻豆av一区二区| 国产精品久久久久四虎| 午夜精品久久久久久| 国产精品原创巨作av| 色婷婷av一区二区三区之一色屋| 在线观看91av| 国产精品久久久久影院老司| 亚洲一级电影视频| 国产九九视频一区二区三区| 99精品欧美一区| 日韩一级视频免费观看在线| 中文字幕欧美激情| 蜜桃视频一区二区三区在线观看| 国产**成人网毛片九色 | 亚洲国产成人va在线观看天堂| 免费欧美高清视频| 色综合久久久久综合体桃花网| 91精品国产一区二区三区蜜臀| 国产精品久久久久久久久久免费看 | 99久久精品免费观看|