stta/~downloads/files/tmp/Net_SSLeay.pm-1.22/SSLeay.xs
2021-10-01 20:39:52 +01:00

3422 lines
69 KiB
Plaintext

/* SSLeay.xs - Perl module for using Eric Young's implementation of SSL
*
* Copyright (c) 1996-2002 Sampo Kellomaki <sampo@iki.fi>
* All Rights Reserved.
*
* 19.6.1998, Maintenance release to sync with SSLeay-0.9.0, --Sampo
* 24.6.1998, added write_partial to support ssl_write_all in more
* memory efficient way. --Sampo
* 8.7.1998, Added SSL_(CTX)?_set_options and associated constants.
* 31.3.1999, Tracking OpenSSL-0.9.2b changes, dropping support for
* earlier versions
* 30.7.1999, Tracking OpenSSL-0.9.3a changes, --Sampo
* 7.4.2001, OpenSSL-0.9.6a update, --Sampo
* 18.4.2001, added TLSv1 support by Stephen C. Koehler
* <koehler@securecomputing.com>, version 1.07, --Sampo
* 25.4.2001, applied 64 bit fixes by Marko Asplund <aspa@kronodoc.fi> --Sampo
* 16.7.2001, applied Win filehandle patch from aspa, added
* SSL_*_methods --Sampo
* 25.9.2001, added a big pile of methods by automatically grepping and diffing
* openssl headers and my module --Sampo
* 17.4.2002, applied patch to fix CTX_set_default_passwd_cb() contributed
* by Timo Kujala <timo.kujala@@intellitel_.com>, --Sampo
* 17.5.2002, Added BIO_s_mem, BIO_new, BIO_free, BIO_write, BIO_read ,
* BIO_eof, BIO_pending, BIO_wpending, X509_NAME_get_text_by_NID,
* RSA_generate_key, BIO_new_file
* Fixed problem with return value from verify callback being
* ignored.
* Fixed a problem with CTX_set_tmp_rsa and CTX_set_tmp_dh
* args incorrect
* --mikem@open.com_.au
* 10.8.2002, Added SSL_peek patch to ssl_read_until from
* Peter Behroozi <peter@@fhpwireless_.com> --Sampo
* 21.8.2002, Added SESSION_get_master_key, SSL_get_client_random, SSL_get_server_random
* --mikem@open.com_.au
* 2.9.2002, Added SSL_CTX_get_cert_store, X509_STORE_add_cert, X509_STORE_add_crl
* X509_STORE_set_flags, X509_load_cert_file, X509_load_crl_file
* X509_load_cert_crl_file, PEM_read_bio_X509_CRL
* constants for X509_V_FLAG_*
* --mikem@open.com_.au
* 6.9.2002, applied Mike's patch and fixed X509_STORE_* to X509_STORE_CTX_*
* --Sampo
*
* $Id: SSLeay.xs,v 1.12 2002/11/05 05:39:02 sampo Exp $
*
* The distribution and use of this module are subject to the conditions
* listed in LICENSE file at the root of OpenSSL-0.9.6b
* distribution (i.e. free, but mandatory attribution and NO WARRANTY).
Removed, perhaps permanently?
int
SSL_add_session(ctx,ses)
SSL_CTX * ctx
SSL_SESSION * ses
int
SSL_remove_session(ctx,ses)
SSL_CTX * ctx
SSL_SESSION * ses
void
SSL_flush_sessions(ctx,tm)
SSL_CTX * ctx
long tm
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#ifdef __cplusplus
}
#endif
/* OpenSSL-0.9.3a has some strange warning about this in
* openssl/des.h
*/
#undef _
#include <openssl/err.h>
#include <openssl/lhash.h>
#include <openssl/rand.h>
#include <openssl/buffer.h>
#include <openssl/ssl.h>
#include <openssl/comp.h> /* openssl-0.9.6a forgets to include this */
#include <openssl/md5.h> /* openssl-SNAP-20020227 does not automatically include this */
/* Debugging output */
#if 0
#define PR(s) printf(s);
#define PRN(s,n) printf("'%s' (%d)\n",s,n);
#define SEX_DEBUG 1
#else
#define PR(s)
#define PRN(s,n)
#undef SEX_DEBUG
#endif
static int
not_here(s)
char *s;
{
croak("%s not implemented on this architecture", s);
return -1;
}
/* xsub automagically generated constant evaluator function */
static double
constant(char* name)
{
errno = 0;
switch (*name) {
case 'A':
if (strEQ(name, "AT_MD5_WITH_RSA_ENCRYPTION"))
#ifdef SSL_AT_MD5_WITH_RSA_ENCRYPTION
return SSL_AT_MD5_WITH_RSA_ENCRYPTION;
#else
goto not_there;
#endif
break;
case 'B':
break;
case 'C':
if (strEQ(name, "CB_ACCEPT_EXIT"))
#ifdef SSL_CB_ACCEPT_EXIT
return SSL_CB_ACCEPT_EXIT;
#else
goto not_there;
#endif
if (strEQ(name, "CB_ACCEPT_LOOP"))
#ifdef SSL_CB_ACCEPT_LOOP
return SSL_CB_ACCEPT_LOOP;
#else
goto not_there;
#endif
if (strEQ(name, "CB_CONNECT_EXIT"))
#ifdef SSL_CB_CONNECT_EXIT
return SSL_CB_CONNECT_EXIT;
#else
goto not_there;
#endif
if (strEQ(name, "CB_CONNECT_LOOP"))
#ifdef SSL_CB_CONNECT_LOOP
return SSL_CB_CONNECT_LOOP;
#else
goto not_there;
#endif
if (strEQ(name, "CK_DES_192_EDE3_CBC_WITH_MD5"))
#ifdef SSL_CK_DES_192_EDE3_CBC_WITH_MD5
return SSL_CK_DES_192_EDE3_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_DES_192_EDE3_CBC_WITH_SHA"))
#ifdef SSL_CK_DES_192_EDE3_CBC_WITH_SHA
return SSL_CK_DES_192_EDE3_CBC_WITH_SHA;
#else
goto not_there;
#endif
if (strEQ(name, "CK_DES_64_CBC_WITH_MD5"))
#ifdef SSL_CK_DES_64_CBC_WITH_MD5
return SSL_CK_DES_64_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_DES_64_CBC_WITH_SHA"))
#ifdef SSL_CK_DES_64_CBC_WITH_SHA
return SSL_CK_DES_64_CBC_WITH_SHA;
#else
goto not_there;
#endif
if (strEQ(name, "CK_DES_64_CFB64_WITH_MD5_1"))
#ifdef SSL_CK_DES_64_CFB64_WITH_MD5_1
return SSL_CK_DES_64_CFB64_WITH_MD5_1;
#else
goto not_there;
#endif
if (strEQ(name, "CK_IDEA_128_CBC_WITH_MD5"))
#ifdef SSL_CK_IDEA_128_CBC_WITH_MD5
return SSL_CK_IDEA_128_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_NULL"))
#ifdef SSL_CK_NULL
return SSL_CK_NULL;
#else
goto not_there;
#endif
if (strEQ(name, "CK_NULL_WITH_MD5"))
#ifdef SSL_CK_NULL_WITH_MD5
return SSL_CK_NULL_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_RC2_128_CBC_EXPORT40_WITH_MD5"))
#ifdef SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5
return SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_RC2_128_CBC_WITH_MD5"))
#ifdef SSL_CK_RC2_128_CBC_WITH_MD5
return SSL_CK_RC2_128_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_RC4_128_EXPORT40_WITH_MD5"))
#ifdef SSL_CK_RC4_128_EXPORT40_WITH_MD5
return SSL_CK_RC4_128_EXPORT40_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CK_RC4_128_WITH_MD5"))
#ifdef SSL_CK_RC4_128_WITH_MD5
return SSL_CK_RC4_128_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "CLIENT_VERSION"))
#ifdef SSL_CLIENT_VERSION
return SSL_CLIENT_VERSION;
#else
goto not_there;
#endif
if (strEQ(name, "CT_X509_CERTIFICATE"))
#ifdef SSL_CT_X509_CERTIFICATE
return SSL_CT_X509_CERTIFICATE;
#else
goto not_there;
#endif
break;
case 'D':
break;
case 'E':
if (strEQ(name, "ERROR_NONE"))
#ifdef SSL_ERROR_NONE
return SSL_ERROR_NONE;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_SSL"))
#ifdef SSL_ERROR_SSL
return SSL_ERROR_SSL;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_SYSCALL"))
#ifdef SSL_ERROR_SYSCALL
return SSL_ERROR_SYSCALL;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_WANT_CONNECT"))
#ifdef SSL_ERROR_WANT_CONNECT
return SSL_ERROR_WANT_CONNECT;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_WANT_READ"))
#ifdef SSL_ERROR_WANT_READ
return SSL_ERROR_WANT_READ;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_WANT_WRITE"))
#ifdef SSL_ERROR_WANT_WRITE
return SSL_ERROR_WANT_WRITE;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_WANT_X509_LOOKUP"))
#ifdef SSL_ERROR_WANT_X509_LOOKUP
return SSL_ERROR_WANT_X509_LOOKUP;
#else
goto not_there;
#endif
if (strEQ(name, "ERROR_ZERO_RETURN"))
#ifdef SSL_ERROR_ZERO_RETURN
return SSL_ERROR_ZERO_RETURN;
#else
goto not_there;
#endif
break;
case 'F':
if (strEQ(name, "FILETYPE_ASN1"))
#ifdef SSL_FILETYPE_ASN1
return SSL_FILETYPE_ASN1;
#else
goto not_there;
#endif
if (strEQ(name, "FILETYPE_PEM"))
#ifdef SSL_FILETYPE_PEM
return SSL_FILETYPE_PEM;
#else
goto not_there;
#endif
if (strEQ(name, "F_CLIENT_CERTIFICATE"))
#ifdef SSL_F_CLIENT_CERTIFICATE
return SSL_F_CLIENT_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "F_CLIENT_HELLO"))
#ifdef SSL_F_CLIENT_HELLO
return SSL_F_CLIENT_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "F_CLIENT_MASTER_KEY"))
#ifdef SSL_F_CLIENT_MASTER_KEY
return SSL_F_CLIENT_MASTER_KEY;
#else
goto not_there;
#endif
if (strEQ(name, "F_D2I_SSL_SESSION"))
#ifdef SSL_F_D2I_SSL_SESSION
return SSL_F_D2I_SSL_SESSION;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_CLIENT_FINISHED"))
#ifdef SSL_F_GET_CLIENT_FINISHED
return SSL_F_GET_CLIENT_FINISHED;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_CLIENT_HELLO"))
#ifdef SSL_F_GET_CLIENT_HELLO
return SSL_F_GET_CLIENT_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_CLIENT_MASTER_KEY"))
#ifdef SSL_F_GET_CLIENT_MASTER_KEY
return SSL_F_GET_CLIENT_MASTER_KEY;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_SERVER_FINISHED"))
#ifdef SSL_F_GET_SERVER_FINISHED
return SSL_F_GET_SERVER_FINISHED;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_SERVER_HELLO"))
#ifdef SSL_F_GET_SERVER_HELLO
return SSL_F_GET_SERVER_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "F_GET_SERVER_VERIFY"))
#ifdef SSL_F_GET_SERVER_VERIFY
return SSL_F_GET_SERVER_VERIFY;
#else
goto not_there;
#endif
if (strEQ(name, "F_I2D_SSL_SESSION"))
#ifdef SSL_F_I2D_SSL_SESSION
return SSL_F_I2D_SSL_SESSION;
#else
goto not_there;
#endif
if (strEQ(name, "F_READ_N"))
#ifdef SSL_F_READ_N
return SSL_F_READ_N;
#else
goto not_there;
#endif
if (strEQ(name, "F_REQUEST_CERTIFICATE"))
#ifdef SSL_F_REQUEST_CERTIFICATE
return SSL_F_REQUEST_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "F_SERVER_HELLO"))
#ifdef SSL_F_SERVER_HELLO
return SSL_F_SERVER_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ACCEPT"))
#ifdef SSL_F_SSL_ACCEPT
return SSL_F_SSL_ACCEPT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_CERT_NEW"))
#ifdef SSL_F_SSL_CERT_NEW
return SSL_F_SSL_CERT_NEW;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_CONNECT"))
#ifdef SSL_F_SSL_CONNECT
return SSL_F_SSL_CONNECT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_DES_CBC_INIT"))
#ifdef SSL_F_SSL_ENC_DES_CBC_INIT
return SSL_F_SSL_ENC_DES_CBC_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_DES_CFB_INIT"))
#ifdef SSL_F_SSL_ENC_DES_CFB_INIT
return SSL_F_SSL_ENC_DES_CFB_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_DES_EDE3_CBC_INIT"))
#ifdef SSL_F_SSL_ENC_DES_EDE3_CBC_INIT
return SSL_F_SSL_ENC_DES_EDE3_CBC_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_IDEA_CBC_INIT"))
#ifdef SSL_F_SSL_ENC_IDEA_CBC_INIT
return SSL_F_SSL_ENC_IDEA_CBC_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_NULL_INIT"))
#ifdef SSL_F_SSL_ENC_NULL_INIT
return SSL_F_SSL_ENC_NULL_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_RC2_CBC_INIT"))
#ifdef SSL_F_SSL_ENC_RC2_CBC_INIT
return SSL_F_SSL_ENC_RC2_CBC_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_ENC_RC4_INIT"))
#ifdef SSL_F_SSL_ENC_RC4_INIT
return SSL_F_SSL_ENC_RC4_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_GET_NEW_SESSION"))
#ifdef SSL_F_SSL_GET_NEW_SESSION
return SSL_F_SSL_GET_NEW_SESSION;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_MAKE_CIPHER_LIST"))
#ifdef SSL_F_SSL_MAKE_CIPHER_LIST
return SSL_F_SSL_MAKE_CIPHER_LIST;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_NEW"))
#ifdef SSL_F_SSL_NEW
return SSL_F_SSL_NEW;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_READ"))
#ifdef SSL_F_SSL_READ
return SSL_F_SSL_READ;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_RSA_PRIVATE_DECRYPT"))
#ifdef SSL_F_SSL_RSA_PRIVATE_DECRYPT
return SSL_F_SSL_RSA_PRIVATE_DECRYPT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_RSA_PUBLIC_ENCRYPT"))
#ifdef SSL_F_SSL_RSA_PUBLIC_ENCRYPT
return SSL_F_SSL_RSA_PUBLIC_ENCRYPT;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SESSION_NEW"))
#ifdef SSL_F_SSL_SESSION_NEW
return SSL_F_SSL_SESSION_NEW;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SESSION_PRINT_FP"))
#ifdef SSL_F_SSL_SESSION_PRINT_FP
return SSL_F_SSL_SESSION_PRINT_FP;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SET_CERTIFICATE"))
#ifdef SSL_F_SSL_SET_CERTIFICATE
return SSL_F_SSL_SET_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SET_FD"))
#ifdef SSL_F_SSL_SET_FD
return SSL_F_SSL_SET_FD;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SET_RFD"))
#ifdef SSL_F_SSL_SET_RFD
return SSL_F_SSL_SET_RFD;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_SET_WFD"))
#ifdef SSL_F_SSL_SET_WFD
return SSL_F_SSL_SET_WFD;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_STARTUP"))
#ifdef SSL_F_SSL_STARTUP
return SSL_F_SSL_STARTUP;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_CERTIFICATE"))
#ifdef SSL_F_SSL_USE_CERTIFICATE
return SSL_F_SSL_USE_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_CERTIFICATE_ASN1"))
#ifdef SSL_F_SSL_USE_CERTIFICATE_ASN1
return SSL_F_SSL_USE_CERTIFICATE_ASN1;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_CERTIFICATE_FILE"))
#ifdef SSL_F_SSL_USE_CERTIFICATE_FILE
return SSL_F_SSL_USE_CERTIFICATE_FILE;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_PRIVATEKEY"))
#ifdef SSL_F_SSL_USE_PRIVATEKEY
return SSL_F_SSL_USE_PRIVATEKEY;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_PRIVATEKEY_ASN1"))
#ifdef SSL_F_SSL_USE_PRIVATEKEY_ASN1
return SSL_F_SSL_USE_PRIVATEKEY_ASN1;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_PRIVATEKEY_FILE"))
#ifdef SSL_F_SSL_USE_PRIVATEKEY_FILE
return SSL_F_SSL_USE_PRIVATEKEY_FILE;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_RSAPRIVATEKEY"))
#ifdef SSL_F_SSL_USE_RSAPRIVATEKEY
return SSL_F_SSL_USE_RSAPRIVATEKEY;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_RSAPRIVATEKEY_ASN1"))
#ifdef SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1
return SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1;
#else
goto not_there;
#endif
if (strEQ(name, "F_SSL_USE_RSAPRIVATEKEY_FILE"))
#ifdef SSL_F_SSL_USE_RSAPRIVATEKEY_FILE
return SSL_F_SSL_USE_RSAPRIVATEKEY_FILE;
#else
goto not_there;
#endif
if (strEQ(name, "F_WRITE_PENDING"))
#ifdef SSL_F_WRITE_PENDING
return SSL_F_WRITE_PENDING;
#else
goto not_there;
#endif
break;
case 'G':
break;
case 'H':
break;
case 'I':
break;
case 'J':
break;
case 'K':
break;
case 'L':
break;
case 'M':
if (strEQ(name, "MAX_MASTER_KEY_LENGTH_IN_BITS"))
#ifdef SSL_MAX_MASTER_KEY_LENGTH_IN_BITS
return SSL_MAX_MASTER_KEY_LENGTH_IN_BITS;
#else
goto not_there;
#endif
if (strEQ(name, "MAX_RECORD_LENGTH_2_BYTE_HEADER"))
#ifdef SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER
return SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER;
#else
goto not_there;
#endif
if (strEQ(name, "MAX_RECORD_LENGTH_3_BYTE_HEADER"))
#ifdef SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER
return SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER;
#else
goto not_there;
#endif
if (strEQ(name, "MAX_SSL_SESSION_ID_LENGTH_IN_BYTES"))
#ifdef SSL_MAX_SSL_SESSION_ID_LENGTH_IN_BYTES
return SSL_MAX_SSL_SESSION_ID_LENGTH_IN_BYTES;
#else
goto not_there;
#endif
if (strEQ(name, "MIN_RSA_MODULUS_LENGTH_IN_BYTES"))
#ifdef SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES
return SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES;
#else
goto not_there;
#endif
if (strEQ(name, "MT_CLIENT_CERTIFICATE"))
#ifdef SSL_MT_CLIENT_CERTIFICATE
return SSL_MT_CLIENT_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "MT_CLIENT_FINISHED"))
#ifdef SSL_MT_CLIENT_FINISHED
return SSL_MT_CLIENT_FINISHED;
#else
goto not_there;
#endif
if (strEQ(name, "MT_CLIENT_HELLO"))
#ifdef SSL_MT_CLIENT_HELLO
return SSL_MT_CLIENT_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "MT_CLIENT_MASTER_KEY"))
#ifdef SSL_MT_CLIENT_MASTER_KEY
return SSL_MT_CLIENT_MASTER_KEY;
#else
goto not_there;
#endif
if (strEQ(name, "MT_ERROR"))
#ifdef SSL_MT_ERROR
return SSL_MT_ERROR;
#else
goto not_there;
#endif
if (strEQ(name, "MT_REQUEST_CERTIFICATE"))
#ifdef SSL_MT_REQUEST_CERTIFICATE
return SSL_MT_REQUEST_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "MT_SERVER_FINISHED"))
#ifdef SSL_MT_SERVER_FINISHED
return SSL_MT_SERVER_FINISHED;
#else
goto not_there;
#endif
if (strEQ(name, "MT_SERVER_HELLO"))
#ifdef SSL_MT_SERVER_HELLO
return SSL_MT_SERVER_HELLO;
#else
goto not_there;
#endif
if (strEQ(name, "MT_SERVER_VERIFY"))
#ifdef SSL_MT_SERVER_VERIFY
return SSL_MT_SERVER_VERIFY;
#else
goto not_there;
#endif
break;
case 'N':
if (strEQ(name, "NOTHING"))
#ifdef SSL_NOTHING
return SSL_NOTHING;
#else
goto not_there;
#endif
break;
case 'O':
if (strEQ(name, "OPENSSL_VERSION_NUMBER"))
#ifdef OPENSSL_VERSION_NUMBER
return OPENSSL_VERSION_NUMBER;
#else
goto not_there;
#endif
if (strEQ(name, "OP_MICROSOFT_SESS_ID_BUG"))
#ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
return SSL_OP_MICROSOFT_SESS_ID_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NETSCAPE_CHALLENGE_BUG"))
#ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
return SSL_OP_NETSCAPE_CHALLENGE_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG"))
#ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
return SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_SSLREF2_REUSE_CERT_TYPE_BUG"))
#ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
return SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_MICROSOFT_BIG_SSLV3_BUFFER"))
#ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
return SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER;
#else
goto not_there;
#endif
if (strEQ(name, "OP_MSIE_SSLV2_RSA_PADDING"))
#ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
return SSL_OP_MSIE_SSLV2_RSA_PADDING;
#else
goto not_there;
#endif
if (strEQ(name, "OP_SSLEAY_080_CLIENT_DH_BUG"))
#ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
return SSL_OP_SSLEAY_080_CLIENT_DH_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_TLS_D5_BUG"))
#ifdef SSL_OP_TLS_D5_BUG
return SSL_OP_TLS_D5_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_SINGLE_DH_USE"))
#ifdef SSL_OP_SINGLE_DH_USE
return SSL_OP_SINGLE_DH_USE;
#else
goto not_there;
#endif
if (strEQ(name, "OP_EPHEMERAL_RSA"))
#ifdef SSL_OP_EPHEMERAL_RSA
return SSL_OP_EPHEMERAL_RSA;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NETSCAPE_CA_DN_BUG"))
#ifdef SSL_OP_NETSCAPE_CA_DN_BUG
return SSL_OP_NETSCAPE_CA_DN_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NON_EXPORT_FIRST"))
#ifdef SSL_OP_NON_EXPORT_FIRST
return SSL_OP_NON_EXPORT_FIRST;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG"))
#ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
return SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NO_SSLv2"))
#ifdef SSL_OP_NO_SSLv2
return SSL_OP_NO_SSLv2;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NO_SSLv3"))
#ifdef SSL_OP_NO_SSLv3
return SSL_OP_NO_SSLv3;
#else
goto not_there;
#endif
if (strEQ(name, "OP_NO_TLSv1"))
#ifdef SSL_OP_NO_TLSv1
return SSL_OP_NO_TLSv1;
#else
goto not_there;
#endif
if (strEQ(name, "OP_ALL"))
#ifdef SSL_OP_ALL
return SSL_OP_ALL;
#else
goto not_there;
#endif
case 'P':
if (strEQ(name, "PE_BAD_CERTIFICATE"))
#ifdef SSL_PE_BAD_CERTIFICATE
return SSL_PE_BAD_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "PE_NO_CERTIFICATE"))
#ifdef SSL_PE_NO_CERTIFICATE
return SSL_PE_NO_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "PE_NO_CIPHER"))
#ifdef SSL_PE_NO_CIPHER
return SSL_PE_NO_CIPHER;
#else
goto not_there;
#endif
if (strEQ(name, "PE_UNSUPPORTED_CERTIFICATE_TYPE"))
#ifdef SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE
return SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE;
#else
goto not_there;
#endif
break;
case 'Q':
break;
case 'R':
if (strEQ(name, "READING"))
#ifdef SSL_READING
return SSL_READING;
#else
goto not_there;
#endif
if (strEQ(name, "RWERR_BAD_MAC_DECODE"))
#ifdef SSL_RWERR_BAD_MAC_DECODE
return SSL_RWERR_BAD_MAC_DECODE;
#else
goto not_there;
#endif
if (strEQ(name, "RWERR_BAD_WRITE_RETRY"))
#ifdef SSL_RWERR_BAD_WRITE_RETRY
return SSL_RWERR_BAD_WRITE_RETRY;
#else
goto not_there;
#endif
if (strEQ(name, "RWERR_INTERNAL_ERROR"))
#ifdef SSL_RWERR_INTERNAL_ERROR
return SSL_RWERR_INTERNAL_ERROR;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_AUTHENTICATION_TYPE"))
#ifdef SSL_R_BAD_AUTHENTICATION_TYPE
return SSL_R_BAD_AUTHENTICATION_TYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_CHECKSUM"))
#ifdef SSL_R_BAD_CHECKSUM
return SSL_R_BAD_CHECKSUM;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_MAC_DECODE"))
#ifdef SSL_R_BAD_MAC_DECODE
return SSL_R_BAD_MAC_DECODE;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_RESPONSE_ARGUMENT"))
#ifdef SSL_R_BAD_RESPONSE_ARGUMENT
return SSL_R_BAD_RESPONSE_ARGUMENT;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_SSL_FILETYPE"))
#ifdef SSL_R_BAD_SSL_FILETYPE
return SSL_R_BAD_SSL_FILETYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_SSL_SESSION_ID_LENGTH"))
#ifdef SSL_R_BAD_SSL_SESSION_ID_LENGTH
return SSL_R_BAD_SSL_SESSION_ID_LENGTH;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_STATE"))
#ifdef SSL_R_BAD_STATE
return SSL_R_BAD_STATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_BAD_WRITE_RETRY"))
#ifdef SSL_R_BAD_WRITE_RETRY
return SSL_R_BAD_WRITE_RETRY;
#else
goto not_there;
#endif
if (strEQ(name, "R_CHALLENGE_IS_DIFFERENT"))
#ifdef SSL_R_CHALLENGE_IS_DIFFERENT
return SSL_R_CHALLENGE_IS_DIFFERENT;
#else
goto not_there;
#endif
if (strEQ(name, "R_CIPHER_CODE_TOO_LONG"))
#ifdef SSL_R_CIPHER_CODE_TOO_LONG
return SSL_R_CIPHER_CODE_TOO_LONG;
#else
goto not_there;
#endif
if (strEQ(name, "R_CIPHER_TABLE_SRC_ERROR"))
#ifdef SSL_R_CIPHER_TABLE_SRC_ERROR
return SSL_R_CIPHER_TABLE_SRC_ERROR;
#else
goto not_there;
#endif
if (strEQ(name, "R_CONECTION_ID_IS_DIFFERENT"))
#ifdef SSL_R_CONECTION_ID_IS_DIFFERENT
return SSL_R_CONECTION_ID_IS_DIFFERENT;
#else
goto not_there;
#endif
if (strEQ(name, "R_INVALID_CHALLENGE_LENGTH"))
#ifdef SSL_R_INVALID_CHALLENGE_LENGTH
return SSL_R_INVALID_CHALLENGE_LENGTH;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_CERTIFICATE_SET"))
#ifdef SSL_R_NO_CERTIFICATE_SET
return SSL_R_NO_CERTIFICATE_SET;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_CERTIFICATE_SPECIFIED"))
#ifdef SSL_R_NO_CERTIFICATE_SPECIFIED
return SSL_R_NO_CERTIFICATE_SPECIFIED;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_CIPHER_LIST"))
#ifdef SSL_R_NO_CIPHER_LIST
return SSL_R_NO_CIPHER_LIST;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_CIPHER_MATCH"))
#ifdef SSL_R_NO_CIPHER_MATCH
return SSL_R_NO_CIPHER_MATCH;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_CIPHER_WE_TRUST"))
#ifdef SSL_R_NO_CIPHER_WE_TRUST
return SSL_R_NO_CIPHER_WE_TRUST;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_PRIVATEKEY"))
#ifdef SSL_R_NO_PRIVATEKEY
return SSL_R_NO_PRIVATEKEY;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_PUBLICKEY"))
#ifdef SSL_R_NO_PUBLICKEY
return SSL_R_NO_PUBLICKEY;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_READ_METHOD_SET"))
#ifdef SSL_R_NO_READ_METHOD_SET
return SSL_R_NO_READ_METHOD_SET;
#else
goto not_there;
#endif
if (strEQ(name, "R_NO_WRITE_METHOD_SET"))
#ifdef SSL_R_NO_WRITE_METHOD_SET
return SSL_R_NO_WRITE_METHOD_SET;
#else
goto not_there;
#endif
if (strEQ(name, "R_NULL_SSL_CTX"))
#ifdef SSL_R_NULL_SSL_CTX
return SSL_R_NULL_SSL_CTX;
#else
goto not_there;
#endif
if (strEQ(name, "R_PEER_DID_NOT_RETURN_A_CERTIFICATE"))
#ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE
return SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_PEER_ERROR"))
#ifdef SSL_R_PEER_ERROR
return SSL_R_PEER_ERROR;
#else
goto not_there;
#endif
if (strEQ(name, "R_PEER_ERROR_CERTIFICATE"))
#ifdef SSL_R_PEER_ERROR_CERTIFICATE
return SSL_R_PEER_ERROR_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_PEER_ERROR_NO_CIPHER"))
#ifdef SSL_R_PEER_ERROR_NO_CIPHER
return SSL_R_PEER_ERROR_NO_CIPHER;
#else
goto not_there;
#endif
if (strEQ(name, "R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE"))
#ifdef SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
return SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_PERR_ERROR_NO_CERTIFICATE"))
#ifdef SSL_R_PERR_ERROR_NO_CERTIFICATE
return SSL_R_PERR_ERROR_NO_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_PUBLIC_KEY_ENCRYPT_ERROR"))
#ifdef SSL_R_PUBLIC_KEY_ENCRYPT_ERROR
return SSL_R_PUBLIC_KEY_ENCRYPT_ERROR;
#else
goto not_there;
#endif
if (strEQ(name, "R_PUBLIC_KEY_IS_NOT_RSA"))
#ifdef SSL_R_PUBLIC_KEY_IS_NOT_RSA
return SSL_R_PUBLIC_KEY_IS_NOT_RSA;
#else
goto not_there;
#endif
if (strEQ(name, "R_PUBLIC_KEY_NO_RSA"))
#ifdef SSL_R_PUBLIC_KEY_NO_RSA
return SSL_R_PUBLIC_KEY_NO_RSA;
#else
goto not_there;
#endif
if (strEQ(name, "R_READ_WRONG_PACKET_TYPE"))
#ifdef SSL_R_READ_WRONG_PACKET_TYPE
return SSL_R_READ_WRONG_PACKET_TYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_REVERSE_KEY_ARG_LENGTH_IS_WRONG"))
#ifdef SSL_R_REVERSE_KEY_ARG_LENGTH_IS_WRONG
return SSL_R_REVERSE_KEY_ARG_LENGTH_IS_WRONG;
#else
goto not_there;
#endif
if (strEQ(name, "R_REVERSE_MASTER_KEY_LENGTH_IS_WRONG"))
#ifdef SSL_R_REVERSE_MASTER_KEY_LENGTH_IS_WRONG
return SSL_R_REVERSE_MASTER_KEY_LENGTH_IS_WRONG;
#else
goto not_there;
#endif
if (strEQ(name, "R_REVERSE_SSL_SESSION_ID_LENGTH_IS_WRONG"))
#ifdef SSL_R_REVERSE_SSL_SESSION_ID_LENGTH_IS_WRONG
return SSL_R_REVERSE_SSL_SESSION_ID_LENGTH_IS_WRONG;
#else
goto not_there;
#endif
if (strEQ(name, "R_SHORT_READ"))
#ifdef SSL_R_SHORT_READ
return SSL_R_SHORT_READ;
#else
goto not_there;
#endif
if (strEQ(name, "R_SSL_SESSION_ID_IS_DIFFERENT"))
#ifdef SSL_R_SSL_SESSION_ID_IS_DIFFERENT
return SSL_R_SSL_SESSION_ID_IS_DIFFERENT;
#else
goto not_there;
#endif
if (strEQ(name, "R_UNABLE_TO_EXTRACT_PUBLIC_KEY"))
#ifdef SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY
return SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY;
#else
goto not_there;
#endif
if (strEQ(name, "R_UNDEFINED_INIT_STATE"))
#ifdef SSL_R_UNDEFINED_INIT_STATE
return SSL_R_UNDEFINED_INIT_STATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_UNKNOWN_REMOTE_ERROR_TYPE"))
#ifdef SSL_R_UNKNOWN_REMOTE_ERROR_TYPE
return SSL_R_UNKNOWN_REMOTE_ERROR_TYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_UNKNOWN_STATE"))
#ifdef SSL_R_UNKNOWN_STATE
return SSL_R_UNKNOWN_STATE;
#else
goto not_there;
#endif
if (strEQ(name, "R_UNSUPORTED_CIPHER"))
#ifdef SSL_R_UNSUPORTED_CIPHER
return SSL_R_UNSUPORTED_CIPHER;
#else
goto not_there;
#endif
if (strEQ(name, "R_WRONG_PUBLIC_KEY_TYPE"))
#ifdef SSL_R_WRONG_PUBLIC_KEY_TYPE
return SSL_R_WRONG_PUBLIC_KEY_TYPE;
#else
goto not_there;
#endif
if (strEQ(name, "R_X509_LIB"))
#ifdef SSL_R_X509_LIB
return SSL_R_X509_LIB;
#else
goto not_there;
#endif
break;
case 'S':
if (strEQ(name, "SERVER_VERSION"))
#ifdef SSL_SERVER_VERSION
return SSL_SERVER_VERSION;
#else
goto not_there;
#endif
if (strEQ(name, "SESSION_ASN1_VERSION"))
#ifdef SSL_SESSION_ASN1_VERSION
return SSL_SESSION_ASN1_VERSION;
#else
goto not_there;
#endif
if (strEQ(name, "ST_ACCEPT"))
#ifdef SSL_ST_ACCEPT
return SSL_ST_ACCEPT;
#else
goto not_there;
#endif
if (strEQ(name, "ST_BEFORE"))
#ifdef SSL_ST_BEFORE
return SSL_ST_BEFORE;
#else
goto not_there;
#endif
if (strEQ(name, "ST_CLIENT_START_ENCRYPTION"))
#ifdef SSL_ST_CLIENT_START_ENCRYPTION
return SSL_ST_CLIENT_START_ENCRYPTION;
#else
goto not_there;
#endif
if (strEQ(name, "ST_CONNECT"))
#ifdef SSL_ST_CONNECT
return SSL_ST_CONNECT;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_FINISHED_A"))
#ifdef SSL_ST_GET_CLIENT_FINISHED_A
return SSL_ST_GET_CLIENT_FINISHED_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_FINISHED_B"))
#ifdef SSL_ST_GET_CLIENT_FINISHED_B
return SSL_ST_GET_CLIENT_FINISHED_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_HELLO_A"))
#ifdef SSL_ST_GET_CLIENT_HELLO_A
return SSL_ST_GET_CLIENT_HELLO_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_HELLO_B"))
#ifdef SSL_ST_GET_CLIENT_HELLO_B
return SSL_ST_GET_CLIENT_HELLO_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_MASTER_KEY_A"))
#ifdef SSL_ST_GET_CLIENT_MASTER_KEY_A
return SSL_ST_GET_CLIENT_MASTER_KEY_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_CLIENT_MASTER_KEY_B"))
#ifdef SSL_ST_GET_CLIENT_MASTER_KEY_B
return SSL_ST_GET_CLIENT_MASTER_KEY_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_FINISHED_A"))
#ifdef SSL_ST_GET_SERVER_FINISHED_A
return SSL_ST_GET_SERVER_FINISHED_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_FINISHED_B"))
#ifdef SSL_ST_GET_SERVER_FINISHED_B
return SSL_ST_GET_SERVER_FINISHED_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_HELLO_A"))
#ifdef SSL_ST_GET_SERVER_HELLO_A
return SSL_ST_GET_SERVER_HELLO_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_HELLO_B"))
#ifdef SSL_ST_GET_SERVER_HELLO_B
return SSL_ST_GET_SERVER_HELLO_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_VERIFY_A"))
#ifdef SSL_ST_GET_SERVER_VERIFY_A
return SSL_ST_GET_SERVER_VERIFY_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_GET_SERVER_VERIFY_B"))
#ifdef SSL_ST_GET_SERVER_VERIFY_B
return SSL_ST_GET_SERVER_VERIFY_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_INIT"))
#ifdef SSL_ST_INIT
return SSL_ST_INIT;
#else
goto not_there;
#endif
if (strEQ(name, "ST_OK"))
#ifdef SSL_ST_OK
return SSL_ST_OK;
#else
goto not_there;
#endif
if (strEQ(name, "ST_READ_BODY"))
#ifdef SSL_ST_READ_BODY
return SSL_ST_READ_BODY;
#else
goto not_there;
#endif
if (strEQ(name, "ST_READ_HEADER"))
#ifdef SSL_ST_READ_HEADER
return SSL_ST_READ_HEADER;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_CERTIFICATE_A"))
#ifdef SSL_ST_SEND_CLIENT_CERTIFICATE_A
return SSL_ST_SEND_CLIENT_CERTIFICATE_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_CERTIFICATE_B"))
#ifdef SSL_ST_SEND_CLIENT_CERTIFICATE_B
return SSL_ST_SEND_CLIENT_CERTIFICATE_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_CERTIFICATE_C"))
#ifdef SSL_ST_SEND_CLIENT_CERTIFICATE_C
return SSL_ST_SEND_CLIENT_CERTIFICATE_C;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_CERTIFICATE_D"))
#ifdef SSL_ST_SEND_CLIENT_CERTIFICATE_D
return SSL_ST_SEND_CLIENT_CERTIFICATE_D;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_FINISHED_A"))
#ifdef SSL_ST_SEND_CLIENT_FINISHED_A
return SSL_ST_SEND_CLIENT_FINISHED_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_FINISHED_B"))
#ifdef SSL_ST_SEND_CLIENT_FINISHED_B
return SSL_ST_SEND_CLIENT_FINISHED_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_HELLO_A"))
#ifdef SSL_ST_SEND_CLIENT_HELLO_A
return SSL_ST_SEND_CLIENT_HELLO_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_HELLO_B"))
#ifdef SSL_ST_SEND_CLIENT_HELLO_B
return SSL_ST_SEND_CLIENT_HELLO_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_MASTER_KEY_A"))
#ifdef SSL_ST_SEND_CLIENT_MASTER_KEY_A
return SSL_ST_SEND_CLIENT_MASTER_KEY_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_CLIENT_MASTER_KEY_B"))
#ifdef SSL_ST_SEND_CLIENT_MASTER_KEY_B
return SSL_ST_SEND_CLIENT_MASTER_KEY_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_REQUEST_CERTIFICATE_A"))
#ifdef SSL_ST_SEND_REQUEST_CERTIFICATE_A
return SSL_ST_SEND_REQUEST_CERTIFICATE_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_REQUEST_CERTIFICATE_B"))
#ifdef SSL_ST_SEND_REQUEST_CERTIFICATE_B
return SSL_ST_SEND_REQUEST_CERTIFICATE_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_REQUEST_CERTIFICATE_C"))
#ifdef SSL_ST_SEND_REQUEST_CERTIFICATE_C
return SSL_ST_SEND_REQUEST_CERTIFICATE_C;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_REQUEST_CERTIFICATE_D"))
#ifdef SSL_ST_SEND_REQUEST_CERTIFICATE_D
return SSL_ST_SEND_REQUEST_CERTIFICATE_D;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_FINISHED_A"))
#ifdef SSL_ST_SEND_SERVER_FINISHED_A
return SSL_ST_SEND_SERVER_FINISHED_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_FINISHED_B"))
#ifdef SSL_ST_SEND_SERVER_FINISHED_B
return SSL_ST_SEND_SERVER_FINISHED_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_HELLO_A"))
#ifdef SSL_ST_SEND_SERVER_HELLO_A
return SSL_ST_SEND_SERVER_HELLO_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_HELLO_B"))
#ifdef SSL_ST_SEND_SERVER_HELLO_B
return SSL_ST_SEND_SERVER_HELLO_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_VERIFY_A"))
#ifdef SSL_ST_SEND_SERVER_VERIFY_A
return SSL_ST_SEND_SERVER_VERIFY_A;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SEND_SERVER_VERIFY_B"))
#ifdef SSL_ST_SEND_SERVER_VERIFY_B
return SSL_ST_SEND_SERVER_VERIFY_B;
#else
goto not_there;
#endif
if (strEQ(name, "ST_SERVER_START_ENCRYPTION"))
#ifdef SSL_ST_SERVER_START_ENCRYPTION
return SSL_ST_SERVER_START_ENCRYPTION;
#else
goto not_there;
#endif
if (strEQ(name, "ST_X509_GET_CLIENT_CERTIFICATE"))
#ifdef SSL_ST_X509_GET_CLIENT_CERTIFICATE
return SSL_ST_X509_GET_CLIENT_CERTIFICATE;
#else
goto not_there;
#endif
if (strEQ(name, "ST_X509_GET_SERVER_CERTIFICATE"))
#ifdef SSL_ST_X509_GET_SERVER_CERTIFICATE
return SSL_ST_X509_GET_SERVER_CERTIFICATE;
#else
goto not_there;
#endif
break;
case 'T':
#if 0
if (strEQ(name, "TXT_DES_192_EDE3_CBC_WITH_MD5"))
#ifdef SSL_TXT_DES_192_EDE3_CBC_WITH_MD5
return SSL_TXT_DES_192_EDE3_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_DES_192_EDE3_CBC_WITH_SHA"))
#ifdef SSL_TXT_DES_192_EDE3_CBC_WITH_SHA
return SSL_TXT_DES_192_EDE3_CBC_WITH_SHA;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_DES_64_CBC_WITH_MD5"))
#ifdef SSL_TXT_DES_64_CBC_WITH_MD5
return SSL_TXT_DES_64_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_DES_64_CBC_WITH_SHA"))
#ifdef SSL_TXT_DES_64_CBC_WITH_SHA
return SSL_TXT_DES_64_CBC_WITH_SHA;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_DES_64_CFB64_WITH_MD5_1"))
#ifdef SSL_TXT_DES_64_CFB64_WITH_MD5_1
return SSL_TXT_DES_64_CFB64_WITH_MD5_1;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_IDEA_128_CBC_WITH_MD5"))
#ifdef SSL_TXT_IDEA_128_CBC_WITH_MD5
return SSL_TXT_IDEA_128_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_NULL"))
#ifdef SSL_TXT_NULL
return SSL_TXT_NULL;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_NULL_WITH_MD5"))
#ifdef SSL_TXT_NULL_WITH_MD5
return SSL_TXT_NULL_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_RC2_128_CBC_EXPORT40_WITH_MD5"))
#ifdef SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5
return SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_RC2_128_CBC_WITH_MD5"))
#ifdef SSL_TXT_RC2_128_CBC_WITH_MD5
return SSL_TXT_RC2_128_CBC_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_RC4_128_EXPORT40_WITH_MD5"))
#ifdef SSL_TXT_RC4_128_EXPORT40_WITH_MD5
return SSL_TXT_RC4_128_EXPORT40_WITH_MD5;
#else
goto not_there;
#endif
if (strEQ(name, "TXT_RC4_128_WITH_MD5"))
#ifdef SSL_TXT_RC4_128_WITH_MD5
return SSL_TXT_RC4_128_WITH_MD5;
#else
goto not_there;
#endif
#endif
break;
case 'U':
break;
case 'V':
if (strEQ(name, "VERIFY_CLIENT_ONCE"))
#ifdef SSL_VERIFY_CLIENT_ONCE
return SSL_VERIFY_CLIENT_ONCE;
#else
goto not_there;
#endif
if (strEQ(name, "VERIFY_FAIL_IF_NO_PEER_CERT"))
#ifdef SSL_VERIFY_FAIL_IF_NO_PEER_CERT
return SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
#else
goto not_there;
#endif
if (strEQ(name, "VERIFY_NONE"))
#ifdef SSL_VERIFY_NONE
return SSL_VERIFY_NONE;
#else
goto not_there;
#endif
if (strEQ(name, "VERIFY_PEER"))
#ifdef SSL_VERIFY_PEER
return SSL_VERIFY_PEER;
#else
goto not_there;
#endif
break;
case 'W':
if (strEQ(name, "WRITING"))
#ifdef SSL_WRITING
return SSL_WRITING;
#else
goto not_there;
#endif
break;
case 'X':
if (strEQ(name, "X509_LOOKUP"))
#ifdef SSL_X509_LOOKUP
return SSL_X509_LOOKUP;
#else
goto not_there;
#endif
if (strEQ(name, "X509_V_FLAG_CB_ISSUER_CHECK"))
#ifdef X509_V_FLAG_CB_ISSUER_CHECK
return X509_V_FLAG_CB_ISSUER_CHECK;
#else
goto not_there;
#endif
if (strEQ(name, "X509_V_FLAG_USE_CHECK_TIME"))
#ifdef X509_V_FLAG_USE_CHECK_TIME
return X509_V_FLAG_USE_CHECK_TIME;
#else
goto not_there;
#endif
if (strEQ(name, "X509_V_FLAG_CRL_CHECK"))
#ifdef X509_V_FLAG_CRL_CHECK
return X509_V_FLAG_CRL_CHECK;
#else
goto not_there;
#endif
if (strEQ(name, "X509_V_FLAG_CRL_CHECK_ALL"))
#ifdef X509_V_FLAG_CRL_CHECK_ALL
return X509_V_FLAG_CRL_CHECK_ALL;
#else
goto not_there;
#endif
if (strEQ(name, "X509_V_FLAG_IGNORE_CRITICAL"))
#ifdef X509_V_FLAG_IGNORE_CRITICAL
return X509_V_FLAG_IGNORE_CRITICAL;
#else
goto not_there;
#endif
if (strEQ(name, ""))
#ifdef SSL_X509_LOOKUP
return ;
#else
goto not_there;
#endif
break;
case 'Y':
break;
case 'Z':
break;
}
errno = EINVAL;
return 0;
not_there:
errno = ENOENT;
return 0;
}
/* ============= typedefs to agument TYPEMAP ============== */
typedef int callback_ret_int();
typedef void callback_no_ret();
typedef RSA * cb_ssl_int_int_ret_RSA(SSL * ssl,int is_export, int keylength);
typedef DH * cb_ssl_int_int_ret_DH(SSL * ssl,int is_export, int keylength);
typedef STACK_OF(X509_NAME) X509_NAME_STACK;
/* ============= callback stuff ============== */
static SV * ssleay_verify_callback = (SV*)NULL;
static int
ssleay_verify_callback_glue (int ok, X509_STORE_CTX* ctx)
{
dSP ;
int count,res;
ENTER ;
SAVETMPS;
PRN("verify callback glue", ok);
PUSHMARK(sp);
XPUSHs(sv_2mortal(newSViv(ok)));
XPUSHs(sv_2mortal(newSViv((unsigned long int)ctx)));
PUTBACK ;
if (ssleay_verify_callback == NULL)
croak ("Net::SSLeay: verify_callback called, but not "
"set to point to any perl function.\n");
PR("About to call verify callback.\n");
count = perl_call_sv(ssleay_verify_callback, G_SCALAR);
PR("Returned from verify callback.\n");
SPAGAIN;
if (count != 1)
croak ( "Net::SSLeay: verify_callback "
"perl function did not return a scalar.\n");
res = POPi ;
PUTBACK ;
FREETMPS ;
LEAVE ;
return res;
}
static SV * ssleay_ctx_verify_callback = (SV*)NULL;
static int
ssleay_ctx_verify_callback_glue (int ok, X509_STORE_CTX* ctx)
{
dSP ;
int count,res;
ENTER ;
SAVETMPS;
PRN("ctx verify callback glue", ok);
PUSHMARK(sp);
XPUSHs(sv_2mortal(newSViv(ok)));
XPUSHs(sv_2mortal(newSViv((unsigned long int)ctx)));
PUTBACK ;
if (ssleay_ctx_verify_callback == NULL)
croak ("Net::SSLeay: ctx_verify_callback called, but not "
"set to point to any perl function.\n");
PR("About to call ctx verify callback.\n");
count = perl_call_sv(ssleay_ctx_verify_callback, G_SCALAR);
PR("Returned from ctx verify callback.\n");
SPAGAIN;
if (count != 1)
croak ( "Net::SSLeay: ctx_verify_callback "
"perl function did not return a scalar.\n");
res = POPi ;
PUTBACK ;
FREETMPS ;
LEAVE ;
return res;
}
static SV * ssleay_ctx_set_default_passwd_cb_callback = (SV*)NULL;
/* pem_password_cb function */
static int
ssleay_ctx_set_default_passwd_cb_callback_glue (char *buf, int size,
int rwflag, void *userdata)
{
dSP;
int count;
char *res;
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(sv_2mortal(newSViv(rwflag)));
XPUSHs(sv_2mortal(newSViv((unsigned long)userdata)));
PUTBACK;
if (ssleay_ctx_set_default_passwd_cb_callback == NULL)
croak ("Net::SSLeay: ctx_passwd_callback called, but not "
"set to point to any perl function.\n");
PR("About to call passwd callback.\n");
count = perl_call_sv(ssleay_ctx_set_default_passwd_cb_callback, G_SCALAR);
PR("Returned from ctx passwd callback.\n");
SPAGAIN;
if (count != 1)
croak ("Net::SSLeay: ctx_passwd_callback "
"perl function did not return a scalar.\n");
res = POPp;
if (res == NULL) {
*buf = '\0';
} else {
strncpy(buf, res, size);
buf[size - 1] = '\0';
}
PUTBACK;
FREETMPS;
LEAVE;
return strlen(buf);
}
MODULE = Net::SSLeay PACKAGE = Net::SSLeay PREFIX = SSL_
PROTOTYPES: ENABLE
double
constant(name)
char * name
int
hello()
CODE:
PR("\tSSLeay Hello World!\n");
RETVAL = 1;
OUTPUT:
RETVAL
#define REM1 "============= SSL CONTEXT functions =============="
SSL_CTX *
SSL_CTX_new()
CODE:
RETVAL = SSL_CTX_new (SSLv23_method());
OUTPUT:
RETVAL
SSL_CTX *
SSL_CTX_v2_new()
CODE:
RETVAL = SSL_CTX_new (SSLv2_method());
OUTPUT:
RETVAL
SSL_CTX *
SSL_CTX_v3_new()
CODE:
RETVAL = SSL_CTX_new (SSLv3_method());
OUTPUT:
RETVAL
SSL_CTX *
SSL_CTX_v23_new()
CODE:
RETVAL = SSL_CTX_new (SSLv23_method());
OUTPUT:
RETVAL
SSL_CTX *
SSL_CTX_tlsv1_new()
CODE:
RETVAL = SSL_CTX_new (TLSv1_method());
OUTPUT:
RETVAL
SSL_CTX *
SSL_CTX_new_with_method(meth)
SSL_METHOD * meth
CODE:
RETVAL = SSL_CTX_new (SSLv23_method());
OUTPUT:
RETVAL
void
SSL_CTX_free(ctx)
SSL_CTX * ctx
int
SSL_CTX_add_session(ctx,ses)
SSL_CTX * ctx
SSL_SESSION * ses
int
SSL_CTX_remove_session(ctx,ses)
SSL_CTX * ctx
SSL_SESSION * ses
void
SSL_CTX_flush_sessions(ctx,tm)
SSL_CTX * ctx
long tm
int
SSL_CTX_set_default_verify_paths(ctx)
SSL_CTX * ctx
int
SSL_CTX_load_verify_locations(ctx,CAfile,CApath)
SSL_CTX * ctx
char * CAfile
char * CApath
CODE:
RETVAL = SSL_CTX_load_verify_locations (ctx,
CAfile?(*CAfile?CAfile:NULL):NULL,
CApath?(*CApath?CApath:NULL):NULL
);
OUTPUT:
RETVAL
void
SSL_CTX_set_verify(ctx,mode,callback)
SSL_CTX * ctx
int mode
SV * callback
CODE:
if (ssleay_ctx_verify_callback == (SV*)NULL) {
ssleay_ctx_verify_callback = newSVsv(callback);
} else {
SvSetSV (ssleay_ctx_verify_callback, callback);
}
if (SvTRUE(ssleay_ctx_verify_callback)) {
SSL_CTX_set_verify(ctx,mode,&ssleay_ctx_verify_callback_glue);
} else {
SSL_CTX_set_verify(ctx,mode,NULL);
}
int
SSL_get_error(s,ret)
SSL * s
int ret
#define REM10 "============= SSL functions =============="
SSL *
SSL_new(ctx)
SSL_CTX * ctx
void
SSL_free(s)
SSL * s
#if 0 /* this seems to be gone in 0.9.0 */
void
SSL_debug(file)
char * file
#endif
int
SSL_accept(s)
SSL * s
void
SSL_clear(s)
SSL * s
int
SSL_connect(s)
SSL * s
#if defined(WIN32)
int
SSL_set_fd(s,fd)
SSL * s
int fd
CODE:
RETVAL = SSL_set_fd(s,_get_osfhandle(fd));
OUTPUT:
RETVAL
int
SSL_set_rfd(s,fd)
SSL * s
int fd
CODE:
RETVAL = SSL_set_rfd(s,_get_osfhandle(fd));
OUTPUT:
RETVAL
int
SSL_set_wfd(s,fd)
SSL * s
int fd
CODE:
RETVAL = SSL_set_wfd(s,_get_osfhandle(fd));
OUTPUT:
RETVAL
#else
int
SSL_set_fd(s,fd)
SSL * s
int fd
int
SSL_set_rfd(s,fd)
SSL * s
int fd
int
SSL_set_wfd(s,fd)
SSL * s
int fd
#endif
int
SSL_get_fd(s)
SSL * s
void
SSL_read(s,max=sizeof(buf))
SSL * s
PREINIT:
char buf[32768];
INPUT:
int max
PREINIT:
int got;
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
if ((got = SSL_read(s, buf, max)) >= 0)
sv_setpvn( ST(0), buf, got);
void
SSL_peek(s,max=sizeof(buf))
SSL * s
PREINIT:
char buf[32768];
INPUT:
int max
PREINIT:
int got;
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
if ((got = SSL_peek(s, buf, max)) >= 0)
sv_setpvn( ST(0), buf, got);
int
SSL_write(s,buf)
SSL * s
PREINIT:
STRLEN len;
INPUT:
char * buf = SvPV( ST(1), len);
CODE:
RETVAL = SSL_write (s, buf, (int)len);
OUTPUT:
RETVAL
int
SSL_write_partial(s,from,count,buf)
SSL * s
int from
int count
PREINIT:
STRLEN len;
INPUT:
char * buf = SvPV( ST(3), len);
CODE:
/*
if (SvROK( ST(3) )) {
SV* t = SvRV( ST(3) );
buf = SvPV( t, len);
} else
buf = SvPV( ST(3), len);
*/
PRN("write_partial from",from);
PRN(&buf[from],len);
PRN("write_partial count",count);
len -= from;
if (len < 0) {
croak("from beyound end of buffer");
RETVAL = -1;
} else
RETVAL = SSL_write (s, &(buf[from]), (count<=len)?count:len);
OUTPUT:
RETVAL
int
SSL_use_RSAPrivateKey(s,rsa)
SSL * s
RSA * rsa
int
SSL_use_RSAPrivateKey_ASN1(s,d,len)
SSL * s
unsigned char * d
long len
int
SSL_use_RSAPrivateKey_file(s,file,type)
SSL * s
char * file
int type
int
SSL_CTX_use_RSAPrivateKey_file(ctx,file,type)
SSL_CTX * ctx
char * file
int type
int
SSL_use_PrivateKey(s,pkey)
SSL * s
EVP_PKEY * pkey
int
SSL_use_PrivateKey_ASN1(pk,s,d,len)
int pk
SSL * s
unsigned char * d
long len
int
SSL_use_PrivateKey_file(s,file,type)
SSL * s
char * file
int type
int
SSL_CTX_use_PrivateKey_file(ctx,file,type)
SSL_CTX * ctx
char * file
int type
int
SSL_use_certificate(s,x)
SSL * s
X509 * x
int
SSL_use_certificate_ASN1(s,d,len)
SSL * s
unsigned char * d
long len
int
SSL_use_certificate_file(s,file,type)
SSL * s
char * file
int type
int
SSL_CTX_use_certificate_file(ctx,file,type)
SSL_CTX * ctx
char * file
int type
char *
SSL_state_string(s)
SSL * s
char *
SSL_rstate_string(s)
SSL * s
char *
SSL_state_string_long(s)
SSL * s
char *
SSL_rstate_string_long(s)
SSL * s
long
SSL_get_time(ses)
SSL_SESSION * ses
long
SSL_set_time(ses,t)
SSL_SESSION * ses
long t
long
SSL_get_timeout(ses)
SSL_SESSION * ses
long
SSL_set_timeout(ses,t)
SSL_SESSION * ses
long t
void
SSL_copy_session_id(to,from)
SSL * to
SSL * from
void
SSL_set_read_ahead(s,yes=1)
SSL * s
int yes
int
SSL_get_read_ahead(s)
SSL * s
int
SSL_pending(s)
SSL * s
int
SSL_CTX_set_cipher_list(s,str)
SSL_CTX * s
char * str
const char *
SSL_get_cipher_list(s,n)
SSL * s
int n
int
SSL_set_cipher_list(s,str)
SSL * s
char * str
const char *
SSL_get_cipher(s)
SSL * s
char *
SSL_get_shared_ciphers(s,buf,len)
SSL * s
char * buf
int len
X509 *
SSL_get_peer_certificate(s)
SSL * s
void
SSL_set_verify(s,mode,callback)
SSL * s
int mode
SV * callback
CODE:
if (ssleay_verify_callback == (SV*)NULL)
ssleay_verify_callback = newSVsv(callback);
else
SvSetSV (ssleay_verify_callback, callback);
if (SvTRUE(ssleay_verify_callback)) {
SSL_set_verify(s,mode,&ssleay_verify_callback_glue);
} else {
SSL_set_verify(s,mode,NULL);
}
void
SSL_set_bio(s,rbio,wbio)
SSL * s
BIO * rbio
BIO * wbio
BIO *
SSL_get_rbio(s)
SSL * s
BIO *
SSL_get_wbio(s)
SSL * s
SSL_SESSION *
SSL_SESSION_new()
int
SSL_SESSION_print(fp,ses)
BIO * fp
SSL_SESSION * ses
void
SSL_SESSION_free(ses)
SSL_SESSION * ses
int
i2d_SSL_SESSION(in,pp)
SSL_SESSION * in
unsigned char * &pp
int
SSL_set_session(to,ses)
SSL * to
SSL_SESSION * ses
SSL_SESSION *
d2i_SSL_SESSION(a,pp,length)
SSL_SESSION * &a
unsigned char * &pp
long length
#define REM30 "SSLeay-0.9.0 defines these as macros. I expand them here for safety's sake"
SSL_SESSION *
SSL_get_session(s)
SSL * s
X509 *
SSL_get_certificate(s)
SSL * s
SSL_CTX *
SSL_get_SSL_CTX(s)
SSL * s
long
SSL_ctrl(ssl,cmd,larg,parg)
SSL * ssl
int cmd
long larg
char * parg
long
SSL_CTX_ctrl(ctx,cmd,larg,parg)
SSL_CTX * ctx
int cmd
long larg
char * parg
long
SSL_get_options(ssl)
SSL * ssl
void
SSL_set_options(ssl,op)
SSL * ssl
unsigned long op
long
SSL_CTX_get_options(ctx)
SSL_CTX * ctx
void
SSL_CTX_set_options(ctx,op)
SSL_CTX * ctx
unsigned long op
LHASH *
SSL_CTX_sessions(ctx)
SSL_CTX * ctx
CODE:
/* NOTE: This should be deprecated. Corresponding macro was removed from ssl.h as of 0.9.2 */
if (ctx == NULL) croak("NULL SSL context passed as argument.");
RETVAL = ctx -> sessions;
OUTPUT:
RETVAL
unsigned long
SSL_CTX_sess_number(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_connect(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_connect_good(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_connect_renegotiate(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_accept(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_accept_renegotiate(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_accept_good(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_hits(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_cb_hits(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_misses(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_timeouts(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_cache_full(ctx)
SSL_CTX * ctx
int
SSL_CTX_sess_get_cache_size(ctx)
SSL_CTX * ctx
void
SSL_CTX_sess_set_cache_size(ctx,size)
SSL_CTX * ctx
int size
int
SSL_want(s)
SSL * s
int
SSL_state(s)
SSL * s
BIO_METHOD *
BIO_f_ssl()
BIO_METHOD *
BIO_s_mem()
unsigned long
ERR_get_error()
unsigned long
ERR_peek_error()
void
ERR_put_error(lib,func,reason,file,line)
int lib
int func
int reason
char * file
int line
void
ERR_clear_error()
char *
ERR_error_string(error,buf=NULL)
unsigned long error
char * buf
CODE:
RETVAL = ERR_error_string(error,buf);
OUTPUT:
RETVAL
void
SSL_load_error_strings()
void
ERR_load_crypto_strings()
void
SSLeay_add_ssl_algorithms()
void
ERR_load_SSL_strings()
void
ERR_load_RAND_strings()
int
RAND_bytes(buf, num)
SV *buf
int num
PREINIT:
int rc;
unsigned char *random;
CODE:
New(0, random, num, unsigned char);
rc = RAND_bytes(random, num);
sv_setpvn(buf, random, num);
Safefree(random);
RETVAL = rc;
OUTPUT:
RETVAL
int
RAND_pseudo_bytes(buf, num)
SV *buf
int num
PREINIT:
int rc;
unsigned char *random;
CODE:
New(0, random, num, unsigned char);
rc = RAND_pseudo_bytes(random, num);
sv_setpvn(buf, random, num);
Safefree(random);
RETVAL = rc;
OUTPUT:
RETVAL
void
RAND_add(buf, num, entropy)
SV *buf
int num
double entropy
PREINIT:
STRLEN len;
CODE:
RAND_add((const void *)SvPV(buf, len), num, entropy);
int
RAND_poll()
int
RAND_status()
int
RAND_egd_bytes(path, bytes)
const char *path
int bytes
SV *
RAND_file_name(num)
size_t num
PREINIT:
char *buf;
CODE:
New(0, buf, num, char);
if (!RAND_file_name(buf, num)) {
Safefree(buf);
XSRETURN_UNDEF;
}
RETVAL = newSVpv(buf, 0);
Safefree(buf);
OUTPUT:
RETVAL
void
RAND_seed(buf)
PREINIT:
STRLEN len;
INPUT:
char * buf = SvPV( ST(1), len);
CODE:
RAND_seed (buf, (int)len);
void
RAND_cleanup()
int
RAND_load_file(file_name, how_much)
char * file_name
int how_much
int
RAND_write_file(file_name)
char * file_name
int
RAND_egd(path)
char * path
#define REM40 "Minimal X509 stuff..., this is a bit ugly and should be put in its own modules Net::SSLeay::X509.pm"
X509_NAME*
X509_get_issuer_name(cert)
X509 * cert
X509_NAME*
X509_get_subject_name(cert)
X509 * cert
void
X509_NAME_oneline(name)
X509_NAME * name
PREINIT:
char buf[32768];
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
if (X509_NAME_oneline(name, buf, sizeof(buf)))
sv_setpvn( ST(0), buf, strlen(buf));
void
X509_NAME_get_text_by_NID(name,nid)
X509_NAME * name
int nid
PREINIT:
char buf[32768];
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
if (X509_NAME_get_text_by_NID(name, nid, buf, sizeof(buf)))
sv_setpvn( ST(0), buf, strlen(buf));
X509 *
X509_STORE_CTX_get_current_cert(x509_store_ctx)
X509_STORE_CTX * x509_store_ctx
void *
X509_STORE_CTX_get_ex_data(x509_store_ctx,idx)
X509_STORE_CTX * x509_store_ctx
int idx
int
X509_STORE_CTX_get_error(x509_store_ctx)
X509_STORE_CTX * x509_store_ctx
int
X509_STORE_CTX_get_error_depth(x509_store_ctx)
X509_STORE_CTX * x509_store_ctx
int
X509_STORE_CTX_set_ex_data(x509_store_ctx,idx,data)
X509_STORE_CTX * x509_store_ctx
int idx
void * data
void
X509_STORE_CTX_set_error(x509_store_ctx,s)
X509_STORE_CTX * x509_store_ctx
int s
void
X509_STORE_CTX_set_cert(x509_store_ctx,x)
X509_STORE_CTX * x509_store_ctx
X509 * x
int
X509_STORE_add_cert(ctx, x)
X509_STORE *ctx
X509 *x
int
X509_STORE_add_crl(ctx, x)
X509_STORE *ctx
X509_CRL *x
void
X509_STORE_CTX_set_flags(ctx, flags)
X509_STORE_CTX *ctx
long flags
int
X509_load_cert_file(ctx, file, type)
X509_LOOKUP *ctx
char *file
int type
int
X509_load_crl_file(ctx, file, type)
X509_LOOKUP *ctx
char *file
int type
int
X509_load_cert_crl_file(ctx, file, type)
X509_LOOKUP *ctx
char *file
int type
ASN1_UTCTIME *
X509_get_notBefore(cert)
X509 * cert
ASN1_UTCTIME *
X509_get_notAfter(cert)
X509 * cert
void
P_ASN1_UTCTIME_put2string(tm)
ASN1_UTCTIME * tm
PREINIT:
BIO *bp;
int i;
char buffer[256];
CODE:
bp = BIO_new(BIO_s_mem());
ASN1_UTCTIME_print(bp,tm);
i = BIO_read(bp,buffer,255);
buffer[i] = '\0';
ST(0) = sv_newmortal(); /* Undefined to start with */
if ( i > 0 )
sv_setpvn( ST(0), buffer, i );
BIO_free(bp);
int
EVP_PKEY_copy_parameters(to,from)
EVP_PKEY * to
EVP_PKEY * from
void
PEM_get_string_X509(x509)
X509 * x509
PREINIT:
BIO *bp;
int i;
char buffer[8196];
CODE:
bp = BIO_new(BIO_s_mem());
PEM_write_bio_X509(bp,x509);
i = BIO_read(bp,buffer,8195);
buffer[i] = '\0';
ST(0) = sv_newmortal(); /* Undefined to start with */
if ( i > 0 )
sv_setpvn( ST(0), buffer, i );
BIO_free(bp);
void
MD5(data)
PREINIT:
STRLEN len;
unsigned char md[MD5_DIGEST_LENGTH];
unsigned char * ret;
INPUT:
unsigned char * data = (unsigned char *) SvPV( ST(0), len);
CODE:
ret = MD5(data,len,md);
if (ret!=NULL) {
XSRETURN_PV((char *) md);
} else {
XSRETURN_UNDEF;
}
SSL_METHOD *
SSLv2_method()
SSL_METHOD *
SSLv3_method()
SSL_METHOD *
TLSv1_method()
int
SSL_set_ssl_method(ssl, method)
SSL * ssl
SSL_METHOD * method
SSL_METHOD *
SSL_get_ssl_method(ssl)
SSL * ssl
#define REM_AUTOMATICALLY_GENERATED_1_09
BIO *
BIO_new_buffer_ssl_connect(ctx)
SSL_CTX * ctx
BIO *
BIO_new_file(filename,mode)
char * filename
char * mode
BIO *
BIO_new_ssl(ctx,client)
SSL_CTX * ctx
int client
BIO *
BIO_new_ssl_connect(ctx)
SSL_CTX * ctx
BIO *
BIO_new(type)
BIO_METHOD * type;
int
BIO_free(bio)
BIO * bio;
void
BIO_read(s,max=sizeof(buf))
BIO * s
PREINIT:
char buf[32768];
INPUT:
int max
PREINIT:
int got;
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
if ((got = BIO_read(s, buf, max)) >= 0)
sv_setpvn( ST(0), buf, got);
int
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
char *
SSL_alert_desc_string(value)
int value
char *
SSL_alert_desc_string_long(value)
int value
char *
SSL_alert_type_string(value)
int value
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
char *
SSL_CIPHER_description(cipher,buf,size)
SSL_CIPHER * cipher
char * buf
int size
int
SSL_CIPHER_get_bits(c,alg_bits)
SSL_CIPHER * c
int * alg_bits
int
SSL_COMP_add_compression_method(id,cm)
int id
COMP_METHOD * cm
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,cb,arg)
SSL_CTX * ctx
callback_ret_int * cb
char * arg
void
SSL_CTX_set_client_CA_list(ctx,list)
SSL_CTX * ctx
X509_NAME_STACK * list
void
SSL_CTX_set_default_passwd_cb(ctx,cb)
SSL_CTX * ctx
SV * cb
CODE:
if (ssleay_ctx_set_default_passwd_cb_callback == (SV*)NULL) {
ssleay_ctx_set_default_passwd_cb_callback = newSVsv(cb);
} else {
SvSetSV (ssleay_ctx_set_default_passwd_cb_callback, cb);
}
if (SvTRUE(ssleay_ctx_set_default_passwd_cb_callback)) {
SSL_CTX_set_default_passwd_cb(ctx,&ssleay_ctx_set_default_passwd_cb_callback_glue);
} else {
SSL_CTX_set_default_passwd_cb(ctx,NULL);
}
void
SSL_CTX_set_default_passwd_cb_userdata(ctx,u)
SSL_CTX * ctx
void * u
int
SSL_CTX_set_ex_data(ssl,idx,data)
SSL_CTX * ssl
int idx
void * data
int
SSL_CTX_set_purpose(s,purpose)
SSL_CTX * s
int purpose
void
SSL_CTX_set_quiet_shutdown(ctx,mode)
SSL_CTX * ctx
int mode
int
SSL_CTX_set_ssl_version(ctx,meth)
SSL_CTX * ctx
SSL_METHOD * meth
long
SSL_CTX_set_timeout(ctx,t)
SSL_CTX * ctx
long t
int
SSL_CTX_set_trust(s,trust)
SSL_CTX * s
int trust
void
SSL_CTX_set_verify_depth(ctx,depth)
SSL_CTX * ctx
int depth
int
SSL_CTX_use_certificate(ctx,x)
SSL_CTX * ctx
X509 * x
int
SSL_CTX_use_certificate_chain_file(ctx,file)
SSL_CTX * ctx
const char * file
int
SSL_CTX_use_PrivateKey(ctx,pkey)
SSL_CTX * ctx
EVP_PKEY * pkey
int
SSL_CTX_use_RSAPrivateKey(ctx,rsa)
SSL_CTX * ctx
RSA * rsa
int
SSL_do_handshake(s)
SSL * s
SSL *
SSL_dup(ssl)
SSL * ssl
SSL_CIPHER *
SSL_get_current_cipher(s)
SSL * s
long
SSL_get_default_timeout(s)
SSL * s
void *
SSL_get_ex_data(ssl,idx)
SSL * ssl
int idx
size_t
SSL_get_finished(s,buf,count)
SSL * s
void * buf
size_t count
size_t
SSL_get_peer_finished(s,buf,count)
SSL * s
void * buf
size_t count
int
SSL_get_quiet_shutdown(ssl)
SSL * ssl
int
SSL_get_shutdown(ssl)
SSL * ssl
int
SSL_get_verify_depth(s)
SSL * s
int
SSL_get_verify_mode(s)
SSL * s
long
SSL_get_verify_result(ssl)
SSL * ssl
int
SSL_library_init()
int
SSL_renegotiate(s)
SSL * s
int
SSL_SESSION_cmp(a,b)
SSL_SESSION * a
SSL_SESSION * b
void *
SSL_SESSION_get_ex_data(ss,idx)
SSL_SESSION * ss
int idx
long
SSL_SESSION_get_time(s)
SSL_SESSION * s
long
SSL_SESSION_get_timeout(s)
SSL_SESSION * s
int
SSL_SESSION_print_fp(fp,ses)
FILE * fp
SSL_SESSION * ses
int
SSL_SESSION_set_ex_data(ss,idx,data)
SSL_SESSION * ss
int idx
void * data
long
SSL_SESSION_set_time(s,t)
SSL_SESSION * s
long t
long
SSL_SESSION_set_timeout(s,t)
SSL_SESSION * s
long t
void
SSL_set_accept_state(s)
SSL * s
void
SSL_set_client_CA_list(s,list)
SSL * s
X509_NAME_STACK * list
void
SSL_set_connect_state(s)
SSL * s
int
SSL_set_ex_data(ssl,idx,data)
SSL * ssl
int idx
void * data
void
SSL_set_info_callback(ssl,cb)
SSL * ssl
callback_no_ret * cb
int
SSL_set_purpose(s,purpose)
SSL * s
int purpose
void
SSL_set_quiet_shutdown(ssl,mode)
SSL * ssl
int mode
void
SSL_set_shutdown(ssl,mode)
SSL * ssl
int mode
int
SSL_set_trust(s,trust)
SSL * s
int trust
void
SSL_set_verify_depth(s,depth)
SSL * s
int depth
void
SSL_set_verify_result(ssl,v)
SSL * ssl
long v
int
SSL_shutdown(s)
SSL * s
int
SSL_version(ssl)
SSL * ssl
#define REM_MANUALLY_ADDED_1_09
X509_NAME_STACK *
SSL_load_client_CA_file(file)
const char * file
int
SSL_add_file_cert_subjects_to_stack(stackCAs,file)
X509_NAME_STACK * stackCAs
const char * file
#ifndef WIN32
#ifndef VMS
#ifndef MAC_OS_pre_X
int
SSL_add_dir_cert_subjects_to_stack(stackCAs,dir)
X509_NAME_STACK * stackCAs
const char * dir
#endif
#endif
#endif
int
SSL_CTX_get_ex_new_index(argl,argp,new_func,dup_func,free_func)
long argl
void * argp
CRYPTO_EX_new * new_func
CRYPTO_EX_dup * dup_func
CRYPTO_EX_free * free_func
int
SSL_CTX_set_session_id_context(ctx,sid_ctx,sid_ctx_len)
SSL_CTX * ctx
const unsigned char * sid_ctx
unsigned int sid_ctx_len
int
SSL_set_session_id_context(ssl,sid_ctx,sid_ctx_len)
SSL * ssl
const unsigned char * sid_ctx
unsigned int sid_ctx_len
void
SSL_CTX_set_tmp_rsa_callback(ctx, cb)
SSL_CTX * ctx
cb_ssl_int_int_ret_RSA * cb
void
SSL_set_tmp_rsa_callback(ssl, cb)
SSL * ssl
cb_ssl_int_int_ret_RSA * cb
void
SSL_CTX_set_tmp_dh_callback(ctx, dh)
SSL_CTX * ctx
cb_ssl_int_int_ret_DH * dh
void
SSL_set_tmp_dh_callback(ssl,dh)
SSL * ssl
cb_ssl_int_int_ret_DH * dh
int
SSL_get_ex_new_index(argl, argp, new_func, dup_func, free_func)
long argl
void * argp
CRYPTO_EX_new * new_func
CRYPTO_EX_dup * dup_func
CRYPTO_EX_free * free_func
int
SSL_SESSION_get_ex_new_index(argl, argp, new_func, dup_func, free_func)
long argl
void * argp
CRYPTO_EX_new * new_func
CRYPTO_EX_dup * dup_func
CRYPTO_EX_free * free_func
#define REM_SEMIAUTOMATIC_MACRO_GEN_1_09
int
OpenSSL_add_ssl_algorithms()
CODE:
RETVAL = SSL_library_init();
OUTPUT:
RETVAL
long
SSL_clear_num_renegotiations(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_add_extra_chain_cert(ctx,x509)
SSL_CTX * ctx
X509 * x509
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char*)x509);
OUTPUT:
RETVAL
void *
SSL_CTX_get_app_data(ctx)
SSL_CTX * ctx
CODE:
RETVAL = SSL_CTX_get_ex_data(ctx,0);
OUTPUT:
RETVAL
long
SSL_CTX_get_mode(ctx)
SSL_CTX * ctx
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_MODE,0,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_get_read_ahead(ctx)
SSL_CTX * ctx
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_get_session_cache_mode(ctx)
SSL_CTX * ctx
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_need_tmp_RSA(ctx)
SSL_CTX * ctx
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL);
OUTPUT:
RETVAL
int
SSL_CTX_set_app_data(ctx,arg)
SSL_CTX * ctx
char * arg
CODE:
RETVAL = SSL_CTX_set_ex_data(ctx,0,arg);
OUTPUT:
RETVAL
long
SSL_CTX_set_mode(ctx,op)
SSL_CTX * ctx
long op
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_MODE,op,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_set_read_ahead(ctx,m)
SSL_CTX * ctx
long m
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_set_session_cache_mode(ctx,m)
SSL_CTX * ctx
long m
CODE:
RETVAL = SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL);
OUTPUT:
RETVAL
long
SSL_CTX_set_tmp_dh(ctx,dh)
SSL_CTX * ctx
DH * dh
long
SSL_CTX_set_tmp_rsa(ctx,rsa)
SSL_CTX * ctx
RSA * rsa
void *
SSL_get_app_data(s)
SSL * s
CODE:
RETVAL = SSL_get_ex_data(s,0);
OUTPUT:
RETVAL
int
SSL_get_cipher_bits(s,np)
SSL * s
int * np
CODE:
RETVAL = SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np);
OUTPUT:
RETVAL
long
SSL_get_mode(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_MODE,0,NULL);
OUTPUT:
RETVAL
int
SSL_get_state(ssl)
SSL * ssl
CODE:
RETVAL = SSL_state(ssl);
OUTPUT:
RETVAL
long
SSL_need_tmp_RSA(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL);
OUTPUT:
RETVAL
long
SSL_num_renegotiations(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL);
OUTPUT:
RETVAL
void *
SSL_SESSION_get_app_data(ses)
SSL_SESSION * ses
CODE:
RETVAL = SSL_SESSION_get_ex_data(ses,0);
OUTPUT:
RETVAL
long
SSL_session_reused(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_GET_SESSION_REUSED,0,NULL);
OUTPUT:
RETVAL
int
SSL_SESSION_set_app_data(s,a)
SSL_SESSION * s
void * a
CODE:
RETVAL = SSL_SESSION_set_ex_data(s,0,(char *)a);
OUTPUT:
RETVAL
int
SSL_set_app_data(s,arg)
SSL * s
void * arg
CODE:
RETVAL = SSL_set_ex_data(s,0,(char *)arg);
OUTPUT:
RETVAL
long
SSL_set_mode(ssl,op)
SSL * ssl
long op
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_MODE,op,NULL);
OUTPUT:
RETVAL
int
SSL_set_pref_cipher(s,n)
SSL * s
const char * n
CODE:
RETVAL = SSL_set_cipher_list(s,n);
OUTPUT:
RETVAL
long
SSL_set_tmp_dh(ssl,dh)
SSL * ssl
char * dh
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh);
OUTPUT:
RETVAL
long
SSL_set_tmp_rsa(ssl,rsa)
SSL * ssl
char * rsa
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa);
OUTPUT:
RETVAL
RSA *
RSA_generate_key(bits,e,callback=NULL,cb_arg=NULL)
int bits
unsigned long e
void * callback
void * cb_arg
void
RSA_free(r)
RSA * r
void
X509_free(a)
X509 * a
DH *
PEM_read_bio_DHparams(bio,x=NULL,cb=NULL,u=NULL)
BIO * bio
void * x
void * cb
void * u
X509_CRL *
PEM_read_bio_X509_CRL(bio,x=NULL,cb=NULL,u=NULL)
BIO * bio
void * x
void * cb
void * u
void
DH_free(dh)
DH * dh
long
SSL_total_renegotiations(ssl)
SSL * ssl
CODE:
RETVAL = SSL_ctrl(ssl,SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL);
OUTPUT:
RETVAL
void
SSL_SESSION_get_master_key(s)
SSL_SESSION * s
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
sv_setpvn(ST(0), s->master_key, s->master_key_length);
void
SSL_get_client_random(s)
SSL * s
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
sv_setpvn(ST(0), s->s3->client_random, SSL3_RANDOM_SIZE);
void
SSL_get_server_random(s)
SSL * s
CODE:
ST(0) = sv_newmortal(); /* Undefined to start with */
sv_setpvn(ST(0), s->s3->server_random, SSL3_RANDOM_SIZE);
#define REM_EOF "/* EOF - SSLeay.xs */"