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

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

?? xormac.h

?? 此文件是實現(xiàn)加解密算法的函數(shù)庫
?? H
字號:
// xormac.h - written and placed in the public domain by Wei Dai

#ifndef CRYPTOPP_XORMAC_H
#define CRYPTOPP_XORMAC_H

#include "iterhash.h"
#include "argnames.h"

NAMESPACE_BEGIN(CryptoPP)

template <class T> struct DigestSizeSubtract4Workaround {enum {RESULT = T::DIGESTSIZE-4};};	// VC60 workaround

template <class T>
class XMACC_Base : public FixedKeyLength<DigestSizeSubtract4Workaround<T>::RESULT, SimpleKeyingInterface::INTERNALLY_GENERATED_IV>, 
					public IteratedHash<typename T::HashWordType, typename T::ByteOrderClass, T::BLOCKSIZE, MessageAuthenticationCode>
{
public:
	static std::string StaticAlgorithmName() {return std::string("XMAC(") + T::StaticAlgorithmName() + ")";}
	enum {DIGESTSIZE = 4+T::DIGESTSIZE};
	typedef typename T::HashWordType HashWordType;

	XMACC_Base() : IteratedHash<HashWordType, CPP_TYPENAME T::ByteOrderClass, T::BLOCKSIZE, MessageAuthenticationCode>(T::DIGESTSIZE) {}

	void CheckedSetKey(void *, Empty empty, const byte *key, unsigned int length, const NameValuePairs &params);
	void Resynchronize(const byte *IV)
	{
		GetWord(false, BIG_ENDIAN_ORDER, m_counter, IV);
		Restart();
	}
	unsigned int IVSize() const
		{return 4;}
	void GetNextIV(byte *IV)
	{
		if (m_counter == 0xffffffff)
			throw NotImplemented("XMACC: must have a valid counter to get next IV");
		PutWord(false, BIG_ENDIAN_ORDER, IV, m_counter+1);
	}

	word32 CurrentCounter() const {return m_counter;}

	void TruncatedFinal(byte *mac, unsigned int size);
	bool TruncatedVerify(const byte *mac, unsigned int length);
	unsigned int DigestSize() const {return DIGESTSIZE;}	// need to override this

private:
	void Init();
	static void WriteWord32(byte *output, word32 value);
	static void XorDigest(HashWordType *digest, const HashWordType *buffer);
	void vTransform(const HashWordType *data);

	FixedSizeSecBlock<byte, DigestSizeSubtract4Workaround<T>::RESULT> m_key;
	enum {BUFFER_SIZE = ((T::DIGESTSIZE) / sizeof(HashWordType))};	// VC60 workaround
	FixedSizeSecBlock<HashWordType, BUFFER_SIZE> m_buffer;
	word32 m_counter, m_index;
};

//! <a href="http://www.weidai.com/scan-mirror/mac.html#XMAC">XMAC</a>
/*! If you need to generate MACs with XMACC (instead of just verifying them),
	you must save the counter before destroying an XMACC object
	and reinitialize it the next time you create an XMACC with the same key.
	Start counter at 0 when using a key for the first time. */
template <class T>
class XMACC : public MessageAuthenticationCodeTemplate<XMACC_Base<T> >
{
public:
	XMACC() {}
	XMACC(const byte *key, word32 counter = 0xffffffff)
		{SetKey(key, KEYLENGTH, MakeParameters(Name::XMACC_Counter(), counter));}
};

template <class T> void XMACC_Base<T>::CheckedSetKey(void *, Empty empty, const byte *key, unsigned int length, const NameValuePairs &params)
{
	ThrowIfInvalidKeyLength(length);
	m_counter = 0xffffffff;
	const byte *iv = NULL;
	if (params.GetValue(Name::IV(), iv))
		GetWord(false, BIG_ENDIAN_ORDER, m_counter, iv);
	else
		params.GetValue(Name::XMACC_Counter(), m_counter);
	memcpy(m_key, key, KEYLENGTH);
	Init();
}

template <class T> void XMACC_Base<T>::Init()
{
	m_index = 0x80000000;
	memset(m_digest, 0, T::DIGESTSIZE);
}

template <class T> inline void XMACC_Base<T>::WriteWord32(byte *output, word32 value)
{
	output[0] = byte(value >> 24);
	output[1] = byte(value >> 16);
	output[2] = byte(value >> 8);
	output[3] = byte(value);
}

template <class T> inline void XMACC_Base<T>::XorDigest(HashWordType *digest, const HashWordType *buffer)
{
	for (unsigned i=0; i<(T::DIGESTSIZE/sizeof(HashWordType)); i++)
		digest[i] ^= buffer[i];
}

template <class T> void XMACC_Base<T>::vTransform(const HashWordType *input)
{
	memcpy(m_buffer, m_key, KEYLENGTH);
	WriteWord32((byte *)m_buffer.begin()+KEYLENGTH, ++m_index);
	T::CorrectEndianess(m_buffer, m_buffer, T::DIGESTSIZE);
	T::Transform(m_buffer, input);
	XorDigest(m_digest, m_buffer);
}

template <class T> void XMACC_Base<T>::TruncatedFinal(byte *mac, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);
	if (size < 4)
		throw InvalidArgument("XMACC: truncating the MAC to less than 4 bytes will cause it to be unverifiable");
	if (m_counter == 0xffffffff)
		throw InvalidArgument("XMACC: the counter must be initialized to a valid value for MAC generation");

	PadLastBlock(BLOCKSIZE - 2*sizeof(HashWordType));
	CorrectEndianess(m_data, m_data, BLOCKSIZE - 2*sizeof(HashWordType));
	m_data[m_data.size()-2] = ByteReverse(GetBitCountHi());	// byteReverse for backwards compatibility
	m_data[m_data.size()-1] = ByteReverse(GetBitCountLo());
	vTransform(m_data);

	memcpy(m_buffer, m_key, KEYLENGTH);
	WriteWord32((byte *)m_buffer.begin()+KEYLENGTH, 0);
	memset(m_data, 0, BLOCKSIZE-4);
	WriteWord32((byte *)m_data.begin()+BLOCKSIZE-4, ++m_counter);
	T::CorrectEndianess(m_buffer, m_buffer, T::DIGESTSIZE);
	T::CorrectEndianess(m_data, m_data, BLOCKSIZE);
	T::Transform(m_buffer, m_data);
	XorDigest(m_digest, m_buffer);

	WriteWord32(mac, m_counter);
	T::CorrectEndianess(m_digest, m_digest, T::DIGESTSIZE);
	memcpy(mac+4, m_digest, size-4);

	Restart();		// reinit for next use
}

template <class T> bool XMACC_Base<T>::TruncatedVerify(const byte *mac, unsigned int size)
{
	assert(4 <= size && size <= DIGESTSIZE);

	PadLastBlock(BLOCKSIZE - 2*sizeof(HashWordType));
	CorrectEndianess(m_data, m_data, BLOCKSIZE - 2*sizeof(HashWordType));
	m_data[m_data.size()-2] = ByteReverse(GetBitCountHi());	// byteReverse for backwards compatibility
	m_data[m_data.size()-1] = ByteReverse(GetBitCountLo());
	vTransform(m_data);

	memcpy(m_buffer, m_key, KEYLENGTH);
	WriteWord32((byte *)m_buffer.begin()+KEYLENGTH, 0);
	memset(m_data, 0, BLOCKSIZE-4);
	memcpy((byte *)m_data.begin()+BLOCKSIZE-4, mac, 4);
	T::CorrectEndianess(m_buffer, m_buffer, T::DIGESTSIZE);
	T::CorrectEndianess(m_data, m_data, BLOCKSIZE);
	T::Transform(m_buffer, m_data);
	XorDigest(m_digest, m_buffer);

	T::CorrectEndianess(m_digest, m_digest, T::DIGESTSIZE);
	bool macValid = (memcmp(mac+4, m_digest, size-4) == 0);
	Restart();		// reinit for next use
	return macValid;
}

NAMESPACE_END

#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品视频| 欧美日韩精品欧美日韩精品一 | 麻豆精品视频在线观看免费 | 2023国产精华国产精品| 亚洲欧美色一区| 一本到不卡精品视频在线观看| 欧美日韩一本到| 亚洲一卡二卡三卡四卡无卡久久| 日韩成人午夜精品| 日韩欧美视频一区| 国产精品综合视频| 日韩一区在线免费观看| 色综合久久久久网| 亚洲综合丁香婷婷六月香| 在线视频观看一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人毛片老司机大片| 亚洲婷婷在线视频| 欧美日韩国产精品自在自线| 亚洲一区二区三区在线| 4438x亚洲最大成人网| 麻豆成人免费电影| 国产精品的网站| 欧美日韩国产一级| 国产馆精品极品| 亚洲日本一区二区| 91麻豆精品国产91久久久 | 欧美mv和日韩mv国产网站| 国产一二精品视频| 国产日产精品一区| 在线视频欧美区| 日本aⅴ免费视频一区二区三区| 在线区一区二视频| 日韩精品三区四区| 国产精品美日韩| 在线成人小视频| 成人午夜又粗又硬又大| 亚洲高清免费在线| 中文字幕免费在线观看视频一区| 国产一区视频在线看| 亚洲色图19p| 精品sm捆绑视频| 在线观看免费视频综合| 国产精品一区二区三区99| 日韩理论电影院| 欧美成人女星排名| 欧美午夜精品一区二区蜜桃| 国产真实乱偷精品视频免| 亚洲一区二区在线免费看| 26uuu国产在线精品一区二区| 久久国产精品一区二区| 一区二区三区不卡视频在线观看 | 成人h动漫精品一区二区| 亚洲123区在线观看| 久久久久久久免费视频了| 欧美视频三区在线播放| 波多野结衣在线aⅴ中文字幕不卡| 欧美高清在线一区| 欧美精品v国产精品v日韩精品| 日韩av一区二区在线影视| 国产精品久久久久永久免费观看| 99精品一区二区| 国产河南妇女毛片精品久久久| 国产午夜精品理论片a级大结局| 国产精品77777竹菊影视小说| 国产亚洲欧美日韩俺去了| 欧美裸体一区二区三区| 91美女在线视频| 成人h精品动漫一区二区三区| 一区二区三区鲁丝不卡| 国产精品初高中害羞小美女文| av激情成人网| 成人综合在线观看| 久久精品国产免费| 美洲天堂一区二卡三卡四卡视频 | 日本道色综合久久| 波多野结衣在线aⅴ中文字幕不卡| 中文字幕一区在线观看视频| 337p粉嫩大胆噜噜噜噜噜91av| 99视频一区二区三区| 成人午夜看片网址| 成人精品视频一区| 成人午夜私人影院| 99久久er热在这里只有精品15| 一区二区在线观看免费 | av网站免费线看精品| 成人污污视频在线观看| 日本成人中文字幕在线视频| 久久99精品久久久久婷婷| 久久免费电影网| 在线播放/欧美激情| 国产精品丝袜黑色高跟| 在线精品视频小说1| 国产一区二区按摩在线观看| 精品系列免费在线观看| 国产一区二区三区综合| 国产乱码字幕精品高清av | 91免费国产在线观看| 99re这里只有精品6| 一本大道av伊人久久综合| 色婷婷亚洲一区二区三区| 一本久久综合亚洲鲁鲁五月天| 日韩av中文在线观看| 日韩av一区二| 欧美日韩中文字幕精品| 欧美美女喷水视频| 欧美精品一区二区三区蜜桃| 国产色婷婷亚洲99精品小说| 国产亚洲欧洲997久久综合| 久久 天天综合| 国产+成+人+亚洲欧洲自线| 99久久夜色精品国产网站| 欧美午夜影院一区| 精品福利av导航| 亚洲欧美日韩久久精品| 日本vs亚洲vs韩国一区三区二区| 国产精品区一区二区三区| 亚洲综合清纯丝袜自拍| 九九九精品视频| 色综合久久久久综合| 欧美一区二区网站| 中文字幕在线一区免费| 视频在线在亚洲| 成人自拍视频在线观看| 欧美日韩精品欧美日韩精品一综合| 成人激情免费视频| 欧美男男青年gay1069videost| 色婷婷香蕉在线一区二区| 日韩欧美在线综合网| 中文字幕一区二区三区av| 日韩精品欧美精品| 99久久婷婷国产综合精品 | 日韩一区二区麻豆国产| 久久奇米777| 亚洲一区二区精品3399| 国产成人8x视频一区二区| 欧美男同性恋视频网站| 欧美激情艳妇裸体舞| 热久久国产精品| 91一区二区在线| 国产日产欧美精品一区二区三区| 久久嫩草精品久久久精品一| 一区二区免费在线播放| 成人性生交大片免费| 日韩欧美美女一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 自拍偷拍国产精品| 国产精品1024久久| 日韩欧美自拍偷拍| 亚洲bt欧美bt精品| 色哟哟一区二区在线观看| 日韩免费观看高清完整版 | 国产精品美女久久久久久| 日本三级亚洲精品| 欧美三级视频在线| 一区二区三区中文字幕| 成人国产精品免费网站| 国产天堂亚洲国产碰碰| 看电影不卡的网站| 日韩视频一区二区| 日韩成人精品在线观看| 欧美日韩成人在线一区| 一区二区三区四区激情| 粉嫩嫩av羞羞动漫久久久| 久久久久综合网| 国产一区二区三区久久久| 精品盗摄一区二区三区| 久久精品国产色蜜蜜麻豆| 日韩免费成人网| 久久精品99久久久| 精品欧美一区二区久久| 美女www一区二区| 日韩精品中文字幕在线不卡尤物| 中文字幕av资源一区| 成人激情电影免费在线观看| 国产欧美日韩中文久久| 成人一区在线观看| 国产喂奶挤奶一区二区三区| 国产成人精品影视| 国产精品另类一区| 99re免费视频精品全部| 日韩一区在线看| 欧美伊人久久久久久久久影院| 欧美精品一区二区三| 国产毛片精品一区| 国产精品理伦片| 在线看国产一区二区| 夜夜夜精品看看| 欧美一级免费观看| 日韩高清不卡在线| 欧美成人精品高清在线播放| 国内精品久久久久影院薰衣草| 欧美伊人久久久久久久久影院 | 欧美zozozo| 91精品蜜臀在线一区尤物| 久久精品国产在热久久| 91精品麻豆日日躁夜夜躁| 久久精工是国产品牌吗| 久久久综合精品| 色综合久久中文字幕综合网|