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

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

?? pki_key.cpp

?? 一個小型證書管理系統
?? CPP
字號:
/* * Copyright (C) 2001 Christian Hohnstaedt. * *  All rights reserved. * * *  Redistribution and use in source and binary forms, with or without  *  modification, are permitted provided that the following conditions are met: * *  - Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. *  - Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. *  - Neither the name of the author nor the names of its contributors may be  *    used to endorse or promote products derived from this software without *    specific prior written permission. * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This program links to software with different licenses from: * *	http://www.openssl.org which includes cryptographic software * 	written by Eric Young (eay@cryptsoft.com)" * *	http://www.sleepycat.com * *	http://www.trolltech.com *  * * * http://www.hohnstaedt.de/xca * email: christian@hohnstaedt.de * * $Id: pki_key.cpp,v 1.32 2003/01/06 19:35:51 chris Exp $ * */                           #include "pki_key.h"char pki_key::passwd[40]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";void pki_key::init(){	ucount = 0;	className = "pki_key";}	pki_key::pki_key(const string d, void (*cb)(int, int,void *),void *prog, int bits = 1024, int type): pki_base(d){	init();	key = EVP_PKEY_new();	openssl_error();		key->type = type;	if (type == EVP_PKEY_RSA) {	   RSA *rsakey;	   rsakey = RSA_generate_key(bits, 0x10001, cb, prog);	   if (rsakey) EVP_PKEY_set1_RSA(key, rsakey);	}	openssl_error();	}pki_key::pki_key(const pki_key *pk) 	:pki_base(pk->desc){	init();	key = EVP_PKEY_new();	openssl_error();		key->type = pk->key->type;	if (key->type == EVP_PKEY_RSA) {		key->pkey.rsa=((RSA *)ASN1_dup( (int (*)())i2d_RSAPrivateKey, (char *(*)())d2i_RSAPrivateKey,(char *)pk->key->pkey.rsa));	}	// TODO add DSA support.....		openssl_error();}pki_key::pki_key(const string d, int type )	:pki_base(d){ 	init();	key = EVP_PKEY_new();	key->type = type;	openssl_error();}	pki_key::pki_key(EVP_PKEY *pkey)	:pki_base(""){ 	init();	key = pkey;}	pki_key::pki_key(const string fname, pem_password_cb *cb, int type )	:pki_base(fname){ 	init();	PASS_INFO p;	string title = XCA_TITLE;	string description = "Please enter the password to decrypt the RSA key."; 	p.title = &title;	p.description = &description;	key = EVP_PKEY_new();	key->type = EVP_PKEY_type(type);	error = "";	FILE *fp = fopen(fname.c_str(), "r");	RSA *rsakey = NULL;	if (fp != NULL) {	   rsakey = PEM_read_RSAPrivateKey(fp, NULL, cb, &p);	   if (!rsakey) {		ign_openssl_error();		rewind(fp);		CERR("Fallback to privatekey DER"); 	   	rsakey = d2i_RSAPrivateKey_fp(fp, NULL);	   }	   if (!rsakey) {		ign_openssl_error();		rewind(fp);		CERR("Fallback to pubkey"); 	   	rsakey = PEM_read_RSA_PUBKEY(fp, NULL, cb, &p);	   }	   if (!rsakey) {		ign_openssl_error();		rewind(fp);		CERR("Fallback to pubkey DER"); 	   	rsakey = d2i_RSA_PUBKEY_fp(fp, NULL);	   }	   if (!rsakey) {	        ign_openssl_error();	        rewind(fp);		title = "Password for PKCS#8 private key";		description = "Please enter the password to decrypt the PKCS#8 private key.";		CERR("Fallback to PKCS#8 Private key"); 	        d2i_PKCS8PrivateKey_fp(fp, &key, cb, &p);	   }	   else {	   	EVP_PKEY_set1_RSA(key,rsakey);		openssl_error();		CERR("assigning loaded key");	   }	   int r = fname.rfind('.');#ifdef WIN32	   int l = fname.rfind('\\');#else	   int l = fname.rfind('/');#endif	   CERR( fname << "r,l: "<< r <<","<< l );	   setDescription(fname.substr(l+1,r-l-1));	   openssl_error();	}		else fopen_error(fname);	CERR("end of loading");	fclose(fp);}void pki_key::fromData(unsigned char *p, int size ){	CERR( "KEY fromData");	unsigned char *sik, *pdec, *pdec1, *sik1;	int outl, decsize;        unsigned char iv[EVP_MAX_IV_LENGTH];        unsigned char ckey[EVP_MAX_KEY_LENGTH];	memset(iv, 0, EVP_MAX_IV_LENGTH);	RSA *rsakey;	EVP_CIPHER_CTX ctx;	const EVP_CIPHER *cipher = EVP_des_ede3_cbc();	sik = (unsigned char *)OPENSSL_malloc(size);	openssl_error();	pdec = (unsigned char *)OPENSSL_malloc(size);	if (pdec == NULL ) {		OPENSSL_free(sik); 		openssl_error();	}	pdec1=pdec;	sik1=sik;	memcpy(iv, p, 8); /* recover the iv */        EVP_BytesToKey(cipher, EVP_sha1(), iv, (unsigned char *)passwd, strlen(passwd), 1, ckey,NULL); /* generate the key */	/* we use sha1 as message digest, because an md5 version of the password is stored in the database... */	EVP_CIPHER_CTX_init (&ctx);	EVP_DecryptInit( &ctx, cipher, ckey, iv);	EVP_DecryptUpdate( &ctx, pdec , &outl, p + 8, size -8 );	decsize = outl;	EVP_DecryptFinal( &ctx, pdec + decsize , &outl );	decsize += outl;	CERR("Decryption  done: DB:" << size << " encrypted:" << size-8 << " decrypted:" << decsize);	openssl_error();	memcpy(sik, pdec, decsize);	if (key->type == EVP_PKEY_RSA) {#ifdef HAVE_OPENSSL_OCSP_H	   rsakey = d2i_RSAPrivateKey(NULL, &(const unsigned char *)pdec, decsize);#else	   rsakey = d2i_RSAPrivateKey(NULL, &pdec, decsize);#endif	   if (ign_openssl_error()) {		rsakey = d2i_RSA_PUBKEY(NULL, &sik, decsize);	   }	   openssl_error(); 	   if (rsakey) EVP_PKEY_set1_RSA(key, rsakey);	}	OPENSSL_free(sik1);	OPENSSL_free(pdec1);	openssl_error();}unsigned char *pki_key::toData(int *size) {	CERR("KEY toData " << getDescription());	unsigned char *p, *p1, *penc;	int outl, encsize=0;	EVP_CIPHER_CTX ctx;	const EVP_CIPHER *cipher = EVP_des_ede3_cbc();        unsigned char iv[EVP_MAX_IV_LENGTH];        unsigned char ckey[EVP_MAX_KEY_LENGTH];	memset(iv, 0, EVP_MAX_IV_LENGTH);        RAND_pseudo_bytes(iv,8);      /* Generate a salt */        EVP_BytesToKey(cipher, EVP_sha1(), iv, (unsigned char *)passwd, strlen(passwd), 1, ckey,NULL);	EVP_CIPHER_CTX_init (&ctx);	EVP_EncryptInit( &ctx, cipher, ckey, iv);	openssl_error();	//if (key->type == EVP_PKEY_RSA) {	if (true) {	   if (isPubKey()) {	      *size = i2d_RSA_PUBKEY(key->pkey.rsa, NULL);	      CERR("Sizeofpubkey: " << *size );	      p = (unsigned char *)OPENSSL_malloc(*size);	      openssl_error();	      penc = (unsigned char *)OPENSSL_malloc(*size +  EVP_MAX_KEY_LENGTH + 8);	      if (!penc) {		      OPENSSL_free(p);		      openssl_error();	      }	      p1 = p;	      memcpy(penc,iv,8); /* store the iv */	      i2d_RSA_PUBKEY(key->pkey.rsa, &p1);	      EVP_EncryptUpdate( &ctx, penc + 8, &outl, p, *size );	      encsize = outl;	      openssl_error();	      	   }	   else {	      *size = i2d_RSAPrivateKey(key->pkey.rsa, NULL);	      CERR("Sizeofprivkey: " << *size );	      openssl_error();	      p = (unsigned char *)OPENSSL_malloc(*size);	      openssl_error();	      penc = (unsigned char *)OPENSSL_malloc(*size +  EVP_MAX_KEY_LENGTH + 8);	      if (!penc) {		      OPENSSL_free(p);		      openssl_error();	      }	      p1 = p;	      memcpy(penc, iv, 8); /* store the iv */	      i2d_RSAPrivateKey(key->pkey.rsa, &p1);	      EVP_EncryptUpdate( &ctx, penc + 8, &outl, p, *size ); /* store key right after the iv */	      encsize = outl;	      openssl_error();	   }	}	EVP_EncryptFinal( &ctx, penc + encsize + 8, &outl );	encsize += outl ;	OPENSSL_free(p);	openssl_error();		CERR("KEY toData end DB:"<< encsize+8 << " encrypted:"<< encsize << " decrypted:" << *size);	*size = encsize + 8;	return penc;}pki_key::~pki_key(){	//RSA_free(key);	EVP_PKEY_free(key);}void pki_key::writePKCS8(const string fname, pem_password_cb *cb){	PASS_INFO p;	string title=XCA_TITLE;	string description="Please enter the password protecting the PKCS#8 key";	p.title = &title;	p.description = &description;	FILE *fp = fopen(fname.c_str(),"w");	if (fp != NULL) {	   if (key){		CERR( "writing PKCS8");		PEM_write_PKCS8PrivateKey_nid(fp, key, 		   NID_pbeWithMD5AndDES_CBC, NULL, 0, cb, &p);		openssl_error();	   }	}	else fopen_error(fname);	fclose(fp);}void pki_key::writeKey(const string fname, const EVP_CIPHER *enc, 			pem_password_cb *cb, bool PEM){	PASS_INFO p;	string title=XCA_TITLE;	string description="Please enter the password protecting the RSA private key";	p.title = &title;	p.description = &description;	if (isPubKey()) {		writePublic(fname, PEM);		return;	}	FILE *fp = fopen(fname.c_str(),"w");	if (fp != NULL) {	   if (key){		CERR("writing Private Key");		if (PEM) 		   PEM_write_PrivateKey(fp, key, enc, NULL, 0, cb, NULL);		else {		   i2d_RSAPrivateKey_fp(fp, key->pkey.rsa);	        }	   	openssl_error();	   }	}	else fopen_error(fname);	fclose(fp);}void pki_key::writePublic(const string fname, bool PEM){	FILE *fp = fopen(fname.c_str(),"w");	if (fp != NULL) {	   if (key->type == EVP_PKEY_RSA) {		CERR("writing Public Key");		if (PEM)		   PEM_write_RSA_PUBKEY(fp, key->pkey.rsa);		else		   i2d_RSA_PUBKEY_fp(fp, key->pkey.rsa);		openssl_error();	   }	}	else fopen_error(fname);	fclose(fp);}string pki_key::length(){	char st[64];	sprintf(st,"%i bit", EVP_PKEY_size(key) * 8 );	openssl_error();	string x = st;	return x;}string pki_key::BN2string(BIGNUM *bn){	if (bn == NULL) return "--";	string x="";	char zs[10];	int j;	int size = BN_num_bytes(bn);	unsigned char *buf = (unsigned char *)OPENSSL_malloc(size);	BN_bn2bin(bn, buf);	for (j = 0; j< size; j++) {		sprintf(zs, "%02X%c",buf[j], ((j+1)%16 == 0) ?'\n':':');		x += zs;	}	OPENSSL_free(buf);	openssl_error();	return x;}string pki_key::modulus() {	return BN2string(key->pkey.rsa->n);}string pki_key::pubEx() {	return BN2string(key->pkey.rsa->e);}string pki_key::privEx() {	if (isPubKey()) return "Not existent (not a private key)";	return BN2string(key->pkey.rsa->d);}bool pki_key::compare(pki_base *ref){	pki_key *kref = (pki_key *)ref;	if (kref == NULL) return false;	if (kref->key == NULL) return false;	if (kref->key->pkey.rsa->n == NULL) return false;	if (key == NULL) return false;	if (key->pkey.rsa->n == NULL) return false;	if (	   BN_cmp(key->pkey.rsa->n, kref->key->pkey.rsa->n) ||	   BN_cmp(key->pkey.rsa->e, kref->key->pkey.rsa->e) 	){		openssl_error();		return false;	}	openssl_error();	return true;}	bool pki_key::isPubKey(){	if (key == NULL) {	   CERR("key is null");	   return false;	}	if (key->pkey.rsa == 0) {	   CERR("key->pkey is null");	   return false;	}	return (key->pkey.rsa->d == NULL);	}bool pki_key::isPrivKey(){	return ! isPubKey();	}int pki_key::verify(){	bool veri = false;	return true;	CERR("verify start");	if (key->type == EVP_PKEY_RSA && isPrivKey()) {	   if (RSA_check_key(key->pkey.rsa) == 1) veri = true;	}	if (isPrivKey()) veri = true;	openssl_error();	CERR("verify end: "<< veri );	return veri;}		int pki_key::getType(){	return key->type;}int pki_key::incUcount(){	return ++ucount;}int pki_key::decUcount(){	return --ucount;}int pki_key::getUcount(){	return ucount;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类在线视频| 国产精品一区二区在线观看不卡| 日产国产欧美视频一区精品| 成人在线一区二区三区| 538在线一区二区精品国产| 久久久久久久久久美女| 天天综合日日夜夜精品| 99久免费精品视频在线观看| 日韩欧美国产系列| 亚洲一区二区av电影| 成a人片亚洲日本久久| 精品国产免费人成电影在线观看四季| 亚洲人精品午夜| 国产suv精品一区二区6| 日韩一级完整毛片| 亚洲一区二区三区国产| 9久草视频在线视频精品| 久久综合九色综合97_久久久| 亚洲国产视频直播| 97精品国产露脸对白| 国产精品视频在线看| 国产精品一区二区黑丝| xf在线a精品一区二区视频网站| 日韩经典一区二区| 欧美体内she精高潮| 一区二区三区欧美在线观看| 91在线免费视频观看| 综合中文字幕亚洲| 99久久er热在这里只有精品15| 日本一区二区免费在线观看视频| 激情偷乱视频一区二区三区| 日韩视频一区在线观看| 日韩精品欧美精品| 欧美一级理论性理论a| 美国毛片一区二区三区| 精品伦理精品一区| 国产一区二区精品久久| 欧美激情一区二区三区在线| 成人sese在线| 亚洲欧美日韩电影| 欧美亚洲动漫制服丝袜| 亚洲成人在线网站| 欧美一区二区女人| 久久99国内精品| 国产女同性恋一区二区| av中文字幕一区| 亚洲国产日产av| 91精品国产综合久久久久久| 国模一区二区三区白浆| 国产精品三级视频| 在线观看欧美日本| 久久国产三级精品| 中文一区一区三区高中清不卡| 色哟哟一区二区三区| 午夜精品爽啪视频| 久久精品一区二区三区不卡牛牛 | 色综合天天综合在线视频| 亚洲欧洲另类国产综合| 欧美色手机在线观看| 奇米色一区二区三区四区| 久久久久99精品国产片| 91亚洲午夜精品久久久久久| 三级不卡在线观看| 久久午夜免费电影| 色伊人久久综合中文字幕| 秋霞av亚洲一区二区三| 欧美—级在线免费片| 欧美日韩美少妇| 国产精品一级片在线观看| 亚洲曰韩产成在线| 久久欧美一区二区| 欧美三区在线视频| 国产成人免费9x9x人网站视频| 亚洲影视在线播放| 久久人人爽爽爽人久久久| 欧美中文字幕一区二区三区| 激情五月婷婷综合| 亚洲成a人v欧美综合天堂| 久久久www成人免费毛片麻豆 | 美女诱惑一区二区| 中文字幕在线不卡一区| 精品剧情在线观看| 欧美无人高清视频在线观看| 国产成人综合在线播放| 日韩精品一二三区| 一区二区三区精品在线| 久久精品一级爱片| 欧美一区二区三区四区高清 | 欧美私人免费视频| av电影在线观看一区| 精品一二三四区| 亚洲二区在线观看| 亚洲美女在线国产| 中文字幕精品—区二区四季| 日韩一级免费一区| 欧美日韩色一区| 91福利社在线观看| 不卡av在线网| 盗摄精品av一区二区三区| 免费成人在线播放| 午夜国产不卡在线观看视频| 亚洲男同1069视频| 国产精品第一页第二页第三页| 久久综合一区二区| 欧美精品一区二区三区久久久| 欧美久久高跟鞋激| 欧美日韩国产精品成人| 欧美亚洲另类激情小说| 91国偷自产一区二区开放时间| 成人激情免费视频| 成人av在线资源网| www.在线欧美| 91无套直看片红桃| 91在线高清观看| 91色在线porny| 91亚洲国产成人精品一区二区三| av在线这里只有精品| 91原创在线视频| 91麻豆自制传媒国产之光| 99久久免费视频.com| 91麻豆精品秘密| 在线观看亚洲专区| 欧美日韩美少妇| 日韩欧美国产一二三区| 久久综合色综合88| 国产精品午夜在线| 亚洲色图色小说| 一卡二卡三卡日韩欧美| 午夜一区二区三区视频| 日韩经典一区二区| 国产一区二区精品在线观看| 风间由美一区二区三区在线观看| 成年人午夜久久久| 欧美亚洲综合久久| 日韩欧美国产综合| 欧美激情一区二区三区不卡| 亚洲精品成人天堂一二三| 亚洲国产精品久久人人爱蜜臀 | 欧美乱妇23p| 欧美大片一区二区三区| 中文字幕精品一区二区精品绿巨人 | aaa国产一区| 欧美日韩一级二级| 亚洲美女屁股眼交3| 亚洲一区日韩精品中文字幕| 蜜臀av国产精品久久久久 | 无吗不卡中文字幕| 精品一二三四区| 91香蕉视频污在线| 日韩一级二级三级精品视频| 国产欧美日韩在线看| 亚洲国产精品久久人人爱蜜臀| 麻豆精品一区二区三区| 成人教育av在线| 欧美一区二区在线视频| 国产欧美久久久精品影院| 亚洲亚洲人成综合网络| 国产一区二区三区四区在线观看| 一本色道亚洲精品aⅴ| 精品欧美久久久| 亚洲在线成人精品| 成人一区二区三区视频在线观看| 欧美日韩在线亚洲一区蜜芽| 中文成人综合网| 麻豆精品视频在线观看免费| 91麻豆123| 久久精品在这里| 蜜臀av国产精品久久久久| 色欧美日韩亚洲| 日本一区二区三区在线不卡 | 激情欧美一区二区三区在线观看| 91福利视频久久久久| 欧美国产在线观看| 日韩av中文字幕一区二区三区| 99视频精品全部免费在线| 欧美精品一区二区三区高清aⅴ| 亚洲图片自拍偷拍| 91在线一区二区| 欧美国产日韩在线观看| 精品一区二区三区蜜桃| 欧美人狂配大交3d怪物一区| 亚洲免费av在线| av一本久道久久综合久久鬼色| 久久夜色精品一区| 美腿丝袜亚洲一区| 欧美私模裸体表演在线观看| 尤物在线观看一区| 99国产麻豆精品| 国产精品久久久久久久久免费丝袜 | 国产盗摄精品一区二区三区在线| 欧美福利视频一区| 亚洲va欧美va人人爽| 欧美色图免费看| 亚洲综合在线免费观看| 色国产综合视频| 亚洲女爱视频在线| 日本久久一区二区三区| 亚洲精品免费播放| 色婷婷av一区二区三区gif| 日韩理论片网站|