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

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

?? qca-ossl.cpp

?? QCA的OPENSSL模塊
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		dh->p = bi2bn(domain.p());		dh->g = bi2bn(domain.g());		dh->pub_key = bi2bn(y);		dh->priv_key = bi2bn(x);		if(!dh->p || !dh->g || !dh->pub_key || !dh->priv_key)		{			DH_free(dh);			return;		}		evp.pkey = EVP_PKEY_new();		EVP_PKEY_assign_DH(evp.pkey, dh);		sec = true;	}	virtual void createPublic(const DLGroup &domain, const BigInteger &y)	{		evp.reset();		DH *dh = DH_new();		dh->p = bi2bn(domain.p());		dh->g = bi2bn(domain.g());		dh->pub_key = bi2bn(y);		if(!dh->p || !dh->g || !dh->pub_key)		{			DH_free(dh);			return;		}		evp.pkey = EVP_PKEY_new();		EVP_PKEY_assign_DH(evp.pkey, dh);		sec = false;	}	virtual DLGroup domain() const	{		return DLGroup(bn2bi(evp.pkey->pkey.dh->p), bn2bi(evp.pkey->pkey.dh->g));	}	virtual BigInteger y() const	{		return bn2bi(evp.pkey->pkey.dh->pub_key);	}	virtual BigInteger x() const	{		return bn2bi(evp.pkey->pkey.dh->priv_key);	}private slots:	void km_finished()	{		DH *dh = keymaker->takeResult();		if(wasBlocking)			delete keymaker;		else			keymaker->deleteLater();		keymaker = 0;		if(dh)		{			evp.pkey = EVP_PKEY_new();			EVP_PKEY_assign_DH(evp.pkey, dh);			sec = true;		}		if(!wasBlocking)			emit finished();	}};//----------------------------------------------------------------------------// QCA-based RSA_METHOD//----------------------------------------------------------------------------// only supports EMSA3_Raw for nowclass QCA_RSA_METHOD{public:	RSAPrivateKey key;	QCA_RSA_METHOD(RSAPrivateKey _key, RSA *rsa)	{		key = _key;		RSA_set_method(rsa, rsa_method());		rsa->flags |= RSA_FLAG_SIGN_VER;		RSA_set_app_data(rsa, this);		rsa->n = bi2bn(_key.n());		rsa->e = bi2bn(_key.e());	}	RSA_METHOD *rsa_method()	{		static RSA_METHOD *ops = 0;		if(!ops)		{			ops = new RSA_METHOD(*RSA_get_default_method());			ops->rsa_priv_enc = 0;//pkcs11_rsa_encrypt;			ops->rsa_priv_dec = 0;//pkcs11_rsa_decrypt;			ops->rsa_sign = rsa_sign;			ops->rsa_verify = 0;//pkcs11_rsa_verify;			ops->finish = rsa_finish;		}		return ops;	}	static int rsa_sign(int type, const unsigned char *m, unsigned int m_len, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)	{		QCA_RSA_METHOD *self = (QCA_RSA_METHOD *)RSA_get_app_data(rsa);		// TODO: this is disgusting		unsigned char *p, *tmps = NULL;		const unsigned char *s = NULL;		int i,j;		j = 0;		if(type == NID_md5_sha1)		{		}		else		{		// make X509 packet		X509_SIG sig;		ASN1_TYPE parameter;		X509_ALGOR algor;		ASN1_OCTET_STRING digest;		int rsa_size = RSA_size(rsa);		//int rsa_size = 128;		//CK_ULONG sigsize = rsa_size;		sig.algor= &algor;		sig.algor->algorithm=OBJ_nid2obj(type);		if (sig.algor->algorithm == NULL)		{			//RSAerr(RSA_F_RSA_SIGN,RSA_R_UNKNOWN_ALGORITHM_TYPE);			return 0;		}		if (sig.algor->algorithm->length == 0)		{			//RSAerr(RSA_F_RSA_SIGN,RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD);			return 0;		}		parameter.type=V_ASN1_NULL;		parameter.value.ptr=NULL;		sig.algor->parameter= &parameter;		sig.digest= &digest;		sig.digest->data=(unsigned char *)m; /* TMP UGLY CAST */		sig.digest->length=m_len;		i=i2d_X509_SIG(&sig,NULL);		j=rsa_size;		if (i > (j-RSA_PKCS1_PADDING_SIZE))		{			//RSAerr(RSA_F_RSA_SIGN,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);			return 0;		}		tmps=(unsigned char *)OPENSSL_malloc((unsigned int)j+1);		if (tmps == NULL)		{			//RSAerr(RSA_F_RSA_SIGN,ERR_R_MALLOC_FAILURE);			return 0;		}		p=tmps;		i2d_X509_SIG(&sig,&p);		s=tmps;		m = s;		m_len = i;		}		SecureArray input;		input.resize(m_len);		memcpy(input.data(), m, input.size());		SecureArray result = self->key.signMessage(input, EMSA3_Raw);		if(tmps)		{			OPENSSL_cleanse(tmps,(unsigned int)j+1);			OPENSSL_free(tmps);		}		// TODO: even though we return error here, PKCS7_sign will		//   not return error.  what gives?		if(result.isEmpty())			return 0;		memcpy(sigret, result.data(), result.size());		*siglen = result.size();		return 1;	}	static int rsa_finish(RSA *rsa)	{		QCA_RSA_METHOD *self = (QCA_RSA_METHOD *)RSA_get_app_data(rsa);		delete self;		return 1;	}};static RSA *createFromExisting(const RSAPrivateKey &key){	RSA *r = RSA_new();	new QCA_RSA_METHOD(key, r); // will delete itself on RSA_free	return r;}//----------------------------------------------------------------------------// MyPKeyContext//----------------------------------------------------------------------------class MyPKeyContext : public PKeyContext{public:	PKeyBase *k;	MyPKeyContext(Provider *p) : PKeyContext(p)	{		k = 0;	}	~MyPKeyContext()	{		delete k;	}	virtual Provider::Context *clone() const	{		MyPKeyContext *c = new MyPKeyContext(*this);		c->k = (PKeyBase *)k->clone();		return c;	}	virtual QList<PKey::Type> supportedTypes() const	{		QList<PKey::Type> list;		list += PKey::RSA;		list += PKey::DSA;		list += PKey::DH;		return list;	}	virtual QList<PKey::Type> supportedIOTypes() const	{		QList<PKey::Type> list;		list += PKey::RSA;		list += PKey::DSA;		return list;	}	virtual QList<PBEAlgorithm> supportedPBEAlgorithms() const	{		QList<PBEAlgorithm> list;		list += PBES2_DES_SHA1;		list += PBES2_TripleDES_SHA1;		return list;	}	virtual PKeyBase *key()	{		return k;	}	virtual const PKeyBase *key() const	{		return k;	}	virtual void setKey(PKeyBase *key)	{		k = key;	}	virtual bool importKey(const PKeyBase *key)	{		Q_UNUSED(key);		return false;	}	EVP_PKEY *get_pkey() const	{		PKey::Type t = k->type();		if(t == PKey::RSA)			return static_cast<RSAKey *>(k)->evp.pkey;		else if(t == PKey::DSA)			return static_cast<DSAKey *>(k)->evp.pkey;		else			return static_cast<DHKey *>(k)->evp.pkey;	}	PKeyBase *pkeyToBase(EVP_PKEY *pkey, bool sec) const	{		PKeyBase *nk = 0;		if(pkey->type == EVP_PKEY_RSA)		{			RSAKey *c = new RSAKey(provider());			c->evp.pkey = pkey;			c->sec = sec;			nk = c;		}		else if(pkey->type == EVP_PKEY_DSA)		{			DSAKey *c = new DSAKey(provider());			c->evp.pkey = pkey;			c->sec = sec;			nk = c;		}		else if(pkey->type == EVP_PKEY_DH)		{			DHKey *c = new DHKey(provider());			c->evp.pkey = pkey;			c->sec = sec;			nk = c;		}		else		{			EVP_PKEY_free(pkey);		}		return nk;	}	virtual QByteArray publicToDER() const	{		EVP_PKEY *pkey = get_pkey();		// OpenSSL does not have DH import/export support		if(pkey->type == EVP_PKEY_DH)			return QByteArray();		BIO *bo = BIO_new(BIO_s_mem());		i2d_PUBKEY_bio(bo, pkey);		QByteArray buf = bio2ba(bo);		return buf;	}	virtual QString publicToPEM() const	{		EVP_PKEY *pkey = get_pkey();		// OpenSSL does not have DH import/export support		if(pkey->type == EVP_PKEY_DH)			return QString();		BIO *bo = BIO_new(BIO_s_mem());		PEM_write_bio_PUBKEY(bo, pkey);		QByteArray buf = bio2ba(bo);		return QString::fromLatin1(buf);	}	virtual ConvertResult publicFromDER(const QByteArray &in)	{		delete k;		k = 0;		BIO *bi = BIO_new(BIO_s_mem());		BIO_write(bi, in.data(), in.size());		EVP_PKEY *pkey = d2i_PUBKEY_bio(bi, NULL);		BIO_free(bi);		if(!pkey)			return ErrorDecode;		k = pkeyToBase(pkey, false);		if(k)			return ConvertGood;		else			return ErrorDecode;	}	virtual ConvertResult publicFromPEM(const QString &s)	{		delete k;		k = 0;		QByteArray in = s.toLatin1();		BIO *bi = BIO_new(BIO_s_mem());		BIO_write(bi, in.data(), in.size());		EVP_PKEY *pkey = PEM_read_bio_PUBKEY(bi, NULL, passphrase_cb, NULL);		BIO_free(bi);		if(!pkey)			return ErrorDecode;		k = pkeyToBase(pkey, false);		if(k)			return ConvertGood;		else			return ErrorDecode;	}	virtual SecureArray privateToDER(const SecureArray &passphrase, PBEAlgorithm pbe) const	{		//if(pbe == PBEDefault)		//	pbe = PBES2_TripleDES_SHA1;		const EVP_CIPHER *cipher = 0;		if(pbe == PBES2_TripleDES_SHA1)			cipher = EVP_des_ede3_cbc();		else if(pbe == PBES2_DES_SHA1)			cipher = EVP_des_cbc();		if(!cipher)			return SecureArray();		EVP_PKEY *pkey = get_pkey();		// OpenSSL does not have DH import/export support		if(pkey->type == EVP_PKEY_DH)			return SecureArray();		BIO *bo = BIO_new(BIO_s_mem());		if(!passphrase.isEmpty())			i2d_PKCS8PrivateKey_bio(bo, pkey, cipher, NULL, 0, NULL, (void *)passphrase.data());		else			i2d_PKCS8PrivateKey_bio(bo, pkey, NULL, NULL, 0, NULL, NULL);		SecureArray buf = bio2buf(bo);		return buf;	}	virtual QString privateToPEM(const SecureArray &passphrase, PBEAlgorithm pbe) const	{		//if(pbe == PBEDefault)		//	pbe = PBES2_TripleDES_SHA1;		const EVP_CIPHER *cipher = 0;		if(pbe == PBES2_TripleDES_SHA1)			cipher = EVP_des_ede3_cbc();		else if(pbe == PBES2_DES_SHA1)			cipher = EVP_des_cbc();		if(!cipher)			return QString();		EVP_PKEY *pkey = get_pkey();		// OpenSSL does not have DH import/export support		if(pkey->type == EVP_PKEY_DH)			return QString();		BIO *bo = BIO_new(BIO_s_mem());		if(!passphrase.isEmpty())			PEM_write_bio_PKCS8PrivateKey(bo, pkey, cipher, NULL, 0, NULL, (void *)passphrase.data());		else			PEM_write_bio_PKCS8PrivateKey(bo, pkey, NULL, NULL, 0, NULL, NULL);		SecureArray buf = bio2buf(bo);		return QString::fromLatin1(buf.toByteArray());	}	virtual ConvertResult privateFromDER(const SecureArray &in, const SecureArray &passphrase)	{		delete k;		k = 0;		EVP_PKEY *pkey;		if(!passphrase.isEmpty())			pkey = qca_d2i_PKCS8PrivateKey(in, NULL, NULL, (void *)passphrase.data());		else			pkey = qca_d2i_PKCS8PrivateKey(in, NULL, passphrase_cb, NULL);		if(!pkey)			return ErrorDecode;		k = pkeyToBase(pkey, true);		if(k)			return ConvertGood;		else			return ErrorDecode;	}	virtual ConvertResult privateFromPEM(const QString &s, const SecureArray &passphrase)	{		delete k;		k = 0;		QByteArray in = s.toLatin1();		BIO *bi = BIO_new(BIO_s_mem());		BIO_write(bi, in.data(), in.size());		EVP_PKEY *pkey;		if(!passphrase.isEmpty())			pkey = PEM_read_bio_PrivateKey(bi, NULL, NULL, (void *)passphrase.data());		else			pkey = PEM_read_bio_PrivateKey(bi, NULL, passphrase_cb, NULL);		BIO_free(bi);		if(!pkey)			return ErrorDecode;		k = pkeyToBase(pkey, true);		if(k)			return ConvertGood;		else			return ErrorDecode;	}};//----------------------------------------------------------------------------// MyCertContext//----------------------------------------------------------------------------class X509Item{public:	X509 *cert;	X509_REQ *req;	X509_CRL *crl;	enum Type { TypeCert, TypeReq, TypeCRL };	X509Item()	{		cert = 0;		req = 0;		crl = 0;	}	X509Item(const X509Item &from)	{		cert = 0;		req = 0;		crl = 0;		*this = from;	}	~X509Item()	{		reset();	}	X509Item & operator=(const X509Item &from)	{		if(this != &from)		{			reset();			cert = from.cert;			req = from.req;			crl = from.crl;			if(cert)				CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);			if(req)				CRYPTO_add(&req->references, 1, CRYPTO_LOCK_X509_REQ);			if(crl)				CRYPTO_add(&crl->references, 1, CRYPTO_LOCK_X509_CRL);		}		return *this;	}	void reset()	{		if(cert)		{			X509_free(cert);			cert = 0;		}		if(req)		{			X509_REQ_free(req);			req = 0;		}		if(crl)		{			X509_CRL_free(crl);			crl = 0;		}	}	bool isNull() const	{		return (!cert && !req && !crl);	}	QByteArray toDER() const	{		BIO *bo = BIO_new(BIO_s_mem());		if(ce

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女主播视频一区| 国内成+人亚洲+欧美+综合在线| 欧美一卡二卡在线观看| 丁香婷婷深情五月亚洲| 亚洲一卡二卡三卡四卡五卡| 精品1区2区在线观看| 色狠狠一区二区三区香蕉| 韩国精品主播一区二区在线观看| 亚洲综合丁香婷婷六月香| 国产女同性恋一区二区| 5858s免费视频成人| 91麻豆高清视频| 国产成人免费视频网站| 美女视频黄a大片欧美| 亚洲一二三区在线观看| 国产精品传媒在线| 久久蜜臀精品av| 欧美电影精品一区二区| 欧美日韩成人综合天天影院| 色综合久久久网| heyzo一本久久综合| 国产精品综合在线视频| 狠狠色综合日日| 日本成人在线不卡视频| 视频一区在线视频| 亚洲电影在线播放| 一区二区三区**美女毛片| 亚洲欧美自拍偷拍| 国产精品亲子伦对白| 久久久久久久久久久99999| 精品日韩欧美一区二区| 欧美成人综合网站| 日韩欧美中文字幕精品| 欧美一区二区三区白人| 91精品在线一区二区| 欧美精品少妇一区二区三区| 欧美亚洲综合一区| 欧美综合天天夜夜久久| 色婷婷av一区二区三区大白胸| 91丨porny丨国产| 97aⅴ精品视频一二三区| 不卡电影一区二区三区| 色先锋资源久久综合| 91麻豆国产自产在线观看| 91激情在线视频| 91高清视频免费看| 欧美日韩国产成人在线免费| 欧美日韩中文国产| 91精品一区二区三区在线观看| 在线电影院国产精品| 日韩一区二区视频| 欧美成人女星排名| 国产喂奶挤奶一区二区三区| 欧美激情一区二区三区不卡| 中文字幕字幕中文在线中不卡视频| 亚洲男同性恋视频| 丝袜诱惑亚洲看片| 国产美女av一区二区三区| 成人黄色电影在线| 91福利视频网站| 日韩午夜小视频| 中文在线一区二区| 一区二区理论电影在线观看| 午夜精品久久久久久久久| 久久国产精品一区二区| 国产成人精品三级麻豆| 日本道精品一区二区三区| 91精品欧美福利在线观看| 精品国产凹凸成av人导航| 国产精品色眯眯| 亚洲成人黄色小说| 国产一区在线视频| 色美美综合视频| 日韩欧美国产电影| 亚洲日本在线视频观看| 日韩电影在线免费看| 国产a久久麻豆| 欧美日韩高清影院| 国产欧美日韩亚州综合| 亚洲午夜羞羞片| 国产大片一区二区| 欧美中文字幕一区二区三区| 精品国内二区三区| 一区二区三区波多野结衣在线观看| 精品一区二区三区日韩| 91丨九色丨黑人外教| 精品国产一区二区国模嫣然| 亚洲主播在线观看| 精品一区二区三区久久| 欧美怡红院视频| 国产亚洲欧美在线| 视频一区免费在线观看| 波多野结衣亚洲| 日韩女优电影在线观看| 依依成人精品视频| 国产毛片精品视频| 911精品国产一区二区在线| 国产精品理论在线观看| 蜜臀av性久久久久蜜臀aⅴ| 91亚洲精品久久久蜜桃| 久久婷婷成人综合色| 亚洲午夜在线视频| 91丨porny丨最新| 久久久久久久av麻豆果冻| 婷婷国产v国产偷v亚洲高清| jlzzjlzz欧美大全| 久久精子c满五个校花| 日本亚洲视频在线| 欧美日韩国产区一| 亚洲激情男女视频| av成人免费在线| 国产亚洲一二三区| 国产一区二区三区黄视频 | 一区二区三区日本| 国产福利一区二区三区视频| 日韩一区二区免费电影| 一区二区久久久久久| av在线一区二区三区| 国产日韩欧美精品电影三级在线| 免费观看30秒视频久久| 51精品国自产在线| 亚洲成人精品一区| 精品污污网站免费看| 一区二区三区国产精品| 91九色最新地址| 一区二区三区在线观看动漫| 99免费精品在线| 国产精品午夜在线| 岛国一区二区在线观看| 国产日韩v精品一区二区| 国产在线精品不卡| 久久嫩草精品久久久精品一| 久久99九九99精品| 精品国产一区二区国模嫣然| 国内精品国产成人国产三级粉色| 日韩精品一区二区三区蜜臀| 久久精品国产在热久久| 精品欧美一区二区在线观看| 久久国产精品免费| 2020国产精品| 国产成人亚洲综合a∨婷婷| 国产欧美综合在线| 成人激情校园春色| 亚洲欧美经典视频| 色94色欧美sute亚洲线路二 | 精品久久五月天| 老司机精品视频一区二区三区| 日韩免费一区二区三区在线播放| 免费的国产精品| 久久久久久一二三区| 成人午夜av影视| 亚洲综合成人在线视频| 91精品国产综合久久久久久久久久| 奇米影视一区二区三区小说| 久久影院视频免费| 播五月开心婷婷综合| 伊人色综合久久天天人手人婷| 欧美午夜宅男影院| 男女激情视频一区| 久久精品一区二区| 一本久久精品一区二区| 亚洲主播在线播放| 欧美精品一区二| 色婷婷精品久久二区二区蜜臂av | 久久精品亚洲麻豆av一区二区 | 日韩视频中午一区| 国产精品91一区二区| 亚洲日本va午夜在线影院| 欧美三级三级三级爽爽爽| 美日韩一区二区| 国产精品国产三级国产专播品爱网 | 亚洲高清不卡在线观看| 欧美一区二区三区人| 国产精品亚洲а∨天堂免在线| 亚洲欧洲中文日韩久久av乱码| 91精品婷婷国产综合久久竹菊| 国产1区2区3区精品美女| 亚洲一区二区四区蜜桃| 2024国产精品| 欧洲一区二区三区免费视频| 韩国一区二区三区| 一区二区三区蜜桃| 久久老女人爱爱| 欧美美女激情18p| 成人综合婷婷国产精品久久免费| 一区二区不卡在线播放 | 日本在线不卡视频| 国产精品视频线看| 91精品国产一区二区| av午夜一区麻豆| 日本不卡中文字幕| 亚洲麻豆国产自偷在线| ww久久中文字幕| 欧美日韩精品欧美日韩精品一| 国产成人在线观看| 青青草国产成人av片免费| 亚洲欧美日韩国产一区二区三区| 精品国产sm最大网站| 欧美久久久影院| 99精品欧美一区二区三区小说 |