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

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

?? cryptlib.h

?? 研讀AxCrypt對加解密的處理方法
?? H
?? 第 1 頁 / 共 5 頁
字號:
	CRYPTOPP_DLL static void ThrowIfTypeMismatch(const char *name, const std::type_info &stored, const std::type_info &retrieving)
		{if (stored != retrieving) throw ValueTypeMismatch(name, stored, retrieving);}

	template <class T>
	void GetRequiredParameter(const char *className, const char *name, T &value) const
	{
		if (!GetValue(name, value))
			throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'");
	}

	CRYPTOPP_DLL void GetRequiredIntParameter(const char *className, const char *name, int &value) const
	{
		if (!GetIntValue(name, value))
			throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'");
	}

	//! to be implemented by derived classes, users should use one of the above functions instead
	CRYPTOPP_DLL virtual bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const =0;
};

//! namespace containing value name definitions
/*!	value names, types and semantics:

	ThisObject:ClassName (ClassName, copy of this object or a subobject)
	ThisPointer:ClassName (const ClassName *, pointer to this object or a subobject)
*/
DOCUMENTED_NAMESPACE_BEGIN(Name)
// more names defined in argnames.h
DOCUMENTED_NAMESPACE_END

//! empty set of name-value pairs
class CRYPTOPP_DLL NullNameValuePairs : public NameValuePairs
{
public:
	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const {return false;}
};

//! _
extern CRYPTOPP_DLL const NullNameValuePairs g_nullNameValuePairs;

// ********************************************************

//! interface for cloning objects, this is not implemented by most classes yet
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Clonable
{
public:
	virtual ~Clonable() {}
	//! this is not implemented by most classes yet
	virtual Clonable* Clone() const {throw NotImplemented("Clone() is not implemented yet.");}	// TODO: make this =0
};

//! interface for all crypto algorithms

class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Algorithm : public Clonable
{
public:
	/*! When FIPS 140-2 compliance is enabled and checkSelfTestStatus == true,
		this constructor throws SelfTestFailure if the self test hasn't been run or fails. */
	Algorithm(bool checkSelfTestStatus = true);
	//! returns name of this algorithm, not universally implemented yet
	virtual std::string AlgorithmName() const {return "unknown";}
};

//! keying interface for crypto algorithms that take byte strings as keys

class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SimpleKeyingInterface
{
public:
	//! returns smallest valid key length in bytes */
	virtual unsigned int MinKeyLength() const =0;
	//! returns largest valid key length in bytes */
	virtual unsigned int MaxKeyLength() const =0;
	//! returns default (recommended) key length in bytes */
	virtual unsigned int DefaultKeyLength() const =0;

	//! returns the smallest valid key length in bytes that is >= min(n, GetMaxKeyLength())
	virtual unsigned int GetValidKeyLength(unsigned int n) const =0;

	//! returns whether n is a valid key length
	virtual bool IsValidKeyLength(unsigned int n) const
		{return n == GetValidKeyLength(n);}

	//! set or reset the key of this object
	/*! \param params is used to specify Rounds, BlockSize, etc */
	virtual void SetKey(const byte *key, unsigned int length, const NameValuePairs &params = g_nullNameValuePairs) =0;

	//! calls SetKey() with an NameValuePairs object that just specifies "Rounds"
	void SetKeyWithRounds(const byte *key, unsigned int length, int rounds);

	//! calls SetKey() with an NameValuePairs object that just specifies "IV"
	void SetKeyWithIV(const byte *key, unsigned int length, const byte *iv);

	enum IV_Requirement {STRUCTURED_IV = 0, RANDOM_IV, UNPREDICTABLE_RANDOM_IV, INTERNALLY_GENERATED_IV, NOT_RESYNCHRONIZABLE};
	//! returns the minimal requirement for secure IVs
	virtual IV_Requirement IVRequirement() const =0;

	//! returns whether this object can be resynchronized (i.e. supports initialization vectors)
	/*! If this function returns true, and no IV is passed to SetKey() and CanUseStructuredIVs()==true, an IV of all 0's will be assumed. */
	bool IsResynchronizable() const {return IVRequirement() < NOT_RESYNCHRONIZABLE;}
	//! returns whether this object can use random IVs (in addition to ones returned by GetNextIV)
	bool CanUseRandomIVs() const {return IVRequirement() <= UNPREDICTABLE_RANDOM_IV;}
	//! returns whether this object can use random but possibly predictable IVs (in addition to ones returned by GetNextIV)
	bool CanUsePredictableIVs() const {return IVRequirement() <= RANDOM_IV;}
	//! returns whether this object can use structured IVs, for example a counter (in addition to ones returned by GetNextIV)
	bool CanUseStructuredIVs() const {return IVRequirement() <= STRUCTURED_IV;}

	//! returns size of IVs used by this object
	virtual unsigned int IVSize() const {throw NotImplemented("SimpleKeyingInterface: this object doesn't support resynchronization");}
	//! resynchronize with an IV
	virtual void Resynchronize(const byte *IV) {throw NotImplemented("SimpleKeyingInterface: this object doesn't support resynchronization");}
	//! get a secure IV for the next message
	/*! This method should be called after you finish encrypting one message and are ready to start the next one.
		After calling it, you must call SetKey() or Resynchronize() before using this object again. 
		This method is not implemented on decryption objects. */
	virtual void GetNextIV(byte *IV) {throw NotImplemented("SimpleKeyingInterface: this object doesn't support GetNextIV()");}

protected:
	void ThrowIfInvalidKeyLength(const Algorithm &algorithm, unsigned int length);
	void ThrowIfResynchronizable();			// to be called when no IV is passed
	void ThrowIfInvalidIV(const byte *iv);	// check for NULL IV if it can't be used
	const byte * GetIVAndThrowIfInvalid(const NameValuePairs &params);

	inline void AssertValidKeyLength(unsigned int length) const
	{
		assert(IsValidKeyLength(length));
	}
};

//! interface for the data processing part of block ciphers

/*! Classes derived from BlockTransformation are block ciphers
	in ECB mode (for example the DES::Encryption class), which are stateless,
	and they can make assumptions about the memory alignment of their inputs and outputs.
	These classes should not be used directly, but only in combination with
	a mode class (see CipherModeDocumentation in modes.h).
*/
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockTransformation : public Algorithm
{
public:
	//! encrypt or decrypt inBlock, xor with xorBlock, and write to outBlock
	virtual void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const =0;

	//! encrypt or decrypt one block
	/*! \pre size of inBlock and outBlock == BlockSize() */
	void ProcessBlock(const byte *inBlock, byte *outBlock) const
		{ProcessAndXorBlock(inBlock, NULL, outBlock);}

	//! encrypt or decrypt one block in place
	void ProcessBlock(byte *inoutBlock) const
		{ProcessAndXorBlock(inoutBlock, NULL, inoutBlock);}

	//! block size of the cipher in bytes
	virtual unsigned int BlockSize() const =0;

	//! block pointers must be divisible by this
	virtual unsigned int BlockAlignment() const {return 4;}

	//! returns true if this is a permutation (i.e. there is an inverse transformation)
	virtual bool IsPermutation() const {return true;}

	//! returns true if this is an encryption object
	virtual bool IsForwardTransformation() const =0;

	//! return number of blocks that can be processed in parallel, for bit-slicing implementations
	virtual unsigned int OptimalNumberOfParallelBlocks() const {return 1;}

	//! encrypt or decrypt multiple blocks, for bit-slicing implementations
	virtual void ProcessAndXorMultipleBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, unsigned int numberOfBlocks) const;
};

//! interface for the data processing part of stream ciphers

class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE StreamTransformation : public Algorithm
{
public:
	//! return a reference to this object, 
	/*! This function is useful for passing a temporary StreamTransformation object to a 
		function that takes a non-const reference. */
	StreamTransformation& Ref() {return *this;}

	//! returns block size, if input must be processed in blocks, otherwise 1
	virtual unsigned int MandatoryBlockSize() const {return 1;}

	//! returns the input block size that is most efficient for this cipher
	/*! \note optimal input length is n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for any n > 0 */
	virtual unsigned int OptimalBlockSize() const {return MandatoryBlockSize();}
	//! returns how much of the current block is used up
	virtual unsigned int GetOptimalBlockSizeUsed() const {return 0;}

	//! returns how input should be aligned for optimal performance
	virtual unsigned int OptimalDataAlignment() const {return 1;}

	//! encrypt or decrypt an array of bytes of specified length
	/*! \note either inString == outString, or they don't overlap */
	virtual void ProcessData(byte *outString, const byte *inString, unsigned int length) =0;

	//! for ciphers where the last block of data is special, encrypt or decrypt the last block of data
	/*! For now the only use of this function is for CBC-CTS mode. */
	virtual void ProcessLastBlock(byte *outString, const byte *inString, unsigned int length);
	//! returns the minimum size of the last block, 0 indicating the last block is not special
	virtual unsigned int MinLastBlockSize() const {return 0;}

	//! same as ProcessData(inoutString, inoutString, length)
	inline void ProcessString(byte *inoutString, unsigned int length)
		{ProcessData(inoutString, inoutString, length);}
	//! same as ProcessData(outString, inString, length)
	inline void ProcessString(byte *outString, const byte *inString, unsigned int length)
		{ProcessData(outString, inString, length);}
	//! implemented as {ProcessData(&input, &input, 1); return input;}
	inline byte ProcessByte(byte input)
		{ProcessData(&input, &input, 1); return input;}

	//! returns whether this cipher supports random access
	virtual bool IsRandomAccess() const =0;
	//! for random access ciphers, seek to an absolute position
	virtual void Seek(lword n)
	{
		assert(!IsRandomAccess());
		throw NotImplemented("StreamTransformation: this object doesn't support random access");
	}

	//! returns whether this transformation is self-inverting (e.g. xor with a keystream)
	virtual bool IsSelfInverting() const =0;
	//! returns whether this is an encryption object
	virtual bool IsForwardTransformation() const =0;
};

//! interface for hash functions and data processing part of MACs

/*! HashTransformation objects are stateful.  They are created in an initial state,
	change state as Update() is called, and return to the initial
	state when Final() is called.  This interface allows a large message to
	be hashed in pieces by calling Update() on each piece followed by
	calling Final().
*/
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HashTransformation : public Algorithm
{
public:
	//! process more input
	virtual void Update(const byte *input, unsigned int length) =0;

	//! request space to write input into
	virtual byte * CreateUpdateSpace(unsigned int &size) {size=0; return NULL;}

	//! compute hash for current message, then restart for a new message
	/*!	\pre size of digest == DigestSize(). */
	virtual void Final(byte *digest)
		{TruncatedFinal(digest, DigestSize());}

	//! discard the current state, and restart with a new message
	virtual void Restart()
		{TruncatedFinal(NULL, 0);}

	//! size of the hash returned by Final()
	virtual unsigned int DigestSize() const =0;

	//! block size of underlying compression function, or 0 if not block based
	virtual unsigned int BlockSize() const {return 0;}

	//! input to Update() should have length a multiple of this for optimal speed
	virtual unsigned int OptimalBlockSize() const {return 1;}

	//! returns how input should be aligned for optimal performance
	virtual unsigned int OptimalDataAlignment() const {return 1;}

	//! use this if your input is in one piece and you don't want to call Update() and Final() separately
	virtual void CalculateDigest(byte *digest, const byte *input, unsigned int length)
		{Update(input, length); Final(digest);}

	//! verify that digest is a valid digest for the current message, then reinitialize the object
	/*! Default implementation is to call Final() and do a bitwise comparison
		between its output and digest. */
	virtual bool Verify(const byte *digest)
		{return TruncatedVerify(digest, DigestSize());}

	//! use this if your input is in one piece and you don't want to call Update() and Verify() separately
	virtual bool VerifyDigest(const byte *digest, const byte *input, unsigned int length)
		{Update(input, length); return Verify(digest);}

	//! truncated version of Final()
	virtual void TruncatedFinal(byte *digest, unsigned int digestSize) =0;

	//! truncated version of CalculateDigest()
	virtual void CalculateTruncatedDigest(byte *digest, unsigned int digestSize, const byte *input, unsigned int length)
		{Update(input, length); TruncatedFinal(digest, digestSize);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲第一二三四区| 亚洲国产高清aⅴ视频| 国产情人综合久久777777| 精品99久久久久久| 国产拍揄自揄精品视频麻豆| 久久久久亚洲蜜桃| 国产精品视频yy9299一区| 国产精品久久久久久久久搜平片| 国产精品久久久一区麻豆最新章节| 国产精品高潮呻吟久久| 一区二区高清视频在线观看| 亚洲午夜av在线| 精品亚洲成a人在线观看| 国产露脸91国语对白| 99精品视频中文字幕| 色婷婷久久久久swag精品 | 国产在线看一区| 成人午夜视频在线观看| 色94色欧美sute亚洲线路一久| 欧美性大战久久久久久久蜜臀| 欧美精品三级在线观看| 欧美激情一区二区三区四区| 亚洲欧美日韩中文字幕一区二区三区| 一区二区三区蜜桃网| 秋霞午夜鲁丝一区二区老狼| 国产乱码字幕精品高清av| 色88888久久久久久影院野外| 777久久久精品| 国产精品欧美久久久久无广告 | 久久午夜色播影院免费高清| 亚洲精品国产成人久久av盗摄 | 欧美成人bangbros| 亚洲区小说区图片区qvod| 裸体在线国模精品偷拍| av中文字幕一区| 欧美一区二区三区性视频| 国产精品免费视频一区| 美女一区二区视频| 在线视频一区二区免费| 国产亚洲精品资源在线26u| 亚洲一区二区黄色| 日韩欧美一二三四区| 欧美韩日一区二区三区| 青青草国产成人av片免费| 93久久精品日日躁夜夜躁欧美| 欧美一区二区三区四区视频| 亚洲免费资源在线播放| 国产成人午夜精品影院观看视频| 欧美老女人第四色| 亚洲婷婷国产精品电影人久久| 久久99热这里只有精品| 欧美体内she精视频| 亚洲欧洲国产日韩| 风间由美一区二区三区在线观看| 欧美美女视频在线观看| 亚洲精品乱码久久久久久日本蜜臀 | 中文字幕乱码久久午夜不卡| 久久精品国产亚洲a| 欧美一区二区三区免费观看视频 | 99国产精品视频免费观看| 日韩美女主播在线视频一区二区三区| 一区二区视频免费在线观看| av不卡免费在线观看| 久久久精品免费免费| 国产一区二区三区免费看| 欧美一区二区网站| 亚洲综合色成人| 欧美三级乱人伦电影| 亚洲综合区在线| 欧美天堂一区二区三区| 亚洲成在人线免费| 欧美日韩国产一二三| 亚洲一区二区三区四区在线| 欧美伊人久久大香线蕉综合69| 亚洲欧美日韩一区二区| 日本高清视频一区二区| 亚洲一区二区三区中文字幕| 在线观看日韩一区| 亚洲成人av一区| 欧美肥妇毛茸茸| 毛片av中文字幕一区二区| 久久人人97超碰com| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 成人性生交大片免费看视频在线| 国产拍欧美日韩视频二区| 大尺度一区二区| 一区二区三区四区激情| 91精品在线观看入口| 国产一区91精品张津瑜| 中文字幕制服丝袜一区二区三区 | 中文字幕在线播放不卡一区| 97久久超碰精品国产| 亚洲自拍偷拍麻豆| 欧美不卡一二三| 99re8在线精品视频免费播放| 亚洲一区二区免费视频| 日韩免费观看高清完整版| 国产成人精品一区二区三区网站观看| 中文字幕在线一区免费| 欧美日韩国产高清一区| 国产精品 欧美精品| 亚洲欧美一区二区久久 | 欧美午夜片在线看| 另类综合日韩欧美亚洲| 亚洲欧洲成人自拍| 欧美videossexotv100| 99久久国产免费看| 精品一区二区成人精品| 自拍偷自拍亚洲精品播放| 日韩一区二区三区四区五区六区| 成人sese在线| 激情另类小说区图片区视频区| 亚洲视频一区二区免费在线观看 | 亚洲人成网站精品片在线观看| 欧美一二三四在线| 在线精品视频免费播放| 国产成人在线视频网址| 青青草原综合久久大伊人精品 | 亚洲婷婷综合久久一本伊一区| 日韩你懂的电影在线观看| 色综合久久久久网| 国产成人小视频| 六月丁香婷婷色狠狠久久| 亚洲一区二区三区爽爽爽爽爽| 欧美韩国日本一区| 欧美精品一区视频| 日韩一区和二区| 欧美日韩国产精选| 欧美日韩中文字幕一区| 91蝌蚪国产九色| 成人禁用看黄a在线| 韩国毛片一区二区三区| 日韩高清不卡一区| 亚洲动漫第一页| 亚洲免费成人av| 亚洲免费观看高清完整版在线| 国产精品三级av在线播放| 久久久www免费人成精品| 精品久久国产字幕高潮| 日韩亚洲欧美成人一区| 91精品啪在线观看国产60岁| 欧美日韩三级一区| 欧美手机在线视频| 欧美群妇大交群中文字幕| 在线观看国产日韩| 在线视频欧美区| 欧美午夜不卡视频| 欧美色窝79yyyycom| 欧美亚洲动漫制服丝袜| 欧美日韩综合不卡| 337p亚洲精品色噜噜| 欧美成人精品3d动漫h| 精品国产一区二区三区久久久蜜月 | 色综合久久六月婷婷中文字幕| 97国产一区二区| 欧美亚洲另类激情小说| 欧美精品自拍偷拍动漫精品| 欧美一三区三区四区免费在线看| 欧美日韩国产欧美日美国产精品| 51精品国自产在线| 精品国产91久久久久久久妲己| 久久你懂得1024| 亚洲欧美日韩在线不卡| 午夜精品福利在线| 久久成人免费网| 成人免费看黄yyy456| 日本久久电影网| 欧美精品aⅴ在线视频| 日韩美一区二区三区| 国产精品毛片久久久久久| 亚洲激情在线播放| 久久精品99国产精品日本| 国产ts人妖一区二区| 色先锋久久av资源部| 91精品国产一区二区三区香蕉| 精品国产一二三| 一区二区免费视频| 国模套图日韩精品一区二区| 92国产精品观看| 欧美一区二区三区四区高清| 国产精品三级av在线播放| 亚洲.国产.中文慕字在线| 国产精品一区二区在线播放| 欧美影院精品一区| 国产欧美日本一区视频| 亚洲一区中文日韩| 国产二区国产一区在线观看| 欧洲人成人精品| 欧美经典一区二区| 日日夜夜一区二区| 99视频国产精品| 久久色在线视频| 亚洲国产成人va在线观看天堂| 国产一区二区在线电影| 欧美自拍偷拍一区| 国产精品你懂的在线| 麻豆国产欧美一区二区三区| 欧美曰成人黄网| 亚洲欧美怡红院|