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

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

?? asn.h

?? 加密函數庫:包括多種加密解密算法,數字簽名,散列算法
?? H
字號:
#ifndef CRYPTOPP_ASN_H
#define CRYPTOPP_ASN_H

#include "filters.h"
#include "queue.h"
#include <vector>

NAMESPACE_BEGIN(CryptoPP)

// these tags and flags are not complete
enum ASNTag
{
	BOOLEAN 			= 0x01,
	INTEGER 			= 0x02,
	BIT_STRING			= 0x03,
	OCTET_STRING		= 0x04,
	TAG_NULL			= 0x05,
	OBJECT_IDENTIFIER	= 0x06,
	OBJECT_DESCRIPTOR	= 0x07,
	EXTERNAL			= 0x08,
	REAL				= 0x09,
	ENUMERATED			= 0x0a,
	UTF8_STRING			= 0x0c,
	SEQUENCE			= 0x10,
	SET 				= 0x11,
	NUMERIC_STRING		= 0x12,
	PRINTABLE_STRING 	= 0x13,
	T61_STRING			= 0x14,
	VIDEOTEXT_STRING 	= 0x15,
	IA5_STRING			= 0x16,
	UTC_TIME 			= 0x17,
	GENERALIZED_TIME 	= 0x18,
	GRAPHIC_STRING		= 0x19,
	VISIBLE_STRING		= 0x1a,
	GENERAL_STRING		= 0x1b
};

enum ASNIdFlag
{
	UNIVERSAL			= 0x00,
//	DATA				= 0x01,
//	HEADER				= 0x02,
	CONSTRUCTED 		= 0x20,
	APPLICATION 		= 0x40,
	CONTEXT_SPECIFIC	= 0x80,
	PRIVATE 			= 0xc0
};

inline void BERDecodeError() {throw BERDecodeErr();}

class UnknownOID : public BERDecodeErr
{
public:
	UnknownOID() : BERDecodeErr("BER decode error: unknown object identifier") {}
	UnknownOID(const char *err) : BERDecodeErr(err) {}
};

// unsigned int DERLengthEncode(unsigned int length, byte *output=0);
unsigned int DERLengthEncode(BufferedTransformation &out, unsigned int length);
// returns false if indefinite length
bool BERLengthDecode(BufferedTransformation &in, unsigned int &length);

void DEREncodeNull(BufferedTransformation &out);
void BERDecodeNull(BufferedTransformation &in);

unsigned int DEREncodeOctetString(BufferedTransformation &out, const byte *str, unsigned int strLen);
unsigned int DEREncodeOctetString(BufferedTransformation &out, const SecByteBlock &str);
unsigned int BERDecodeOctetString(BufferedTransformation &in, SecByteBlock &str);
unsigned int BERDecodeOctetString(BufferedTransformation &in, BufferedTransformation &str);

// for UTF8_STRING, PRINTABLE_STRING, and IA5_STRING
unsigned int DEREncodeTextString(BufferedTransformation &out, const std::string &str, byte asnTag);
unsigned int BERDecodeTextString(BufferedTransformation &in, std::string &str, byte asnTag);

unsigned int DEREncodeBitString(BufferedTransformation &out, const byte *str, unsigned int strLen, unsigned int unusedBits=0);
unsigned int BERDecodeBitString(BufferedTransformation &in, SecByteBlock &str, unsigned int &unusedBits);

//! Object Identifier
class OID
{
public:
	OID() {}
	OID(unsigned long v) : m_values(1, v) {}
	OID(BufferedTransformation &bt) {BERDecode(bt);}

	inline OID & operator+=(unsigned long rhs) {m_values.push_back(rhs); return *this;}

	void DEREncode(BufferedTransformation &bt) const;
	void BERDecode(BufferedTransformation &bt);

	// throw BERDecodeErr() if decoded value doesn't equal this OID
	void BERDecodeAndCheck(BufferedTransformation &bt) const;

	std::vector<unsigned long> m_values;

private:
	static void EncodeValue(BufferedTransformation &bt, unsigned long v);
	static unsigned int DecodeValue(BufferedTransformation &bt, unsigned long &v);
};

class EncodedObjectFilter : public Filter
{
public:
	enum Flag {PUT_OBJECTS=1, PUT_MESSANGE_END_AFTER_EACH_OBJECT=2, PUT_MESSANGE_END_AFTER_ALL_OBJECTS=4, PUT_MESSANGE_SERIES_END_AFTER_ALL_OBJECTS=8};
	EncodedObjectFilter(BufferedTransformation *attachment = NULL, unsigned int nObjects = 1, word32 flags = 0);

	void Put(const byte *inString, unsigned int length);

	unsigned int GetNumberOfCompletedObjects() const {return m_nCurrentObject;}
	unsigned long GetPositionOfObject(unsigned int i) const {return m_positions[i];}

private:
	BufferedTransformation & CurrentTarget();

	word32 m_flags;
	unsigned int m_nObjects, m_nCurrentObject, m_level;
	std::vector<unsigned int> m_positions;
	ByteQueue m_queue;
	enum State {IDENTIFIER, LENGTH, BODY, TAIL, ALL_DONE} m_state;
	byte m_id;
	unsigned int m_lengthRemaining;
};

//! BER General Decoder
class BERGeneralDecoder : public Store
{
public:
	explicit BERGeneralDecoder(BufferedTransformation &inQueue, byte asnTag);
	explicit BERGeneralDecoder(BERGeneralDecoder &inQueue, byte asnTag);
	~BERGeneralDecoder();

	bool IsDefiniteLength() const {return m_definiteLength;}
	unsigned int RemainingLength() const {assert(m_definiteLength); return m_length;}
	bool EndReached() const;
	byte PeekByte() const;
	void CheckByte(byte b);

	unsigned int TransferTo2(BufferedTransformation &target, unsigned long &transferBytes, const std::string &channel=NULL_CHANNEL, bool blocking=true);
	unsigned int CopyRangeTo2(BufferedTransformation &target, unsigned long &begin, unsigned long end=ULONG_MAX, const std::string &channel=NULL_CHANNEL, bool blocking=true) const;

	// call this to denote end of sequence
	void MessageEnd();

protected:
	BufferedTransformation &m_inQueue;
	bool m_finished, m_definiteLength;
	unsigned int m_length;

private:
	void StoreInitialize(const NameValuePairs &parameters) {assert(false);}
	unsigned int ReduceLength(unsigned int delta);
};

//! DER General Encoder
class DERGeneralEncoder : public ByteQueue
{
public:
	explicit DERGeneralEncoder(BufferedTransformation &outQueue, byte asnTag = SEQUENCE | CONSTRUCTED);
	explicit DERGeneralEncoder(DERGeneralEncoder &outQueue, byte asnTag = SEQUENCE | CONSTRUCTED);
	~DERGeneralEncoder();

	// call this to denote end of sequence
	void MessageEnd();

private:
	BufferedTransformation &m_outQueue;
	bool m_finished;

	byte m_asnTag;
};

//! BER Sequence Decoder
class BERSequenceDecoder : public BERGeneralDecoder
{
public:
	explicit BERSequenceDecoder(BufferedTransformation &inQueue, byte asnTag = SEQUENCE | CONSTRUCTED)
		: BERGeneralDecoder(inQueue, asnTag) {}
	explicit BERSequenceDecoder(BERSequenceDecoder &inQueue, byte asnTag = SEQUENCE | CONSTRUCTED)
		: BERGeneralDecoder(inQueue, asnTag) {}
};

//! DER Sequence Encoder
class DERSequenceEncoder : public DERGeneralEncoder
{
public:
	explicit DERSequenceEncoder(BufferedTransformation &outQueue, byte asnTag = SEQUENCE | CONSTRUCTED)
		: DERGeneralEncoder(outQueue, asnTag) {}
	explicit DERSequenceEncoder(DERSequenceEncoder &outQueue, byte asnTag = SEQUENCE | CONSTRUCTED)
		: DERGeneralEncoder(outQueue, asnTag) {}
};

//! BER Set Decoder
class BERSetDecoder : public BERGeneralDecoder
{
public:
	explicit BERSetDecoder(BufferedTransformation &inQueue, byte asnTag = SET | CONSTRUCTED)
		: BERGeneralDecoder(inQueue, asnTag) {}
	explicit BERSetDecoder(BERSetDecoder &inQueue, byte asnTag = SET | CONSTRUCTED)
		: BERGeneralDecoder(inQueue, asnTag) {}
};

//! DER Set Encoder
class DERSetEncoder : public DERGeneralEncoder
{
public:
	explicit DERSetEncoder(BufferedTransformation &outQueue, byte asnTag = SET | CONSTRUCTED)
		: DERGeneralEncoder(outQueue, asnTag) {}
	explicit DERSetEncoder(DERSetEncoder &outQueue, byte asnTag = SET | CONSTRUCTED)
		: DERGeneralEncoder(outQueue, asnTag) {}
};

template <class T>
class ASNOptional : public member_ptr<T>
{
public:
	void BERDecode(BERSequenceDecoder &seqDecoder, byte tag, byte mask = ~CONSTRUCTED)
	{
		byte b;
		if (seqDecoder.Peek(b) && (b & mask) == tag)
			reset(new T(seqDecoder));
	}
	void DEREncode(BufferedTransformation &out)
	{
		if (get() != NULL)
			get()->DEREncode(out);
	}
};

//! .
class ASN1Key : public ASN1CryptoMaterial
{
public:
	virtual OID GetAlgorithmID() const =0;
	virtual bool BERDecodeAlgorithmParameters(BufferedTransformation &bt)
		{BERDecodeNull(bt); return false;}
	virtual bool DEREncodeAlgorithmParameters(BufferedTransformation &bt) const
		{DEREncodeNull(bt); return false;}	// see RFC 2459, section 7.3.1
	// one of the following two should be overriden
	//! decode subjectPublicKey part of subjectPublicKeyInfo, or privateKey part of privateKeyInfo, without the BIT STRING or OCTET STRING header
	virtual void BERDecodeKey(BufferedTransformation &bt) {assert(false);}
	virtual void BERDecodeKey2(BufferedTransformation &bt, bool parametersPresent, unsigned int size)
		{BERDecodeKey(bt);}
	//! encode subjectPublicKey part of subjectPublicKeyInfo, or privateKey part of privateKeyInfo, without the BIT STRING or OCTET STRING header
	virtual void DEREncodeKey(BufferedTransformation &bt) const =0;
};

//! encodes/decodes subjectPublicKeyInfo
class X509PublicKey : virtual public ASN1Key, public PublicKey
{
public:
	void BERDecode(BufferedTransformation &bt);
	void DEREncode(BufferedTransformation &bt) const;
};

//! encodes/decodes privateKeyInfo
class PKCS8PrivateKey : virtual public ASN1Key, public PrivateKey
{
public:
	void BERDecode(BufferedTransformation &bt);
	void DEREncode(BufferedTransformation &bt) const;

	virtual void BERDecodeOptionalAttributes(BufferedTransformation &bt)
		{}	// TODO: skip optional attributes if present
	virtual void DEREncodeOptionalAttributes(BufferedTransformation &bt) const
		{}
};

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

//! DER Encode Unsigned
/*! for INTEGER, BOOLEAN, and ENUM */
template <class T>
unsigned int DEREncodeUnsigned(BufferedTransformation &out, T w, byte asnTag = INTEGER)
{
	byte buf[sizeof(w)+1];
	unsigned int bc;
	if (asnTag == BOOLEAN)
	{
		buf[sizeof(w)] = w ? 0xff : 0;
		bc = 1;
	}
	else
	{
		buf[0] = 0;
		for (unsigned int i=0; i<sizeof(w); i++)
			buf[i+1] = byte(w >> (sizeof(w)-1-i)*8);
		bc = sizeof(w);
		while (bc > 1 && buf[sizeof(w)+1-bc] == 0)
			--bc;
		if (buf[sizeof(w)+1-bc] & 0x80)
			++bc;
	}
	out.Put(asnTag);
	unsigned int lengthBytes = DERLengthEncode(out, bc);
	out.Put(buf+sizeof(w)+1-bc, bc);
	return 1+lengthBytes+bc;
}

//! BER Decode Unsigned
// VC60 workaround: std::numeric_limits<T>::max conflicts with MFC max macro
// CW41 workaround: std::numeric_limits<T>::max causes a template error
template <class T>
void BERDecodeUnsigned(BufferedTransformation &in, T &w, byte asnTag = INTEGER,
					   T minValue = 0, T maxValue = 0xffffffff)
{
	byte b;
	if (!in.Get(b) || b != asnTag)
		BERDecodeError();

	unsigned int bc;
	BERLengthDecode(in, bc);

	SecByteBlock buf(bc);

	if (bc != in.Get(buf, bc))
		BERDecodeError();

	const byte *ptr = buf;
	while (bc > sizeof(w) && *ptr == 0)
	{
		bc--;
		ptr++;
	}
	if (bc > sizeof(w))
		BERDecodeError();

	w = 0;
	for (unsigned int i=0; i<bc; i++)
		w = (w << 8) | ptr[i];

	if (w < minValue || w > maxValue)
		BERDecodeError();
}

inline bool operator==(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs)
	{return lhs.m_values == rhs.m_values;}
inline bool operator!=(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs)
	{return lhs.m_values != rhs.m_values;}
inline bool operator<(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &rhs)
	{return std::lexicographical_compare(lhs.m_values.begin(), lhs.m_values.end(), rhs.m_values.begin(), rhs.m_values.end());}
inline ::CryptoPP::OID operator+(const ::CryptoPP::OID &lhs, unsigned long rhs)
	{return ::CryptoPP::OID(lhs)+=rhs;}

NAMESPACE_END

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费人成在线不卡| 91丝袜国产在线播放| 成人午夜视频免费看| 日本高清免费不卡视频| www国产亚洲精品久久麻豆| 亚洲欧美日韩在线不卡| 激情五月婷婷综合| 欧美亚洲国产一区在线观看网站| 久久综合给合久久狠狠狠97色69| 一个色综合网站| 国产精品99久久久久久宅男| 7777精品伊人久久久大香线蕉经典版下载 | 久久日韩粉嫩一区二区三区| 亚洲制服丝袜一区| 懂色一区二区三区免费观看| 日韩欧美一区二区视频| 亚洲福利视频一区| 色综合视频在线观看| 欧美激情综合五月色丁香| 久久99精品一区二区三区 | 国产一区二区女| 欧美久久久久久久久久| 一区二区三区四区在线播放| 福利一区在线观看| 精品播放一区二区| 奇米四色…亚洲| 91精品欧美综合在线观看最新| 国产精品免费人成网站| 国产精品亚洲一区二区三区在线| 欧美成人国产一区二区| 国内成人精品2018免费看| 欧美电影影音先锋| 五月天久久比比资源色| 欧美三级电影在线观看| 一区二区三区四区激情| 一本久久精品一区二区| 中文字幕一区二区三区蜜月| www.成人网.com| 欧美激情一区在线| 不卡av电影在线播放| 亚洲国产精品高清| 99久久精品免费观看| 1000精品久久久久久久久| 99久久国产综合色|国产精品| 亚洲欧洲美洲综合色网| 91黄色在线观看| 日韩影院精彩在线| 欧美成人一区二区三区| 国产一区二区0| 国产精品美女久久久久aⅴ国产馆| 粉嫩av一区二区三区在线播放| 久久亚洲精品小早川怜子| 成人免费视频免费观看| 亚洲人成人一区二区在线观看 | 国产成人av一区| 国产精品久久久久影视| 91福利精品视频| 五月婷婷激情综合网| 精品国一区二区三区| 国产成人精品三级麻豆| 久久综合色天天久久综合图片| 久久精子c满五个校花| 日本一区二区三区在线不卡| 亚洲国产乱码最新视频| www.日韩av| 91麻豆精品国产91久久久久久 | 亚洲午夜激情网页| 51精品视频一区二区三区| 久久电影网站中文字幕| 国产视频在线观看一区二区三区| 国产成人免费视频精品含羞草妖精| 国产精品国模大尺度视频| 色噜噜狠狠色综合中国| 韩国三级在线一区| 亚洲欧美在线高清| 日韩一区二区三| 色综合天天性综合| 六月丁香综合在线视频| 亚洲免费观看高清完整版在线观看熊 | 中文字幕一区在线观看| 宅男在线国产精品| 99久久国产综合精品女不卡| 日本视频一区二区三区| 亚洲欧美一区二区三区孕妇| 日韩精品一区国产麻豆| 日本道精品一区二区三区| 国产另类ts人妖一区二区| 亚洲一区二区三区四区不卡| 久久九九国产精品| 日韩西西人体444www| 一道本成人在线| 国产suv一区二区三区88区| 婷婷中文字幕一区三区| 亚洲精品中文在线影院| 欧美激情资源网| 久久亚洲精品国产精品紫薇| 91精品视频网| 欧美日韩免费电影| 色偷偷88欧美精品久久久| 国产一区二区中文字幕| 免费人成在线不卡| 天天色图综合网| 亚洲一区在线观看网站| 综合网在线视频| 中文字幕欧美区| 久久久精品综合| 精品免费一区二区三区| 5858s免费视频成人| 欧美日韩国产影片| 欧美中文字幕不卡| 在线看日本不卡| 欧美综合在线视频| 在线观看日韩毛片| 色狠狠一区二区| 欧美伊人久久大香线蕉综合69| 色老综合老女人久久久| 91精品91久久久中77777| 色88888久久久久久影院野外| 99久久国产免费看| 99国产欧美久久久精品| 91在线观看一区二区| 99久久99久久精品免费看蜜桃| 成人av电影在线播放| bt欧美亚洲午夜电影天堂| 91一区在线观看| 在线一区二区视频| 欧美日韩免费电影| 91.com在线观看| 欧美本精品男人aⅴ天堂| www激情久久| 中文字幕一区av| 一区二区三区中文字幕电影| 亚洲一区二区三区小说| 午夜精品福利视频网站| 日本一不卡视频| 国产在线乱码一区二区三区| 国产成人欧美日韩在线电影| 国产a视频精品免费观看| av日韩在线网站| 欧美影院午夜播放| 日韩欧美你懂的| 国产视频一区在线播放| 亚洲欧洲综合另类在线| 日韩国产成人精品| 国产精品影视网| 91黄色激情网站| 精品少妇一区二区三区在线播放| 日本一二三不卡| 日韩电影免费在线观看网站| 激情文学综合丁香| 91网站在线观看视频| 宅男噜噜噜66一区二区66| 国产拍揄自揄精品视频麻豆| 亚洲天堂福利av| 美腿丝袜一区二区三区| www.亚洲色图.com| 91精品一区二区三区久久久久久| 国产日韩一级二级三级| 一区二区三区久久| 黄色精品一二区| 欧美私模裸体表演在线观看| 久久久久综合网| 日韩一区精品字幕| 成人app在线观看| 日韩美女在线视频| 亚洲区小说区图片区qvod| 韩国视频一区二区| 欧美精品黑人性xxxx| 亚洲男人都懂的| 国产精品一区久久久久| 欧美日韩午夜影院| 亚洲色图视频免费播放| 国产精品中文欧美| 91精品国产综合久久香蕉的特点 | 亚洲美女电影在线| 国产一区二区视频在线播放| 欧美剧情电影在线观看完整版免费励志电影 | 91亚洲精品久久久蜜桃| 国产亚洲人成网站| 精品综合免费视频观看| 欧美综合亚洲图片综合区| 国产精品伦理一区二区| 国精产品一区一区三区mba桃花 | 欧美成人精品3d动漫h| 午夜亚洲国产au精品一区二区| 91在线视频免费观看| 亚洲国产高清在线| 国产成人在线视频网址| 精品免费日韩av| 加勒比av一区二区| 欧美刺激午夜性久久久久久久 | 欧美一区二区成人| 香蕉影视欧美成人| 色噜噜夜夜夜综合网| 亚洲免费在线观看| 日本韩国欧美在线| 一区二区三区在线不卡| 一本久道久久综合中文字幕| 亚洲情趣在线观看| 欧美在线免费视屏|