opensslÖ÷ÒªÁ÷³Ì³ÌÐò´úÂë(¾Å)

2014-11-24 00:33:28 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 56
he extension code if any custom extensions have been added err: if(out) BIO_free_all(out); if(memcrl) BIO_free_all(memcrl); BIO_free(in); EVP_PKEY_free(pkey); X509_CRL_free(crl); X509_free(x509); EVP_cleanup();//frees all three stacks and sets their pointers to NULL ---- EVP_CIPHER if(ret==1) strcpy(outMsg,"CRLÖÆ×÷³É¹¦"); return ret; } BOOL CertFormatConver(char * buf/*ÎļþÄÚÈÝ»òÎļþÃû³Æ*/,int len/*Äڴ泤¶ÈΪ0ÔòbufΪÎļþÃû*/, char * pwd/*p12ÎļþÃÜÂë*/,char * pem/*Êä³öÎļþ*/, int outformat,char * out/*²Ù×÷½á¹û*/) { EVP_PKEY *key=NULL; X509 *cert=NULL; BIO *biout=NULL; int i=0; //Êä³öÎļþ if ((biout=BIO_new_file(pem, "w")) == NULL) { return false; } cert = LoadCert(buf,len,out);//Ê×Ïȳ¢ÊÔ¹«Ô¿,bio±»¸Äд if(cert)//ÊäÈëÎļþΪ¹«Ô¿Îļþ { if (outformat == DER) i=i2d_X509_bio(biout,cert); else if (outformat == PEM) { // if (trustout) i=PEM_write_bio_X509_AUX(biout,x); i=PEM_write_bio_X509(biout,cert); } if(!i)//ʧ°Ü strcpy(out,"±£´æ¹«Ô¿Ê§°Ü"); else strcpy(out,"¹«Ô¿Ö¤Êé¸ñʽת»»³É¹¦"); } else//ÊäÈëÎļþΪ˽ԿÎļþ { key=LoadKey(buf,len,pwd,out); if(!key) { strcpy(out,"²»ÄÜʶ±ðµÄÎļþ¸ñʽ"); return false; } if(outformat==PEM) { PEM_write_bio_PrivateKey(biout, key, NULL, NULL, 0, 0, NULL); } if(outformat==DER) { i2d_PrivateKey_bio(biout,key);//µÃµ½½âÃܺóµÄ˽Կ } strcpy(out,"˽Կ֤Êé¸ñʽת»»³É¹¦"); } if (biout != NULL) BIO_free(biout); X509_free(cert); EVP_PKEY_free(key); return true; } //·Ö½âp12°ü BOOL ParseDB(char * strP12/*°üÎļþ*/,char * strPwd/*˽ԿÃÜÂë*/,char * strCert/*¹«Ô¿´æ·Å*/, char * strkey/*˽Կ´æ·Å*/,int outformat/*Êä³ö¸ñʽ*/,char * out/*·µ»Ø½
á¹û*/) { EVP_PKEY *key=NULL; X509 *cert=NULL; STACK_OF(X509) *ca = NULL; BIO * bio=NULL,*bioCert=NULL,*bioKey=NULL; PKCS12 *p12=NULL; int i=0,j=0; if((bio=BIO_new_file(strP12, "r")) == NULL) { strcpy(out,"´ò¿ªÎļþ´íÎó"); return false; } SSLeay_add_all_algorithms(); p12 = d2i_PKCS12_bio(bio, NULL); if (!PKCS12_parse(p12, strPwd, &key, &cert/*PEM*/, &ca)) { strcpy(out,"½â°üʧ°Ü"); return false; } PKCS12_free(p12); //Êä³öÎļþ if ((bioCert=BIO_new_file(strCert, "w")) == NULL) { return false; } if ((bioKey=BIO_new_file(strkey, "w")) == NULL) { return false; } if(outformat == DER) { i=i2d_X509_bio(bioCert,cert); j=i2d_PrivateKey_bio(bioKey,key); } else if (outformat == PEM) { i=PEM_write_bio_X509(bioCert,cert); j=PEM_write_bio_PrivateKey(bioKey, key, NULL, NULL, 0, 0, NULL); } if (bio != NULL) BIO_free(bio); if (bioCert != NULL) BIO_free(bioCert); if (bioKey != NULL) BIO_free(bioKey); X509_free(cert); EVP_PKEY_free(key); EVP_cleanup();//frees all three stacks and sets their pointers to NULL ---- EVP_CIPHER if(i!=0&&j!=0) { strcpy(out,"·Ö½âP12³É¹¦"); return true; } return false; } //×éºÏp12°ü BOOL CreateDB(char * strP12/*OUT°üÎļþ*/,char * strPwd/*INÃÜÂë*/,char * strCert/*IN¹«Ô¿*/, char * strkey/*IN˽Կ*/,char * out/*·µ»Ø½á¹û*/) { FILE *fp=NULL; EVP_PKEY *key=NULL; X509 *cert=NULL; PKCS12 *p12; cert =LoadCert(strCert,0,out); if(!cert) { strcpy(out,"¶ÁÈ¡¹«Ô¿Îļþʧ°Ü"); return false; } key=LoadKey(strkey,0,NULL,out);//½âÃܺó˽Կ if(!key) { strcpy(out,"¶Áȡ˽ԿÎļþʧ°Ü"); return false; } SSLeay_add_all_algorithms(); p12 = PKCS12_create(strPwd,"(hpxs)", key, cert, NULL, 0,0,0,0,0); if(!p12) { strcpy(out,"´´