Alt-Crypt-OpenSSL-PKCS12-Broadbean
view release on metacpan or search on metacpan
if ((RETVAL = d2i_PKCS12_bio(bio, 0)) == NULL) {
BIO_free_all(bio);
croak("%" SVf ": Couldn't create PKCS12 from d2i_PKCS12_BIO(): %s", SVfARG(class), ssl_error(aTHX));
}
BIO_free_all(bio);
OUTPUT:
RETVAL
# This is called at per-object destruction time.
void
DESTROY(pkcs12)
Crypt::OpenSSL::PKCS12 pkcs12;
CODE:
if (pkcs12) {
PKCS12_free(pkcs12);
}
# This is called via an END block in the Perl module to clean up initialization that happened in BOOT.
void
__PKCS12_cleanup(void)
CODE:
CRYPTO_cleanup_all_ex_data();
ERR_free_strings();
#if OPENSSL_VERSION_NUMBER < 0x10100000L
ERR_remove_state(0);
#endif
EVP_cleanup();
SV*
as_string(pkcs12)
Crypt::OpenSSL::PKCS12 pkcs12;
PREINIT:
BIO *bio;
CODE:
CHECK_OPEN_SSL(bio = BIO_new(BIO_s_mem()));
if (!(i2d_PKCS12_bio(bio, pkcs12))) {
sv_bio_error(aTHX_ bio);
croak("i2d_PKCS12_bio: %s", ssl_error(aTHX));
}
RETVAL = extractBioString(aTHX_ bio);
OUTPUT:
RETVAL
SV*
mac_ok(pkcs12, pwd = "")
Crypt::OpenSSL::PKCS12 pkcs12
char *pwd
CODE:
if (!(PKCS12_verify_mac(pkcs12, pwd, strlen(pwd)))) {
croak("PKCS12_verify_mac: \n%s", ssl_error(aTHX));
}
RETVAL = (PKCS12_verify_mac(pkcs12, pwd, strlen(pwd))) ? &PL_sv_yes : &PL_sv_no;
OUTPUT:
RETVAL
SV*
changepass(pkcs12, oldpwd = "", newpwd = "")
Crypt::OpenSSL::PKCS12 pkcs12
char *oldpwd
char *newpwd
CODE:
if (!(PKCS12_newpass(pkcs12, oldpwd, newpwd))) {
warn("PKCS12_newpass: %s %s\n%s", oldpwd, newpwd, ssl_error(aTHX));
RETVAL = &PL_sv_no;
} else {
RETVAL = &PL_sv_yes;
}
OUTPUT:
RETVAL
SV*
create(pkcs12, cert_chain_pem = "", pk = "", pass = 0, file = 0, name = "PKCS12 Certificate")
char *cert_chain_pem
char *pk
char *pass
char *file
char *name
PREINIT:
FILE *fp;
EVP_PKEY* pkey;
PKCS12 *p12;
STACK_OF(X509) *cert_chain = NULL;
CODE:
pkey = _load_pkey(pk, PEM_read_bio_PrivateKey);
cert_chain = _load_cert_chain(cert_chain_pem, PEM_X509_INFO_read_bio);
p12 = PKCS12_create(pass, name, pkey, sk_X509_shift(cert_chain), cert_chain, 0, 0, 0, 0, 0);
if (!p12) {
ERR_print_errors_fp(stderr);
croak("Error creating PKCS#12 structure\n");
}
if (!(fp = fopen(file, "wb"))) {
ERR_print_errors_fp(stderr);
croak("Error opening file %s\n", file);
}
i2d_PKCS12_fp(fp, p12);
PKCS12_free(p12);
fclose(fp);
RETVAL = &PL_sv_yes;
OUTPUT:
RETVAL
croak("unable to add salt_length to the hash");
if((hv_store(RETVAL, "mac", strlen("mac"), newRV_inc((SV *) mac), 0)) == NULL)
croak("unable to add MAC to the hash");
dump_certs_keys_p12(aTHX_ bio, pkcs12, pwd, strlen(pwd), INFO, NULL, RETVAL);
SV * end = extractBioString(aTHX_ bio);
if (SvPOK(end)) {
if (SvCUR(end) != 0)
printf("BIO %s\n", SvPVbyte_nolen(end));
warn("bio from info_as_hash should be zero length - report issue");
}
sv_2mortal((SV*)RETVAL);
OUTPUT:
RETVAL
SV*
info(pkcs12, pwd = "")
Crypt::OpenSSL::PKCS12 pkcs12
char *pwd
PREINIT:
BIO *bio;
STACK_OF(PKCS7) *asafes = NULL;
CONST_ASN1_INTEGER *tmaciter;
#if OPENSSL_VERSION_NUMBER > 0x10100000L
CONST_X509_ALGOR *macalgid;
CONST_ASN1_OBJECT *macobj;
CONST_ASN1_OCTET_STRING *tmac;
CONST_ASN1_OCTET_STRING *tsalt;
#endif
CODE:
CHECK_OPEN_SSL(bio = BIO_new(BIO_s_mem()));
if ((asafes = PKCS12_unpack_authsafes(pkcs12)) == NULL)
RETVAL = newSVpvn("",0);
#if OPENSSL_VERSION_NUMBER > 0x10100000L
PKCS12_get0_mac(&tmac, &macalgid, &tsalt, &tmaciter, pkcs12);
/* current hash algorithms do not use parameters so extract just name,
in future alg_print() may be needed */
X509_ALGOR_get0(&macobj, NULL, NULL, macalgid);
BIO_puts(bio, "MAC: ");
i2a_ASN1_OBJECT(bio, macobj);
/* current hash algorithms do not use parameters so extract just name,
in future alg_print() may be needed */
BIO_printf(bio, ", Iteration %ld\n",
tmaciter != NULL ? ASN1_INTEGER_get(tmaciter) : 1L);
BIO_printf(bio, "MAC length: %ld, salt length: %ld\n",
tmac != NULL ? ASN1_STRING_length(tmac) : 0L,
tsalt != NULL ? ASN1_STRING_length(tsalt) : 0L);
#else
tmaciter = pkcs12->mac->iter;
BIO_printf(bio, "MAC Iteration %ld\n",
tmaciter != NULL ? ASN1_INTEGER_get(tmaciter) : 1L);
/* If we enter empty password try no password first */
if (!PKCS12_verify_mac(pkcs12, pwd, -1)) {
BIO_printf(bio, "Mac verify error: invalid password?\n");
ERR_print_errors(bio);
goto end;
}
BIO_printf(bio, "MAC verified OK\n");
end:
#endif
dump_certs_keys_p12(aTHX_ bio, pkcs12, pwd, strlen(pwd), INFO, NULL, NULL);
RETVAL = extractBioString(aTHX_ bio);
OUTPUT:
RETVAL
( run in 1.768 second using v1.01-cache-2.11-cpan-13bb782fe5a )