Crypt-OpenSSL-VerifyX509
view release on metacpan or search on metacpan
VerifyX509.xs view on Meta::CPAN
/* load CA file given */
lookup = X509_STORE_add_lookup(RETVAL, X509_LOOKUP_file());
if (lookup == NULL)
croak("failure to add file lookup to store: %s", ssl_error());
cafile = SvPV(cafile_str, len);
i = X509_LOOKUP_load_file(lookup, cafile, X509_FILETYPE_PEM);
if (!i)
croak("load CA cert: %s", ssl_error());
/* default hash_dir lookup */
lookup = X509_STORE_add_lookup(RETVAL,X509_LOOKUP_hash_dir());
if (lookup == NULL)
croak("failure to add hash_dir lookup to store: %s", ssl_error());
X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
ERR_clear_error();
OUTPUT:
RETVAL
int
verify(store, x509)
Crypt::OpenSSL::VerifyX509 store;
Crypt::OpenSSL::X509 x509;
PREINIT:
X509_STORE_CTX *csc;
CODE:
if (x509 == NULL)
croak("no cert to verify");
csc = X509_STORE_CTX_new();
if (csc == NULL)
croak("csc new: %s", ssl_error());
X509_STORE_set_flags(store, 0);
if (!X509_STORE_CTX_init(csc,store,x509,NULL))
croak("store ctx init: %s", ssl_error());
RETVAL = X509_verify_cert(csc);
if (!RETVAL)
croak("verify: %s", ctx_error(csc));
X509_STORE_CTX_free(csc);
OUTPUT:
RETVAL
void
DESTROY(store)
Crypt::OpenSSL::VerifyX509 store;
PPCODE:
if (store) X509_STORE_free(store); store = 0;
#if OPENSSL_API_COMPAT >= 0x10100000L
void
__X509_cleanup(void)
PPCODE:
/* deinitialisation is done automatically */
#else
void
__X509_cleanup(void)
PPCODE:
CRYPTO_cleanup_all_ex_data();
ERR_free_strings();
ERR_remove_state(0);
EVP_cleanup();
#endif
( run in 1.157 second using v1.01-cache-2.11-cpan-71847e10f99 )