Crypt-SMimeEngine
view release on metacpan or search on metacpan
SMimeEngine.xs view on Meta::CPAN
}
if (!X509_digest(c,digest,md,&n)){
sprintf(errstring, "out of memory");
X509_free(c);
return 1;
}
X509_free(c);
*strOut = (char *) malloc (sizeof(md)+20);
strTmp = (char *) malloc (4);
**strOut = (char )(uintptr_t) NULL;
*strTmp = (char )(uintptr_t) NULL;
for (j=0; j<(int)n; j++){
sprintf(strTmp,"%02X%c",md[j],(j+1 == (int)n)?'\0':':');
*strOut = strcat(*strOut, strTmp);
}
free(strTmp);
return 0;
}
void
free_infocert(INFOCERT *x){
free(x->issuer);
free(x->subject);
free(x->serial);
free(x->startdate);
free(x->enddate);
free(x->v3_email);
}
void
free_init(){
X509_free(signer);
sk_X509_pop_free(other4sign, X509_free);
X509_STORE_free(store);
EVP_PKEY_free(pkey);
destroy_ui_method();
}
int
save_certs(char *signerfile, STACK_OF(X509) *signers){
int i;
BIO *tmp;
if(!signerfile) return 1;
tmp = BIO_new_file(signerfile, "w");
if(!tmp) return 0;
for(i = 0; i < sk_X509_num(signers); i++)
PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
BIO_free(tmp);
return 1;
}
/*
* Restiruisce gli estremi di openssl
*
* Parametri
* 0 - versione (es. OpenSSL 0.9.7i 14 Oct 2005)
* 2 - prametri di compilazione (es. compiler: gcc -DOPENSSL_THREADS ...)
* 3 - data compilazione (es. built on: Mon Dec 3 16:44:16 CET 2007)
* 4 - piattaforma (es. platform: debug-linux-pentium)
* 5 - path di installazione (es. OPENSSLDIR: \"/usr/local/openssl\")
*
*/
int
ossl_param(int param, char **strOut){
*strOut = (char *) SSLeay_version(param);
return 1;
}
int
load_privk(char *prk, char *ncert){
strcpy(errstring,"");
if(pkey){
EVP_PKEY_free(pkey);
}
if(signer){
X509_free(signer);
}
// load key
if( eng ){
// ENGINE HW
if( !(pkey = ENGINE_load_private_key(eng, prk, ui_method, NULL)) ){
destroy_ui_method();
ENGINE_cleanup();
sprintf(errstring, "Error to load private key file: %s", prk);
return 1;
}
}else{
// ENGINE SW
FILE *fp;
if (!(fp = fopen(prk, "r")) ||
!(pkey = PEM_read_PrivateKey(fp, NULL, NULL, NULL))){
destroy_ui_method();
sprintf(errstring, "Error to access to key file: %s", prk);
return 1;
}
close((int)(uintptr_t)fp);
}
//load cert
// load signer certificate
(signer) = load_cert(ncert);
if(!(signer)) {
destroy_ui_method();
sprintf(errstring, "Error to load certificate file: %s", ncert);
return 1;
}
return 0;
}
/*
* Return a selected type digest of input file
*
* 1 - input file path
( run in 1.195 second using v1.01-cache-2.11-cpan-39bf76dae61 )