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

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

?? seckey.h

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

// This file contains helper classes/functions for implementing secret key algorithms.

#ifndef CRYPTOPP_SECKEY_H
#define CRYPTOPP_SECKEY_H

#include "cryptlib.h"
#include "misc.h"
#include "simple.h"

NAMESPACE_BEGIN(CryptoPP)

inline CipherDir ReverseCipherDir(CipherDir dir)
{
	return (dir == ENCRYPTION) ? DECRYPTION : ENCRYPTION;
}

//! .
template <unsigned int N>
class FixedBlockSize
{
public:
	enum {BLOCKSIZE = N};
};

// ************** rounds ***************

//! .
template <unsigned int R>
class FixedRounds
{
public:
	enum {ROUNDS = R};

protected:
	template <class T>
	static inline void CheckedSetKey(T *obj, CipherDir dir, const byte *key, unsigned int length, const NameValuePairs &param)
	{
		obj->ThrowIfInvalidKeyLength(length);
		int rounds = param.GetIntValueWithDefault("Rounds", ROUNDS);
		if (rounds != ROUNDS)
			throw InvalidRounds(obj->StaticAlgorithmName(), rounds);
		obj->UncheckedSetKey(dir, key, length);
	}
};

//! .
template <unsigned int D, unsigned int N=1, unsigned int M=INT_MAX>		// use INT_MAX here because enums are treated as signed ints
class VariableRounds
{
public:
	enum {DEFAULT_ROUNDS = D, MIN_ROUNDS = N, MAX_ROUNDS = M};
	static unsigned int StaticGetDefaultRounds(unsigned int keylength) {return DEFAULT_ROUNDS;}

protected:
	static inline void AssertValidRounds(unsigned int rounds)
	{
		assert(rounds >= MIN_ROUNDS && rounds <= MAX_ROUNDS);
	}

	template <class T>
	static inline void CheckedSetKey(T *obj, CipherDir dir, const byte *key, unsigned int length, const NameValuePairs &param)
	{
		obj->ThrowIfInvalidKeyLength(length);
		int rounds = param.GetIntValueWithDefault("Rounds", obj->StaticGetDefaultRounds(length));
		if (rounds < (unsigned int)MIN_ROUNDS || rounds > (unsigned int)MAX_ROUNDS)
			throw InvalidRounds(obj->AlgorithmName(), rounds);
		obj->UncheckedSetKey(dir, key, length, rounds);
	}
};

// ************** key length ***************

//! .
template <unsigned int N, unsigned int IV_REQ = SimpleKeyingInterface::NOT_RESYNCHRONIZABLE>
class FixedKeyLength
{
public:
	enum {KEYLENGTH=N, MIN_KEYLENGTH=N, MAX_KEYLENGTH=N, DEFAULT_KEYLENGTH=N};
	enum {IV_REQUIREMENT = IV_REQ};
	static unsigned int StaticGetValidKeyLength(unsigned int) {return KEYLENGTH;}
};

/// support query of variable key length, template parameters are default, min, max, multiple (default multiple 1)
template <unsigned int D, unsigned int N, unsigned int M, unsigned int Q = 1, unsigned int IV_REQ = SimpleKeyingInterface::NOT_RESYNCHRONIZABLE>
class VariableKeyLength
{
	// make these private to avoid Doxygen documenting them in all derived classes
	CRYPTOPP_COMPILE_ASSERT(Q > 0);
	CRYPTOPP_COMPILE_ASSERT(N % Q == 0);
	CRYPTOPP_COMPILE_ASSERT(M % Q == 0);
	CRYPTOPP_COMPILE_ASSERT(N < M);
	CRYPTOPP_COMPILE_ASSERT(D >= N && M >= D);

public:
	enum {MIN_KEYLENGTH=N, MAX_KEYLENGTH=M, DEFAULT_KEYLENGTH=D, KEYLENGTH_MULTIPLE=Q};
	enum {IV_REQUIREMENT = IV_REQ};
	static unsigned int StaticGetValidKeyLength(unsigned int n)
	{
		if (n < (unsigned int)MIN_KEYLENGTH)
			return MIN_KEYLENGTH;
		else if (n > (unsigned int)MAX_KEYLENGTH)
			return (unsigned int)MAX_KEYLENGTH;
		else
		{
			n += KEYLENGTH_MULTIPLE-1;
			return n - n%KEYLENGTH_MULTIPLE;
		}
	}
};

/// support query of key length that's the same as another class
template <class T>
class SameKeyLengthAs
{
public:
	enum {MIN_KEYLENGTH=T::MIN_KEYLENGTH, MAX_KEYLENGTH=T::MAX_KEYLENGTH, DEFAULT_KEYLENGTH=T::DEFAULT_KEYLENGTH};
	enum {IV_REQUIREMENT = T::IV_REQUIREMENT};
	static unsigned int StaticGetValidKeyLength(unsigned int keylength)
		{return T::StaticGetValidKeyLength(keylength);}
};

// ************** implementation helper for SimpledKeyed ***************

template <class T>
static inline void CheckedSetKey(T *obj, Empty empty, const byte *key, unsigned int length, const NameValuePairs &param)
{
	obj->ThrowIfInvalidKeyLength(length);
	obj->UncheckedSetKey(key, length);
}

template <class T>
static inline void CheckedSetKey(T *obj, CipherDir dir, const byte *key, unsigned int length, const NameValuePairs &param)
{
	obj->ThrowIfInvalidKeyLength(length);
	obj->UncheckedSetKey(dir, key, length);
}

//! .
template <class BASE, class INFO = BASE>
class SimpleKeyingInterfaceImpl : public BASE
{
public:
	unsigned int MinKeyLength() const {return INFO::MIN_KEYLENGTH;}
	unsigned int MaxKeyLength() const {return (unsigned int)INFO::MAX_KEYLENGTH;}
	unsigned int DefaultKeyLength() const {return INFO::DEFAULT_KEYLENGTH;}
	unsigned int GetValidKeyLength(unsigned int n) const {return INFO::StaticGetValidKeyLength(n);}
	typename BASE::IV_Requirement IVRequirement() const {return (typename BASE::IV_Requirement)INFO::IV_REQUIREMENT;}

protected:
	void AssertValidKeyLength(unsigned int length) {assert(GetValidKeyLength(length) == length);}
};

template <class INFO, class INTERFACE = BlockCipher>
class BlockCipherBaseTemplate : public AlgorithmImpl<SimpleKeyingInterfaceImpl<TwoBases<INFO, INTERFACE> > >
{
public:
	unsigned int BlockSize() const {return BLOCKSIZE;}
};

//! .
template <CipherDir DIR, class BASE>
class BlockCipherTemplate : public BASE
{
public:
 	BlockCipherTemplate() {}
	BlockCipherTemplate(const byte *key)
		{SetKey(key, DEFAULT_KEYLENGTH);}
	BlockCipherTemplate(const byte *key, unsigned int length)
		{SetKey(key, length);}
	BlockCipherTemplate(const byte *key, unsigned int length, unsigned int rounds)
		{SetKeyWithRounds(key, length, rounds);}

	bool IsForwardTransformation() const {return DIR == ENCRYPTION;}

	void SetKey(const byte *key, unsigned int length, const NameValuePairs &param = g_nullNameValuePairs)
	{
		CheckedSetKey(this, DIR, key, length, param);
	}

	Clonable * Clone() const {return new BlockCipherTemplate<DIR, BASE>(*this);}
};

//! .
template <class BASE>
class MessageAuthenticationCodeTemplate : public 
#ifdef CRYPTOPP_DOXYGEN_PROCESSING
	MessageAuthenticationCode
#else
	SimpleKeyingInterfaceImpl<BASE>
#endif
{
public:
 	MessageAuthenticationCodeTemplate() {}
	MessageAuthenticationCodeTemplate(const byte *key)
		{SetKey(key, DEFAULT_KEYLENGTH);}
	MessageAuthenticationCodeTemplate(const byte *key, unsigned int length)
		{SetKey(key, length);}

	std::string AlgorithmName() const {return StaticAlgorithmName();}

	void SetKey(const byte *key, unsigned int length, const NameValuePairs &param = g_nullNameValuePairs)
	{
		CheckedSetKey(this, Empty(), key, length, param);
	}

	Clonable * Clone() const {return new MessageAuthenticationCodeTemplate<BASE>(*this);}
};

// ************** documentation ***************

//! These objects usually should not be used directly. See CipherModeDocumentation instead.
/*! Each class derived from this one defines two types, Encryption and Decryption, 
	both of which implement the BlockCipher interface. */
struct BlockCipherDocumentation
{
	//! implements the BlockCipher interface
	typedef BlockCipher Encryption;
	//! implements the BlockCipher interface
	typedef BlockCipher Decryption;
};

/*! \brief Each class derived from this one defines two types, Encryption and Decryption, 
	both of which implement the SymmetricCipher interface. See CipherModeDocumentation
	for information about using block ciphers. */
struct SymmetricCipherDocumentation
{
	//! implements the SymmetricCipher interface
	typedef SymmetricCipher Encryption;
	//! implements the SymmetricCipher interface
	typedef SymmetricCipher Decryption;
};

NAMESPACE_END

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久麻豆| 国内成人自拍视频| 国产高清不卡二三区| 色哦色哦哦色天天综合| 国产午夜精品一区二区三区四区| 亚洲无线码一区二区三区| 高清shemale亚洲人妖| 日韩欧美亚洲另类制服综合在线| 一区免费观看视频| 国产黄色91视频| 欧美大片一区二区三区| 亚洲成人综合网站| 91黄色免费看| 亚洲欧美日韩综合aⅴ视频| 粉嫩一区二区三区性色av| 日韩免费高清电影| 美女网站在线免费欧美精品| 欧美视频一区在线| 亚洲色图在线视频| 99精品视频免费在线观看| 欧美国产日韩在线观看| 国产麻豆精品95视频| 精品三级在线看| 蜜臀精品一区二区三区在线观看 | 精品少妇一区二区三区在线播放 | 国产九色精品成人porny| 日韩视频一区二区在线观看| 首页综合国产亚洲丝袜| 欧美精品在线一区二区三区| 亚洲国产精品麻豆| 欧美日韩一区二区三区不卡| 亚洲香蕉伊在人在线观| 色噜噜狠狠色综合欧洲selulu| 亚洲天堂福利av| 99久久国产综合色|国产精品| 国产精品色呦呦| 91免费观看国产| 一区二区激情小说| 欧美精品一二三| 激情都市一区二区| 国产精品久久二区二区| jlzzjlzz亚洲日本少妇| 亚洲欧美电影院| 在线播放91灌醉迷j高跟美女 | av电影在线观看一区| 国产精品毛片高清在线完整版 | 日韩精品一区二区三区视频在线观看| 午夜伦欧美伦电影理论片| 欧美一级免费观看| 国产91清纯白嫩初高中在线观看| 国产精品免费av| 在线免费视频一区二区| 日韩精品一级二级| 久久综合色之久久综合| av成人免费在线| 首页国产欧美日韩丝袜| 精品国产欧美一区二区| 成人午夜激情影院| 亚洲第一主播视频| 久久新电视剧免费观看| 91丨porny丨首页| 日韩av中文在线观看| 国产喷白浆一区二区三区| 日本韩国欧美一区二区三区| 日韩av网站在线观看| 中文字幕不卡的av| 欧美日韩国产乱码电影| 国产91对白在线观看九色| 亚洲综合色丁香婷婷六月图片| 制服丝袜亚洲色图| www.亚洲在线| 日韩高清一区在线| 日韩美女视频一区二区| 日韩精品一区二区三区在线观看 | 亚洲第一激情av| 久久久一区二区三区捆绑**| 欧美亚洲综合在线| 国产999精品久久久久久| 婷婷久久综合九色综合伊人色| 久久精品水蜜桃av综合天堂| 欧美精品乱码久久久久久| www.欧美色图| 精品一区二区三区在线视频| 亚洲自拍偷拍麻豆| 中文字幕一区二区5566日韩| 久久一区二区三区四区| 在线播放中文一区| 91激情五月电影| 不卡一卡二卡三乱码免费网站| 麻豆免费精品视频| 亚洲va国产天堂va久久en| 国产精品第一页第二页第三页 | 宅男在线国产精品| 色噜噜久久综合| 成人开心网精品视频| 国产激情视频一区二区三区欧美| 欧美96一区二区免费视频| 亚洲超碰97人人做人人爱| 最新热久久免费视频| 国产精品污网站| 国产日韩欧美综合在线| 精品国产百合女同互慰| 日韩视频中午一区| 制服丝袜亚洲精品中文字幕| 欧美三片在线视频观看 | 日韩欧美一区二区在线视频| 在线观看精品一区| 日本精品视频一区二区三区| 日本久久一区二区| 欧美综合天天夜夜久久| 欧美日韩国产影片| 欧美日本在线播放| 欧美肥大bbwbbw高潮| 欧美精品黑人性xxxx| 欧美丰满少妇xxxxx高潮对白| 欧美这里有精品| 欧美剧在线免费观看网站| 欧美日本一区二区三区四区| 777奇米四色成人影色区| 宅男在线国产精品| 久久中文字幕电影| 国产欧美日韩在线看| 国产精品久久看| 一区二区三区在线免费| 亚洲国产精品久久久男人的天堂| 亚洲成人你懂的| 亚洲成在人线免费| 加勒比av一区二区| 国产成人免费xxxxxxxx| av中文一区二区三区| 欧美亚洲丝袜传媒另类| 欧美一区二区三区日韩| 久久久久久99久久久精品网站| 国产亚洲欧美色| 亚洲蜜桃精久久久久久久| 无码av免费一区二区三区试看| 男男gaygay亚洲| 国产成人精品三级麻豆| 3d成人h动漫网站入口| 日韩丝袜情趣美女图片| 亚洲国产精品精华液ab| 一区二区三区免费看视频| 日韩精品电影在线| 国产不卡视频一区| 欧美日韩在线不卡| 久久久久久久久久久久久夜| 亚洲女爱视频在线| 精品一区免费av| 在线观看不卡一区| 久久久久国产精品人| 一个色妞综合视频在线观看| 蜜臀精品一区二区三区在线观看 | 精品视频色一区| 久久久久国产精品麻豆ai换脸| 中文字幕日韩一区| 日韩国产成人精品| 91首页免费视频| 久久久国产午夜精品| 亚洲综合免费观看高清完整版| 精品一区二区三区久久久| 色综合一区二区| 久久免费电影网| 亚洲成av人片一区二区| www.日韩在线| 久久亚洲一级片| 午夜成人在线视频| 99久久99久久综合| 久久先锋影音av| 石原莉奈在线亚洲二区| 91视频一区二区| 久久亚洲二区三区| 91在线视频播放| 欧美一级欧美三级| 丝袜亚洲另类欧美| 91久久精品午夜一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲无线码一区二区三区| www.欧美色图| 中文字幕不卡在线播放| 国产麻豆精品视频| 精品国产自在久精品国产| 日韩高清不卡一区二区三区| 在线观看亚洲精品| 亚洲激情自拍视频| av成人老司机| 亚洲色欲色欲www| proumb性欧美在线观看| 国产精品伦理在线| 成人国产免费视频| 国产精品色呦呦| 国产成人精品免费视频网站| 久久九九久久九九| 国产高清不卡二三区| 国产人久久人人人人爽| 成人一区二区视频| 国产精品久久久久久久久免费相片| 国产99久久久国产精品潘金网站| 亚洲国产激情av| 91麻豆国产福利在线观看| 一区二区三区在线观看视频|