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

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

?? qca-ossl.cpp

?? QCA的OPENSSL模塊
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	EVPKey()	{		pkey = 0;		raw_type = false;		state = Idle;	}	EVPKey(const EVPKey &from)	{		pkey = from.pkey;		CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY);		state = Idle;	}	~EVPKey()	{		reset();	}	void reset()	{		if(pkey)			EVP_PKEY_free(pkey);		pkey = 0;		raw.clear ();		raw_type = false;	}	void startSign(const EVP_MD *type)	{		state = SignActive;		if(!type)		{			raw_type = true;			raw.clear ();		}		else		{			raw_type = false;			EVP_MD_CTX_init(&mdctx);			if(!EVP_SignInit_ex(&mdctx, type, NULL))				state = SignError;		}	}	void startVerify(const EVP_MD *type)	{		state = VerifyActive;		if(!type)		{			raw_type = true;			raw.clear ();		}		else		{			EVP_MD_CTX_init(&mdctx);			if(!EVP_VerifyInit_ex(&mdctx, type, NULL))				state = VerifyError;		}	}	void update(const MemoryRegion &in)	{		if(state == SignActive)		{			if (raw_type)				raw += in;			else				if(!EVP_SignUpdate(&mdctx, in.data(), (unsigned int)in.size()))					state = SignError;		}		else if(state == VerifyActive)		{			if (raw_type)				raw += in;			else				if(!EVP_VerifyUpdate(&mdctx, in.data(), (unsigned int)in.size()))					state = VerifyError;		}	}	SecureArray endSign()	{		if(state == SignActive)		{			SecureArray out(EVP_PKEY_size(pkey));			unsigned int len = out.size();			if (raw_type)			{				if (pkey->type == EVP_PKEY_RSA)				{					if(RSA_private_encrypt (raw.size(), (unsigned char *)raw.data(),						(unsigned char *)out.data(), pkey->pkey.rsa,						RSA_PKCS1_PADDING) == -1) {						state = SignError;						return SecureArray ();					}				}				else if (pkey->type == EVP_PKEY_DSA)				{					state = SignError;					return SecureArray ();				}				else				{					state = SignError;					return SecureArray ();				}			}			else {				if(!EVP_SignFinal(&mdctx, (unsigned char *)out.data(), &len, pkey))				{					state = SignError;					return SecureArray();				}			}			out.resize(len);			state = Idle;			return out;		}		else			return SecureArray();	}	bool endVerify(const SecureArray &sig)	{		if(state == VerifyActive)		{			if (raw_type)			{				SecureArray out(EVP_PKEY_size(pkey));				int len = 0;				if (pkey->type == EVP_PKEY_RSA) {					if((len = RSA_public_decrypt (sig.size(), (unsigned char *)sig.data(),						(unsigned char *)out.data (), pkey->pkey.rsa,						RSA_PKCS1_PADDING)) == -1) {						state = VerifyError;						return false;					}				}				else if (pkey->type == EVP_PKEY_DSA)				{					state = VerifyError;					return false;				}				else				{					state = VerifyError;					return false;				}				out.resize (len);				if (out != raw) {					state = VerifyError;					return false;				}			}			else			{				if(EVP_VerifyFinal(&mdctx, (unsigned char *)sig.data(), (unsigned int)sig.size(), pkey) != 1)				{					state = VerifyError;					return false;				}			}			state = Idle;			return true;		}		else			return false;	}};//----------------------------------------------------------------------------// MyDLGroup//----------------------------------------------------------------------------// IETF primes from Botanconst char* IETF_1024_PRIME =	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1"	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD"	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245"	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED"	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381"	"FFFFFFFF FFFFFFFF";const char* IETF_2048_PRIME =	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1"	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD"	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245"	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED"	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D"	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F"	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D"	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B"	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9"	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510"	"15728E5A 8AACAA68 FFFFFFFF FFFFFFFF";const char* IETF_4096_PRIME =	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1"	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD"	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245"	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED"	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D"	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F"	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D"	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B"	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9"	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510"	"15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64"	"ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7"	"ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B"	"F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C"	"BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31"	"43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7"	"88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA"	"2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6"	"287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED"	"1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9"	"93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199"	"FFFFFFFF FFFFFFFF";// JCE seeds from Botanconst char* JCE_512_SEED = "B869C82B 35D70E1B 1FF91B28 E37A62EC DC34409B";const int JCE_512_COUNTER = 123;const char* JCE_768_SEED = "77D0F8C4 DAD15EB8 C4F2F8D6 726CEFD9 6D5BB399";const int JCE_768_COUNTER = 263;const char* JCE_1024_SEED = "8D515589 4229D5E6 89EE01E6 018A237E 2CAE64CD";const int JCE_1024_COUNTER = 92;static QByteArray dehex(const QString &hex){	QString str;	for(int n = 0; n < hex.length(); ++n)	{		if(hex[n] != ' ')			str += hex[n];	}	return hexToArray(str);}static BigInteger decode(const QString &prime){	QByteArray a(1, 0); // 1 byte of zero padding	a.append(dehex(prime));	return BigInteger(SecureArray(a));}static QByteArray decode_seed(const QString &hex_seed){	return dehex(hex_seed);}class DLParams{public:	BigInteger p, q, g;};static bool make_dlgroup(const QByteArray &seed, int bits, int counter, DLParams *params){	int ret_counter;	DSA *dsa = DSA_generate_parameters(bits, (unsigned char *)seed.data(), seed.size(), &ret_counter, NULL, NULL, NULL);	if(!dsa)		return false;	if(ret_counter != counter)		return false;	params->p = bn2bi(dsa->p);	params->q = bn2bi(dsa->q);	params->g = bn2bi(dsa->g);	DSA_free(dsa);	return true;}static bool get_dlgroup(const BigInteger &p, const BigInteger &g, DLParams *params){	params->p = p;	params->q = BigInteger(0);	params->g = g;	return true;}class DLGroupMaker : public QThread{	Q_OBJECTpublic:	DLGroupSet set;	bool ok;	DLParams params;	DLGroupMaker(DLGroupSet _set)	{		set = _set;	}	~DLGroupMaker()	{		wait();	}	virtual void run()	{		if(set == DSA_512)			ok = make_dlgroup(decode_seed(JCE_512_SEED), 512, JCE_512_COUNTER, &params);		else if(set == DSA_768)			ok = make_dlgroup(decode_seed(JCE_768_SEED), 768, JCE_768_COUNTER, &params);		else if(set == DSA_1024)			ok = make_dlgroup(decode_seed(JCE_1024_SEED), 1024, JCE_1024_COUNTER, &params);		else if(set == IETF_1024)			ok = get_dlgroup(decode(IETF_1024_PRIME), 2, &params);		else if(set == IETF_2048)			ok = get_dlgroup(decode(IETF_2048_PRIME), 2, &params);		else if(set == IETF_4096)			ok = get_dlgroup(decode(IETF_4096_PRIME), 2, &params);		else			ok = false;	}};class MyDLGroup : public DLGroupContext{	Q_OBJECTpublic:	DLGroupMaker *gm;	bool wasBlocking;	DLParams params;	bool empty;	MyDLGroup(Provider *p) : DLGroupContext(p)	{		gm = 0;		empty = true;	}	MyDLGroup(const MyDLGroup &from) : DLGroupContext(from.provider())	{		gm = 0;		empty = true;	}	~MyDLGroup()	{		delete gm;	}	virtual Provider::Context *clone() const	{		return new MyDLGroup(*this);	}	virtual QList<DLGroupSet> supportedGroupSets() const	{		QList<DLGroupSet> list;		list += DSA_512;		list += DSA_768;		list += DSA_1024;		list += IETF_1024;		list += IETF_2048;		list += IETF_4096;		return list;	}	virtual bool isNull() const	{		return empty;	}	virtual void fetchGroup(DLGroupSet set, bool block)	{		params = DLParams();		empty = true;		gm = new DLGroupMaker(set);		wasBlocking = block;		if(block)		{			gm->run();			gm_finished();		}		else		{			connect(gm, SIGNAL(finished()), SLOT(gm_finished()));			gm->start();		}	}	virtual void getResult(BigInteger *p, BigInteger *q, BigInteger *g) const	{		*p = params.p;		*q = params.q;		*g = params.g;	}private slots:	void gm_finished()	{		bool ok = gm->ok;		if(ok)		{			params = gm->params;			empty = false;		}		if(wasBlocking)			delete gm;		else			gm->deleteLater();		gm = 0;		if(!wasBlocking)			emit finished();	}};//----------------------------------------------------------------------------// RSAKey//----------------------------------------------------------------------------class RSAKeyMaker : public QThread{	Q_OBJECTpublic:	RSA *result;	int bits, exp;	RSAKeyMaker(int _bits, int _exp, QObject *parent = 0) : QThread(parent), result(0), bits(_bits), exp(_exp)	{	}	~RSAKeyMaker()	{		wait();		if(result)			RSA_free(result);	}	virtual void run()	{		RSA *rsa = RSA_generate_key(bits, exp, NULL, NULL);		if(!rsa)			return;		result = rsa;	}	RSA *takeResult()	{		RSA *rsa = result;		result = 0;		return rsa;	}};class RSAKey : public RSAContext{	Q_OBJECTpublic:	EVPKey evp;	RSAKeyMaker *keymaker;	bool wasBlocking;	bool sec;	RSAKey(Provider *p) : RSAContext(p)	{		keymaker = 0;		sec = false;	}	RSAKey(const RSAKey &from) : RSAContext(from.provider()), evp(from.evp)	{		keymaker = 0;		sec = from.sec;	}	~RSAKey()	{		delete keymaker;	}	virtual Provider::Context *clone() const	{		return new RSAKey(*this);	}	virtual bool isNull() const	{		return (evp.pkey ? false: true);	}	virtual PKey::Type type() const	{		return PKey::RSA;	}	virtual bool isPrivate() const	{		return sec;	}	virtual bool canExport() const	{		return true;	}	virtual void convertToPublic()	{		if(!sec)			return;		// extract the public key into DER format		int len = i2d_RSAPublicKey(evp.pkey->pkey.rsa, NULL);		SecureArray result(len);		unsigned char *p = (unsigned char *)result.data();		i2d_RSAPublicKey(evp.pkey->pkey.rsa, &p);		p = (unsigned char *)result.data();		// put the DER public key back into openssl		evp.reset();		RSA *rsa;#ifdef OSSL_097		rsa = d2i_RSAPublicKey(NULL, (const unsigned char **)&p, result.size());#else		rsa = d2i_RSAPublicKey(NULL, (unsigned char **)&p, result.size());#endif		evp.pkey = EVP_PKEY_new();		EVP_PKEY_assign_RSA(evp.pkey, rsa);		sec = false;	}	virtual int bits() const	{		return EVP_PKEY_bits(evp.pkey);	}	virtual int maximumEncryptSize(EncryptionAlgorithm alg) const	{		RSA *rsa = evp.pkey->pkey.rsa;		if(alg == EME_PKCS1v15)			return RSA_size(rsa) - 11 - 1;		else // oaep			return RSA_size(rsa) - 41 - 1;	}	virtual SecureArray encrypt(const SecureArray &in, EncryptionAlgorithm alg)	{		RSA *rsa = evp.pkey->pkey.rsa;		SecureArray buf = in;		int max = maximumEncryptSize(alg);		if(buf.size() > max)			buf.resize(max);		SecureArray result(RSA_size(rsa));		int pad;		if(alg == EME_PKCS1v15)			pad = RSA_PKCS1_PADDING;		else // oaep			pad = RSA_PKCS1_OAEP_PADDING;		int ret = RSA_public_encrypt(buf.size(), (unsigned char *)buf.data(), (unsigned char *)result.data(), rsa, pad);		if(ret < 0)			return SecureArray();		result.resize(ret);		return result;	}	virtual bool decrypt(const SecureArray &in, SecureArray *out, EncryptionAlgorithm alg)	{		RSA *rsa = evp.pkey->pkey.rsa;		SecureArray result(RSA_size(rsa));		int pad;		if(alg == EME_PKCS1v15)			pad = RSA_PKCS1_PADDING;		else // oaep			pad = RSA_PKCS1_OAEP_PADDING;		int ret = RSA_private_decrypt(in.size(), (unsigned char *)in.data(), (unsigned char *)result.data(), rsa, pad);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美疯狂做受xxxx富婆| 三级成人在线视频| 亚洲午夜私人影院| 狠狠色丁香久久婷婷综合丁香| av一区二区久久| 精品美女在线播放| 亚洲黄色小视频| 国产精品一区二区黑丝| 在线成人免费观看| 亚洲乱码日产精品bd| 国产一区欧美日韩| 欧美一区二区三区的| 尤物av一区二区| 成人毛片视频在线观看| 精品国产一区二区在线观看| 亚洲成人午夜电影| 91理论电影在线观看| 国产精品网友自拍| 精品一区二区三区免费毛片爱| 欧美性大战久久| 亚洲天堂久久久久久久| 国产suv精品一区二区6| 精品国一区二区三区| 天天影视涩香欲综合网| 欧美在线色视频| 亚洲美女电影在线| 99久久久久久| 日韩理论片一区二区| 91香蕉国产在线观看软件| 国产精品色婷婷| 成人av在线观| 国产精品国产三级国产普通话99| 国产精品一区二区无线| 久久精品这里都是精品| 高潮精品一区videoshd| 久久精品人人做人人爽97| 国产精品一区二区三区网站| 国产亚洲一区二区三区四区 | 亚洲精品中文字幕在线观看| 成人动漫一区二区在线| 《视频一区视频二区| 成人精品gif动图一区| 国产精品欧美精品| 99re视频这里只有精品| 一区二区三区小说| 69p69国产精品| 久99久精品视频免费观看| 欧美videofree性高清杂交| 国产主播一区二区| 国产精品视频一区二区三区不卡 | 裸体在线国模精品偷拍| 日韩免费观看高清完整版| 国内外精品视频| 国产精品初高中害羞小美女文| 在线观看区一区二| 麻豆精品在线视频| 欧美高清在线一区二区| 在线亚洲精品福利网址导航| 天堂一区二区在线| 久久精品综合网| 欧美性做爰猛烈叫床潮| 美女被吸乳得到大胸91| 国产欧美一区二区精品久导航| 波多野结衣中文字幕一区二区三区 | 欧美喷水一区二区| 国内成人免费视频| 亚洲欧美日韩电影| 欧美一级在线观看| av在线不卡观看免费观看| 调教+趴+乳夹+国产+精品| 久久精品亚洲精品国产欧美kt∨| 在线视频亚洲一区| 黑人巨大精品欧美黑白配亚洲| 亚洲乱码一区二区三区在线观看| 欧美一级爆毛片| 色偷偷88欧美精品久久久| 麻豆精品视频在线观看视频| 国产精品成人在线观看| 日韩色视频在线观看| 91在线丨porny丨国产| 久久99精品久久久久婷婷| 亚洲日本护士毛茸茸| 精品国产伦一区二区三区观看方式| 色综合天天天天做夜夜夜夜做| 麻豆成人免费电影| 亚洲国产婷婷综合在线精品| 国产欧美一区二区三区在线老狼 | 肉色丝袜一区二区| 亚洲丝袜精品丝袜在线| 欧美精品一区二区高清在线观看| 欧美伊人久久久久久久久影院 | 免费观看久久久4p| 亚洲综合在线五月| 中文字幕制服丝袜成人av | 亚洲男人的天堂在线观看| 欧美精品一区二区久久久| 8x8x8国产精品| 欧美日韩欧美一区二区| 91亚洲大成网污www| 成人激情图片网| 国产精品一区专区| 韩国av一区二区三区四区| 日本va欧美va精品发布| 亚洲一二三四在线| 亚洲线精品一区二区三区八戒| 亚洲天堂av老司机| 国产精品成人网| 自拍偷自拍亚洲精品播放| 国产精品免费网站在线观看| 久久精品一区八戒影视| 久久久久亚洲蜜桃| 久久综合国产精品| 久久精品亚洲一区二区三区浴池| 欧美刺激脚交jootjob| 欧美一级高清片| 精品国产区一区| 国产亚洲一本大道中文在线| 国产日韩欧美麻豆| 久久精品综合网| 国产精品美女久久久久aⅴ| 国产精品国产三级国产普通话99 | 亚洲国产乱码最新视频| 亚洲综合成人在线视频| 日韩美女视频一区二区| 亚洲自拍与偷拍| 首页国产欧美久久| 久久精品久久综合| 国产精品自拍三区| 99久久99久久久精品齐齐| 一本大道久久a久久精二百| 91福利精品第一导航| 7777精品伊人久久久大香线蕉的| 91麻豆精品国产91久久久 | 国产乱码字幕精品高清av| 欧美日韩精品欧美日韩精品一| 欧美精品99久久久**| 欧美成人一区二区三区在线观看| 久久婷婷综合激情| 18成人在线观看| 午夜精品一区二区三区免费视频| 日韩va亚洲va欧美va久久| 国产精品123| 一本一道波多野结衣一区二区| 欧美午夜精品一区二区蜜桃| 日韩免费在线观看| 亚洲欧美怡红院| 欧美aⅴ一区二区三区视频| 国产精品911| 欧美日韩在线一区二区| 久久夜色精品国产欧美乱极品| 亚洲欧美日韩在线| 婷婷成人激情在线网| 成人性生交大片免费看中文| 色妹子一区二区| 久久综合av免费| 亚洲精品菠萝久久久久久久| 麻豆传媒一区二区三区| 91美女片黄在线| 日韩欧美在线网站| 亚洲精品视频在线看| 国产一区视频导航| 欧美日韩免费一区二区三区| 久久精品欧美一区二区三区麻豆| 亚洲成人自拍网| a级高清视频欧美日韩| 日韩欧美国产系列| 亚洲欧美日本在线| 国产精品一区二区在线观看网站| 欧美日韩免费观看一区二区三区| 国产午夜精品福利| 麻豆精品一区二区三区| 91成人免费网站| 国产女同性恋一区二区| 香蕉成人啪国产精品视频综合网| 粉嫩欧美一区二区三区高清影视 | 久久国产视频网| 欧美日韩在线直播| 亚洲色图色小说| 成人国产一区二区三区精品| 精品少妇一区二区三区| 香蕉加勒比综合久久| 在线观看视频91| 亚洲欧美激情一区二区| 国产一区二区三区av电影| 欧美一区二区三区系列电影| 亚洲在线成人精品| 91麻豆视频网站| 一区在线中文字幕| 国产成人精品亚洲午夜麻豆| 日韩精品一区二区三区蜜臀| 天堂午夜影视日韩欧美一区二区| 日本韩国欧美一区| 亚洲视频一区在线| 91网站黄www| 中文字幕在线视频一区| 国产成a人亚洲精品| 亚洲国产高清在线| 岛国av在线一区| 国产精品美女一区二区在线观看| 国产精品亚洲一区二区三区妖精 |