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

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

?? algparam.h

?? 應用非對稱密鑰系統RSA密碼系統進行數據簽名的代碼
?? H
字號:
#ifndef CRYPTOPP_ALGPARAM_H
#define CRYPTOPP_ALGPARAM_H

#include "cryptlib.h"
#include "smartptr.h"
#include "secblock.h"

NAMESPACE_BEGIN(CryptoPP)

//! used to pass byte array input as part of a NameValuePairs object
/*! the deepCopy option is used when the NameValuePairs object can't
	keep a copy of the data available */
class ConstByteArrayParameter
{
public:
	ConstByteArrayParameter(const char *data = NULL, bool deepCopy = false)
	{
		Assign((const byte *)data, data ? strlen(data) : 0, deepCopy);
	}
	ConstByteArrayParameter(const byte *data, size_t size, bool deepCopy = false)
	{
		Assign(data, size, deepCopy);
	}
	template <class T> ConstByteArrayParameter(const T &string, bool deepCopy = false)
	{
        CRYPTOPP_COMPILE_ASSERT(sizeof(CPP_TYPENAME T::value_type) == 1);
		Assign((const byte *)string.data(), string.size(), deepCopy);
	}

	void Assign(const byte *data, size_t size, bool deepCopy)
	{
		if (deepCopy)
			m_block.Assign(data, size);
		else
		{
			m_data = data;
			m_size = size;
		}
		m_deepCopy = deepCopy;
	}

	const byte *begin() const {return m_deepCopy ? m_block.begin() : m_data;}
	const byte *end() const {return m_deepCopy ? m_block.end() : m_data + m_size;}
	size_t size() const {return m_deepCopy ? m_block.size() : m_size;}

private:
	bool m_deepCopy;
	const byte *m_data;
	size_t m_size;
	SecByteBlock m_block;
};

class ByteArrayParameter
{
public:
	ByteArrayParameter(byte *data = NULL, unsigned int size = 0)
		: m_data(data), m_size(size) {}
	ByteArrayParameter(SecByteBlock &block)
		: m_data(block.begin()), m_size(block.size()) {}

	byte *begin() const {return m_data;}
	byte *end() const {return m_data + m_size;}
	size_t size() const {return m_size;}

private:
	byte *m_data;
	size_t m_size;
};

class CRYPTOPP_DLL CombinedNameValuePairs : public NameValuePairs
{
public:
	CombinedNameValuePairs(const NameValuePairs &pairs1, const NameValuePairs &pairs2)
		: m_pairs1(pairs1), m_pairs2(pairs2) {}

	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;

private:
	const NameValuePairs &m_pairs1, &m_pairs2;
};

template <class T, class BASE>
class GetValueHelperClass
{
public:
	GetValueHelperClass(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst)
		: m_pObject(pObject), m_name(name), m_valueType(&valueType), m_pValue(pValue), m_found(false), m_getValueNames(false)
	{
		if (strcmp(m_name, "ValueNames") == 0)
		{
			m_found = m_getValueNames = true;
			NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(std::string), *m_valueType);
			if (searchFirst)
				searchFirst->GetVoidValue(m_name, valueType, pValue);
			if (typeid(T) != typeid(BASE))
				pObject->BASE::GetVoidValue(m_name, valueType, pValue);
			((*reinterpret_cast<std::string *>(m_pValue) += "ThisPointer:") += typeid(T).name()) += ';';
		}

		if (!m_found && strncmp(m_name, "ThisPointer:", 12) == 0 && strcmp(m_name+12, typeid(T).name()) == 0)
		{
			NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(T *), *m_valueType);
			*reinterpret_cast<const T **>(pValue) = pObject;
			m_found = true;
			return;
		}

		if (!m_found && searchFirst)
			m_found = searchFirst->GetVoidValue(m_name, valueType, pValue);
		
		if (!m_found && typeid(T) != typeid(BASE))
			m_found = pObject->BASE::GetVoidValue(m_name, valueType, pValue);
	}

	operator bool() const {return m_found;}

	template <class R>
	GetValueHelperClass<T,BASE> & operator()(const char *name, const R & (T::*pm)() const)
	{
		if (m_getValueNames)
			(*reinterpret_cast<std::string *>(m_pValue) += name) += ";";
		if (!m_found && strcmp(name, m_name) == 0)
		{
			NameValuePairs::ThrowIfTypeMismatch(name, typeid(R), *m_valueType);
			*reinterpret_cast<R *>(m_pValue) = (m_pObject->*pm)();
			m_found = true;
		}
		return *this;
	}

	GetValueHelperClass<T,BASE> &Assignable()
	{
#ifndef __INTEL_COMPILER	// ICL 9.1 workaround: Intel compiler copies the vTable pointer for some reason
		if (m_getValueNames)
			((*reinterpret_cast<std::string *>(m_pValue) += "ThisObject:") += typeid(T).name()) += ';';
		if (!m_found && strncmp(m_name, "ThisObject:", 11) == 0 && strcmp(m_name+11, typeid(T).name()) == 0)
		{
			NameValuePairs::ThrowIfTypeMismatch(m_name, typeid(T), *m_valueType);
			*reinterpret_cast<T *>(m_pValue) = *m_pObject;
			m_found = true;
		}
#endif
		return *this;
	}

private:
	const T *m_pObject;
	const char *m_name;
	const std::type_info *m_valueType;
	void *m_pValue;
	bool m_found, m_getValueNames;
};

template <class BASE, class T>
GetValueHelperClass<T, BASE> GetValueHelper(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst=NULL, BASE *dummy=NULL)
{
	return GetValueHelperClass<T, BASE>(pObject, name, valueType, pValue, searchFirst);
}

template <class T>
GetValueHelperClass<T, T> GetValueHelper(const T *pObject, const char *name, const std::type_info &valueType, void *pValue, const NameValuePairs *searchFirst=NULL)
{
	return GetValueHelperClass<T, T>(pObject, name, valueType, pValue, searchFirst);
}

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

template <class R>
R Hack_DefaultValueFromConstReferenceType(const R &)
{
	return R();
}

template <class R>
bool Hack_GetValueIntoConstReference(const NameValuePairs &source, const char *name, const R &value)
{
	return source.GetValue(name, const_cast<R &>(value));
}

template <class T, class BASE>
class AssignFromHelperClass
{
public:
	AssignFromHelperClass(T *pObject, const NameValuePairs &source)
		: m_pObject(pObject), m_source(source), m_done(false)
	{
		if (source.GetThisObject(*pObject))
			m_done = true;
		else if (typeid(BASE) != typeid(T))
			pObject->BASE::AssignFrom(source);
	}

	template <class R>
	AssignFromHelperClass & operator()(const char *name, void (T::*pm)(R))	// VC60 workaround: "const R &" here causes compiler error
	{
		if (!m_done)
		{
			R value = Hack_DefaultValueFromConstReferenceType(reinterpret_cast<R>(*(int *)NULL));
			if (!Hack_GetValueIntoConstReference(m_source, name, value))
				throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name + "'");
			(m_pObject->*pm)(value);
		}
		return *this;
	}

	template <class R, class S>
	AssignFromHelperClass & operator()(const char *name1, const char *name2, void (T::*pm)(R, S))	// VC60 workaround: "const R &" here causes compiler error
	{
		if (!m_done)
		{
			R value1 = Hack_DefaultValueFromConstReferenceType(reinterpret_cast<R>(*(int *)NULL));
			if (!Hack_GetValueIntoConstReference(m_source, name1, value1))
				throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name1 + "'");
			S value2 = Hack_DefaultValueFromConstReferenceType(reinterpret_cast<S>(*(int *)NULL));
			if (!Hack_GetValueIntoConstReference(m_source, name2, value2))
				throw InvalidArgument(std::string(typeid(T).name()) + ": Missing required parameter '" + name2 + "'");
			(m_pObject->*pm)(value1, value2);
		}
		return *this;
	}

private:
	T *m_pObject;
	const NameValuePairs &m_source;
	bool m_done;
};

template <class BASE, class T>
AssignFromHelperClass<T, BASE> AssignFromHelper(T *pObject, const NameValuePairs &source, BASE *dummy=NULL)
{
	return AssignFromHelperClass<T, BASE>(pObject, source);
}

template <class T>
AssignFromHelperClass<T, T> AssignFromHelper(T *pObject, const NameValuePairs &source)
{
	return AssignFromHelperClass<T, T>(pObject, source);
}

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

// to allow the linker to discard Integer code if not needed.
typedef bool (CRYPTOPP_API * PAssignIntToInteger)(const std::type_info &valueType, void *pInteger, const void *pInt);
CRYPTOPP_DLL extern PAssignIntToInteger g_pAssignIntToInteger;

CRYPTOPP_DLL const std::type_info & CRYPTOPP_API IntegerTypeId();

class CRYPTOPP_DLL AlgorithmParametersBase : public NameValuePairs
{
public:
	class ParameterNotUsed : public Exception
	{
	public: 
		ParameterNotUsed(const char *name) : Exception(OTHER_ERROR, std::string("AlgorithmParametersBase: parameter \"") + name + "\" not used") {}
	};

	AlgorithmParametersBase(const char *name, bool throwIfNotUsed)
		: m_name(name), m_throwIfNotUsed(throwIfNotUsed), m_used(false) {}

	~AlgorithmParametersBase()
	{
#ifdef CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE
		if (!std::uncaught_exception())
#else
		try
#endif
		{
			if (m_throwIfNotUsed && !m_used)
				throw ParameterNotUsed(m_name);
		}
#ifndef CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE
		catch(...)
		{
		}
#endif
	}

	bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;

protected:
	virtual void AssignValue(const char *name, const std::type_info &valueType, void *pValue) const =0;
	virtual const NameValuePairs & GetParent() const =0;

	const char *m_name;
	bool m_throwIfNotUsed;
	mutable bool m_used;
};

template <class T>
class AlgorithmParametersBase2 : public AlgorithmParametersBase
{
public:
	AlgorithmParametersBase2(const char *name, const T &value, bool throwIfNotUsed) : AlgorithmParametersBase(name, throwIfNotUsed), m_value(value) {}

	void AssignValue(const char *name, const std::type_info &valueType, void *pValue) const
	{
		// special case for retrieving an Integer parameter when an int was passed in
		if (!(g_pAssignIntToInteger != NULL && typeid(T) == typeid(int) && g_pAssignIntToInteger(valueType, pValue, &m_value)))
		{
			ThrowIfTypeMismatch(name, typeid(T), valueType);
			*reinterpret_cast<T *>(pValue) = m_value;
		}
	}

protected:
	T m_value;
};

template <class PARENT, class T>
class AlgorithmParameters : public AlgorithmParametersBase2<T>
{
public:
	AlgorithmParameters(const PARENT &parent, const char *name, const T &value, bool throwIfNotUsed)
		: AlgorithmParametersBase2<T>(name, value, throwIfNotUsed), m_parent(parent)
	{}

	AlgorithmParameters(const AlgorithmParameters &copy)
		: AlgorithmParametersBase2<T>(copy), m_parent(copy.m_parent)
	{
		copy.m_used = true;
	}

	template <class R>
	AlgorithmParameters<AlgorithmParameters<PARENT,T>, R> operator()(const char *name, const R &value) const
	{
		return AlgorithmParameters<AlgorithmParameters<PARENT,T>, R>(*this, name, value, this->m_throwIfNotUsed);
	}

	template <class R>
	AlgorithmParameters<AlgorithmParameters<PARENT,T>, R> operator()(const char *name, const R &value, bool throwIfNotUsed) const
	{
		return AlgorithmParameters<AlgorithmParameters<PARENT,T>, R>(*this, name, value, throwIfNotUsed);
	}

private:
	const NameValuePairs & GetParent() const {return m_parent;}
	PARENT m_parent;
};

//! Create an object that implements NameValuePairs for passing parameters
/*! \param throwIfNotUsed if true, the object will throw an exception if the value is not accessed
	\note throwIfNotUsed is ignored if using a compiler that does not support std::uncaught_exception(),
	such as MSVC 7.0 and earlier.
	\note A NameValuePairs object containing an arbitrary number of name value pairs may be constructed by
	repeatedly using operator() on the object returned by MakeParameters, for example:
	const NameValuePairs &parameters = MakeParameters(name1, value1)(name2, value2)(name3, value3);
*/
template <class T>
AlgorithmParameters<NullNameValuePairs,T> MakeParameters(const char *name, const T &value, bool throwIfNotUsed = true)
{
	return AlgorithmParameters<NullNameValuePairs,T>(g_nullNameValuePairs, name, value, throwIfNotUsed);
}

#define CRYPTOPP_GET_FUNCTION_ENTRY(name)		(Name::name(), &ThisClass::Get##name)
#define CRYPTOPP_SET_FUNCTION_ENTRY(name)		(Name::name(), &ThisClass::Set##name)
#define CRYPTOPP_SET_FUNCTION_ENTRY2(name1, name2)	(Name::name1(), Name::name2(), &ThisClass::Set##name1##And##name2)

NAMESPACE_END

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色综合国产一区二区三区| 色婷婷av一区二区| 91欧美一区二区| 91精品福利在线一区二区三区| 欧美激情中文字幕| 免费观看一级特黄欧美大片| 色哟哟精品一区| 国产日本欧美一区二区| 日本特黄久久久高潮| 色乱码一区二区三区88| 亚洲国产精品成人综合| 国产一区二区主播在线| 777奇米四色成人影色区| 一区二区三区精品视频在线| 成人h精品动漫一区二区三区| 精品少妇一区二区三区视频免付费| 亚洲午夜国产一区99re久久| 波多野结衣中文字幕一区二区三区| 26uuu成人网一区二区三区| 青青草国产成人99久久| 欧美日韩的一区二区| 一区二区三区精品视频| 色综合久久中文综合久久牛| 亚洲图片你懂的| 99精品视频一区| 中文字幕中文字幕中文字幕亚洲无线| 国产一区欧美日韩| 久久亚洲精品小早川怜子| 久久99精品久久久久久动态图| 欧美精品久久99久久在免费线| 亚洲成a人v欧美综合天堂下载 | 久久91精品国产91久久小草 | 精品国产污污免费网站入口 | 91麻豆精品国产91| 日韩av电影天堂| 欧美一区二区三区婷婷月色| 日韩精品免费视频人成| 这里只有精品电影| 九色porny丨国产精品| 精品动漫一区二区三区在线观看| 狠狠色丁香婷婷综合| 国产午夜一区二区三区| 国产999精品久久久久久绿帽| 久久综合成人精品亚洲另类欧美 | 日日噜噜夜夜狠狠视频欧美人| 91国产视频在线观看| 图片区小说区国产精品视频| 欧美一区日本一区韩国一区| 精品一区二区免费视频| 欧美国产欧美综合| 日本乱码高清不卡字幕| 日本视频中文字幕一区二区三区| 欧美本精品男人aⅴ天堂| 国产一区欧美日韩| 又紧又大又爽精品一区二区| 欧美日韩免费一区二区三区| 久久综合综合久久综合| 欧美激情综合在线| 欧美日韩极品在线观看一区| 国内精品伊人久久久久av影院| 国产精品女主播在线观看| 欧美在线一二三四区| 久久99国产精品免费| 亚洲欧洲日产国码二区| 7777精品久久久大香线蕉| 国产在线精品视频| 亚洲一区免费视频| 久久综合狠狠综合久久综合88| 91亚洲精品乱码久久久久久蜜桃 | 亚洲女人小视频在线观看| 欧美日韩aaa| 成人精品高清在线| 亚洲一区二区av在线| 国产女人18毛片水真多成人如厕| 日本道在线观看一区二区| 国内精品伊人久久久久av一坑| 自拍偷自拍亚洲精品播放| 91精品国产综合久久久蜜臀粉嫩 | 欧美日韩另类国产亚洲欧美一级| 国产乱色国产精品免费视频| 亚洲香蕉伊在人在线观| 久久久久久一级片| 欧美日韩成人一区二区| 91一区在线观看| 韩国女主播一区| 丝袜国产日韩另类美女| 一区二区中文字幕在线| 久久久久国产一区二区三区四区 | 在线免费一区三区| 风间由美一区二区av101| 久久精品国产免费看久久精品| 亚洲自拍偷拍网站| 中文字幕亚洲电影| 国产丝袜在线精品| 26uuu色噜噜精品一区| 欧美日韩综合在线免费观看| 99视频在线观看一区三区| 国内精品免费**视频| 秋霞电影一区二区| 午夜亚洲福利老司机| 亚洲影视资源网| 国产精品初高中害羞小美女文| 精品国产伦理网| 欧美电视剧在线观看完整版| 7777女厕盗摄久久久| 欧美四级电影网| 在线日韩av片| 欧美在线视频全部完| 色av一区二区| 欧美日韩视频在线第一区| 色综合久久天天| 色呦呦一区二区三区| 色呦呦国产精品| 欧美午夜影院一区| 欧美日韩和欧美的一区二区| 在线观看成人小视频| 欧美系列在线观看| 欧美日韩国产一二三| 91精品国产色综合久久| 日韩亚洲欧美成人一区| 制服丝袜亚洲播放| 日韩视频免费直播| 久久蜜桃一区二区| 中文字幕一区二区三区蜜月| 最新国产精品久久精品| 樱花影视一区二区| 五月激情六月综合| 蜜臀va亚洲va欧美va天堂| 激情伊人五月天久久综合| 国产一区二区三区在线看麻豆| 国产精品综合视频| 99久久精品免费看国产| 欧美性色aⅴ视频一区日韩精品| 欧美日韩美女一区二区| 精品久久久久久久久久久久久久久久久 | 欧美日韩美少妇| 日韩免费在线观看| 国产蜜臀97一区二区三区| 亚洲丝袜美腿综合| 亚洲成av人片一区二区三区| 精品一区二区日韩| 色嗨嗨av一区二区三区| 精品视频在线看| 精品免费视频一区二区| 国产精品免费看片| 婷婷成人激情在线网| 国产曰批免费观看久久久| 99久久精品免费看国产| 欧美一区二区视频在线观看2020 | 日韩美一区二区三区| 久久九九久精品国产免费直播| 日韩一区中文字幕| 秋霞成人午夜伦在线观看| 成人国产精品免费网站| 欧美一区二区视频免费观看| 国产亚洲1区2区3区| 婷婷综合另类小说色区| 国产风韵犹存在线视精品| 欧美曰成人黄网| 久久久一区二区| 亚洲成人黄色小说| eeuss鲁一区二区三区| 欧美日韩精品一区二区三区蜜桃| 日本一区二区免费在线观看视频 | 不卡视频在线看| 91精品欧美综合在线观看最新| 国产精品九色蝌蚪自拍| 日本在线播放一区二区三区| 一本久久精品一区二区| 国产亚洲污的网站| 日本成人超碰在线观看| 色噜噜狠狠色综合中国| 国产日韩欧美不卡| 激情图片小说一区| 在线成人高清不卡| 亚洲免费观看高清完整版在线观看熊 | 欧美精品一区男女天堂| 日韩精品福利网| 欧洲在线/亚洲| 日韩一区中文字幕| 9i在线看片成人免费| 久久精品免费在线观看| 久久精品国产免费| 日韩午夜av一区| 亚洲成人免费av| 欧美综合视频在线观看| 亚洲人成在线观看一区二区| 东方aⅴ免费观看久久av| 久久久www成人免费毛片麻豆| 狠狠色狠狠色综合系列| 欧美成人艳星乳罩| 韩国一区二区三区| 精品福利一二区| 国产精品综合网| 久久免费视频色| 丁香婷婷综合色啪| 亚洲国产精品精华液ab| 成人蜜臀av电影| **性色生活片久久毛片| 日本韩国欧美在线|