Net-SSLeay
view release on metacpan or search on metacpan
CODE:
ST(0) = sv_newmortal(); /* undef to start with */
bp = BIO_new(BIO_s_mem());
if (bp && x509_crl) {
PEM_write_bio_X509_CRL(bp,x509_crl);
n = BIO_ctrl_pending(bp);
New(0, buf, n, char);
if (buf) {
i = BIO_read(bp,buf,n);
if (i>=0 && i<=n) sv_setpvn(ST(0), buf, i);
Safefree(buf);
}
BIO_free(bp);
}
void
PEM_get_string_PrivateKey(pk,passwd=NULL,enc_alg=NULL)
EVP_PKEY * pk
char * passwd
const EVP_CIPHER * enc_alg
PREINIT:
BIO *bp;
int i, n;
char *buf;
size_t passwd_len = 0;
pem_password_cb * cb = NULL;
void * u = NULL;
CODE:
ST(0) = sv_newmortal(); /* undef to start with */
bp = BIO_new(BIO_s_mem());
if (bp && pk) {
if (passwd) passwd_len = strlen(passwd);
if (passwd_len>0) {
/* encrypted key */
if (!enc_alg)
PEM_write_bio_PrivateKey(bp,pk,EVP_des_cbc(),(unsigned char *)passwd,passwd_len,cb,u);
else
PEM_write_bio_PrivateKey(bp,pk,enc_alg,(unsigned char *)passwd,passwd_len,cb,u);
}
else {
/* unencrypted key */
PEM_write_bio_PrivateKey(bp,pk,NULL,(unsigned char *)passwd,passwd_len,cb,u);
}
n = BIO_ctrl_pending(bp);
New(0, buf, n, char);
if (buf) {
i = BIO_read(bp,buf,n);
if (i>=0 && i<=n) sv_setpvn(ST(0), buf, i);
Safefree(buf);
}
BIO_free(bp);
}
int
CTX_use_PKCS12_file(ctx, file, password=NULL)
SSL_CTX *ctx
char *file
char *password
PREINIT:
PKCS12 *p12;
EVP_PKEY *private_key;
X509 *certificate;
BIO *bio;
CODE:
RETVAL = 0;
bio = BIO_new_file(file, "rb");
if (bio) {
OPENSSL_add_all_algorithms_noconf();
if ((p12 = d2i_PKCS12_bio(bio, NULL))) {
if (PKCS12_parse(p12, password, &private_key, &certificate, NULL)) {
if (private_key) {
if (SSL_CTX_use_PrivateKey(ctx, private_key)) RETVAL = 1;
EVP_PKEY_free(private_key);
}
if (certificate) {
if (SSL_CTX_use_certificate(ctx, certificate)) RETVAL = 1;
X509_free(certificate);
}
}
PKCS12_free(p12);
}
if (!RETVAL) ERR_print_errors_fp(stderr);
BIO_free(bio);
}
OUTPUT:
RETVAL
void
P_PKCS12_load_file(file, load_chain=0, password=NULL)
char *file
int load_chain
char *password
PREINIT:
PKCS12 *p12;
EVP_PKEY *private_key = NULL;
X509 *certificate = NULL;
STACK_OF(X509) *cachain = NULL;
X509 *x;
BIO *bio;
int i, result;
PPCODE:
bio = BIO_new_file(file, "rb");
if (bio) {
OPENSSL_add_all_algorithms_noconf();
if ((p12 = d2i_PKCS12_bio(bio, NULL))) {
if(load_chain)
result= PKCS12_parse(p12, password, &private_key, &certificate, &cachain);
else
result= PKCS12_parse(p12, password, &private_key, &certificate, NULL);
if (result) {
if (private_key)
XPUSHs(sv_2mortal(newSViv(PTR2IV(private_key))));
else
XPUSHs(sv_2mortal(newSVpv(NULL,0))); /* undef */
if (certificate)
XPUSHs(sv_2mortal(newSViv(PTR2IV(certificate))));
else
XPUSHs(sv_2mortal(newSVpv(NULL,0))); /* undef */
if (cachain) {
for (i=0; i<sk_X509_num(cachain); i++) {
x = sk_X509_value(cachain, i);
XPUSHs(sv_2mortal(newSViv(PTR2IV(x))));
}
sk_X509_free(cachain);
}
}
PKCS12_free(p12);
}
BIO_free(bio);
}
#ifndef OPENSSL_NO_MD2
void
MD2(data)
PREINIT:
STRLEN len;
unsigned char md[MD2_DIGEST_LENGTH];
unsigned char * ret;
INPUT:
unsigned char* data = (unsigned char *) SvPV( ST(0), len);
CODE:
ret = MD2(data,len,md);
if (ret!=NULL) {
XSRETURN_PVN((char *) md, MD2_DIGEST_LENGTH);
} else {
XSRETURN_UNDEF;
}
#endif
#ifndef OPENSSL_NO_MD4
void
MD4(data)
PREINIT:
STRLEN len;
unsigned char md[MD4_DIGEST_LENGTH];
INPUT:
unsigned char* data = (unsigned char *) SvPV( ST(0), len );
CODE:
if (MD4(data,len,md)) {
XSRETURN_PVN((char *) md, MD4_DIGEST_LENGTH);
} else {
XSRETURN_UNDEF;
}
#endif
#ifndef OPENSSL_NO_MD5
void
BIO_write(s,buf)
BIO * s
PREINIT:
STRLEN len;
INPUT:
char * buf = SvPV( ST(1), len);
CODE:
RETVAL = BIO_write (s, buf, (int)len);
OUTPUT:
RETVAL
int
BIO_eof(s)
BIO * s
int
BIO_pending(s)
BIO * s
int
BIO_wpending(s)
BIO * s
int
BIO_ssl_copy_session_id(to,from)
BIO * to
BIO * from
void
BIO_ssl_shutdown(ssl_bio)
BIO * ssl_bio
int
SSL_add_client_CA(ssl,x)
SSL * ssl
X509 * x
const char *
SSL_alert_desc_string(value)
int value
const char *
SSL_alert_desc_string_long(value)
int value
const char *
SSL_alert_type_string(value)
int value
const char *
SSL_alert_type_string_long(value)
int value
long
SSL_callback_ctrl(ssl,i,fp)
SSL * ssl
int i
callback_no_ret * fp
int
SSL_check_private_key(ctx)
SSL * ctx
# /* buf and size were required with Net::SSLeay 1.88 and earlier. */
# /* With OpenSSL 0.9.8l and older compile can warn about discarded const. */
void
SSL_CIPHER_description(const SSL_CIPHER *cipher, char *unused_buf=NULL, int unused_size=0)
PREINIT:
char *description;
char buf[512];
PPCODE:
description = SSL_CIPHER_description(cipher, buf, sizeof(buf));
if(description == NULL) {
XSRETURN_EMPTY;
}
XPUSHs(sv_2mortal(newSVpv(description, 0)));
const char *
SSL_CIPHER_get_name(const SSL_CIPHER *c)
int
SSL_CIPHER_get_bits(c, ...)
const SSL_CIPHER * c
CODE:
int alg_bits;
RETVAL = SSL_CIPHER_get_bits(c, &alg_bits);
if (items > 2) croak("SSL_CIPHER_get_bits: Need to call with one or two parameters");
if (items > 1) sv_setsv(ST(1), sv_2mortal(newSViv(alg_bits)));
OUTPUT:
RETVAL
const char *
SSL_CIPHER_get_version(const SSL_CIPHER *cipher)
#if OPENSSL_VERSION_NUMBER >= 0x10101001L && !defined(LIBRESSL_VERSION_NUMBER)
const EVP_MD *
SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c)
#endif /* OpenSSL 1.1.1-pre1 */
#if (OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3040000fL) /* LibreSSL >= 3.4.0 */
const SSL_CIPHER *
SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr)
#endif
#ifndef OPENSSL_NO_COMP
int
SSL_COMP_add_compression_method(id,cm)
int id
COMP_METHOD * cm
#endif
int
SSL_CTX_add_client_CA(ctx,x)
SSL_CTX * ctx
X509 * x
long
SSL_CTX_callback_ctrl(ctx,i,fp)
SSL_CTX * ctx
int i
callback_no_ret * fp
int
SSL_CTX_check_private_key(ctx)
SSL_CTX * ctx
void *
SSL_CTX_get_ex_data(ssl,idx)
SSL_CTX * ssl
int idx
int
SSL_CTX_get_quiet_shutdown(ctx)
SSL_CTX * ctx
long
SSL_CTX_get_timeout(ctx)
SSL_CTX * ctx
int
SSL_CTX_get_verify_depth(ctx)
SSL_CTX * ctx
int
SSL_CTX_get_verify_mode(ctx)
SSL_CTX * ctx
void
SSL_CTX_set_cert_store(ctx,store)
SSL_CTX * ctx
X509_STORE * store
X509_STORE *
SSL_CTX_get_cert_store(ctx)
SSL_CTX * ctx
void
SSL_CTX_set_cert_verify_callback(ctx,callback,data=&PL_sv_undef)
SSL_CTX * ctx
SV * callback
SV * data
CODE:
if (callback==NULL || !SvOK(callback)) {
SSL_CTX_set_cert_verify_callback(ctx, NULL, NULL);
cb_data_advanced_put(ctx, "ssleay_ctx_cert_verify_cb!!func", NULL);
cb_data_advanced_put(ctx, "ssleay_ctx_cert_verify_cb!!data", NULL);
}
else {
cb_data_advanced_put(ctx, "ssleay_ctx_cert_verify_cb!!func", newSVsv(callback));
cb_data_advanced_put(ctx, "ssleay_ctx_cert_verify_cb!!data", newSVsv(data));
SSL_CTX_set_cert_verify_callback(ctx, ssleay_ctx_cert_verify_cb_invoke, ctx);
}
X509_NAME_STACK *
SSL_CTX_get_client_CA_list(ctx)
SSL_CTX *ctx
void
SSL_CTX_set_client_CA_list(ctx,list)
SSL_CTX * ctx
X509_NAME_STACK * list
void
SSL_CTX_set_default_passwd_cb(ctx,callback=&PL_sv_undef)
( run in 1.387 second using v1.01-cache-2.11-cpan-0d23b851a93 )