diff options
-rw-r--r-- | STATUS | 18 | ||||
-rw-r--r-- | perl/MANIFEST | 17 | ||||
-rw-r--r-- | perl/Makefile.PL | 45 | ||||
-rw-r--r-- | perl/OpenSSL.pm | 90 | ||||
-rw-r--r-- | perl/OpenSSL.xs | 109 | ||||
-rw-r--r-- | perl/README.1ST | 4 | ||||
-rw-r--r-- | perl/openssl.h | 96 | ||||
-rw-r--r-- | perl/openssl_bio.xs | 450 | ||||
-rw-r--r-- | perl/openssl_bn.xs | 593 | ||||
-rw-r--r-- | perl/openssl_cipher.xs | 154 | ||||
-rw-r--r-- | perl/openssl_digest.xs | 85 | ||||
-rw-r--r-- | perl/openssl_err.xs | 47 | ||||
-rw-r--r-- | perl/openssl_ssl.xs | 483 | ||||
-rw-r--r-- | perl/openssl_x509.xs | 75 | ||||
-rw-r--r-- | perl/t/01-use.t | 13 | ||||
-rw-r--r-- | perl/t/02-version.t | 10 | ||||
-rw-r--r-- | perl/t/03-bio.t | 16 | ||||
-rw-r--r-- | perl/typemap | 96 |
18 files changed, 1 insertions, 2400 deletions
@@ -1,6 +1,6 @@ OpenSSL STATUS Last modified at - ______________ $Date: 2002/02/28 12:42:00 $ + ______________ $Date: 2002/02/28 22:07:50 $ DEVELOPMENT STATE @@ -91,22 +91,6 @@ which apparently is not flexible enough to generate libcrypto) - - o The perl/ stuff needs a major overhaul. Currently it's - totally obsolete. Either we clean it up and enhance it to be up-to-date - with the C code or we also could replace it with the really nice - Net::SSLeay package we can find under - http://www.neuronio.pt/SSLeay.pm.html. Ralf uses this package for a - longer time and it works fine and is a nice Perl module. Best would be - to convince the author to work for the OpenSSL project and create a - Net::OpenSSL or Crypt::OpenSSL package out of it and maintains it for - us. - - Status: Ralf thinks we should both contact the author of Net::SSLeay - and look how much effort it is to bring Eric's perl/ stuff up - to date. - Paul +1 - WISHES o Add variants of DH_generate_parameters() and BN_generate_prime() [etc?] diff --git a/perl/MANIFEST b/perl/MANIFEST deleted file mode 100644 index 80c900769d..0000000000 --- a/perl/MANIFEST +++ /dev/null @@ -1,17 +0,0 @@ -README.1ST -MANIFEST -Makefile.PL -typemap -OpenSSL.pm -OpenSSL.xs -openssl.h -openssl_bio.xs -openssl_bn.xs -openssl_cipher.xs -openssl_digest.xs -openssl_err.xs -openssl_ssl.xs -openssl_x509.xs -t/01-use.t -t/02-version.t -t/03-bio.t diff --git a/perl/Makefile.PL b/perl/Makefile.PL deleted file mode 100644 index 2a67ad061d..0000000000 --- a/perl/Makefile.PL +++ /dev/null @@ -1,45 +0,0 @@ -## -## Makefile.PL -- Perl MakeMaker specification -## - -open(IN,"<../Makefile.ssl") || die "unable to open Makefile.ssl!\n"; -while(<IN>) { - $V=$1 if (/^VERSION=(.*)$/); -} -close(IN); -print "Configuring companion Perl module for OpenSSL $V\n"; - -use ExtUtils::MakeMaker; - -WriteMakefile( - 'OPTIMIZE' => '', - 'DISTNAME' => "openssl-$V", - 'NAME' => 'OpenSSL', - 'VERSION_FROM' => 'OpenSSL.pm', - 'LIBS' => ( $^O eq 'MSWin32' - ? [ '-L../out32dll -lssleay32 -llibeay32' ] - : [ '-L.. -lssl -lcrypto' ] ), - 'DEFINE' => '', - 'INC' => '-I../include', - 'H' => ['openssl.h'], - 'OBJECT' => - 'OpenSSL.o ' . - 'openssl_bio.o ' . - 'openssl_bn.o ' . - 'openssl_cipher.o ' . - 'openssl_digest.o ' . - 'openssl_err.o ' . - 'openssl_ssl.o ' . - 'openssl_x509.o ', - 'XS' => { - 'OpenSSL.xs' => 'OpenSSL.c', - 'openssl_bio.xs' => 'openssl_bio.c', - 'openssl_bn.xs' => 'openssl_bn.c', - 'openssl_cipher.xs' => 'openssl_cipher.c', - 'openssl_digest.xs' => 'openssl_digest.c', - 'openssl_err.xs' => 'openssl_err.c', - 'openssl_ssl.xs' => 'openssl_ssl.c', - 'openssl_x509.xs' => 'openssl_x509.c', - }, -); - diff --git a/perl/OpenSSL.pm b/perl/OpenSSL.pm deleted file mode 100644 index ae7265a21d..0000000000 --- a/perl/OpenSSL.pm +++ /dev/null @@ -1,90 +0,0 @@ -## -## OpenSSL.pm -## - -package OpenSSL; - -require 5.000; -use Exporter; -use DynaLoader; - -@ISA = qw(Exporter DynaLoader); -@EXPORT = qw(); - -$VERSION = '0.94'; -bootstrap OpenSSL; - -@OpenSSL::BN::ISA = qw(OpenSSL::ERR); -@OpenSSL::MD::ISA = qw(OpenSSL::ERR); -@OpenSSL::Cipher::ISA = qw(OpenSSL::ERR); -@OpenSSL::SSL::CTX::ISA = qw(OpenSSL::ERR); -@OpenSSL::BIO::ISA = qw(OpenSSL::ERR); -@OpenSSL::SSL::ISA = qw(OpenSSL::ERR); - -@BN::ISA = qw(OpenSSL::BN); -@MD::ISA = qw(OpenSSL::MD); -@Cipher::ISA = qw(OpenSSL::Cipher); -@SSL::ISA = qw(OpenSSL::SSL); -@SSL::CTX::ISA = qw(OpenSSL::SSL::CTX); -@BIO::ISA = qw(OpenSSL::BIO); - -@OpenSSL::MD::names = qw( - md2 md5 sha sha1 ripemd160 mdc2 -); - -@OpenSSL::Cipher::names = qw( - des-ecb des-cfb des-ofb des-cbc - des-ede des-ede-cfb des-ede-ofb des-ede-cbc - des-ede3 des-ede3-cfb des-ede3-ofb des-ede3-cbc - desx-cbc rc4 rc4-40 - idea-ecb idea-cfb idea-ofb idea-cbc - rc2-ecb rc2-cbc rc2-40-cbc rc2-cfb rc2-ofb - bf-ecb bf-cfb bf-ofb bf-cbc - cast5-ecb cast5-cfb cast5-ofb cast5-cbc - rc5-ecb rc5-cfb rc5-ofb rc5-cbc -); - -sub OpenSSL::SSL::CTX::new_ssl { - OpenSSL::SSL::new($_[0]); -} - -sub OpenSSL::ERR::error { - my($o) = @_; - my($s, $ret); - - while (($s = $o->get_error()) != 0) { - $ret.=$s."\n"; - } - return($ret); -} - -@OpenSSL::Cipher::aliases = qw( - des desx des3 idea rc2 bf cast -); - -package OpenSSL::BN; - -sub bnfix { - (ref($_[0]) ne "OpenSSL::BN") ? OpenSSL::BN::dec2bn($_[0]) : $_[0]; -} - -use overload -"=" => sub { dup($_[0]); }, -"+" => sub { add($_[0],$_[1]); }, -"-" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; OpenSSL::BN::sub($_[0],$_[1]); }, -"*" => sub { mul($_[0],$_[1]); }, -"**" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; OpenSSL::BN::exp($_[0],$_[1]); }, -"/" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; (div($_[0],$_[1]))[0]; }, -"%" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; mod($_[0],$_[1]); }, -"<<" => sub { lshift($_[0],$_[1]); }, -">>" => sub { rshift($_[0],$_[1]); }, -"<=>" => sub { OpenSSL::BN::cmp($_[0],$_[1]); }, -'""' => sub { bn2dec($_[0]); }, -'0+' => sub { dec2bn($_[0]); }, -"bool" => sub { ref($_[0]) eq "OpenSSL::BN"; }; - -sub OpenSSL::BIO::do_accept { - OpenSSL::BIO::do_handshake(@_); -} - -1; diff --git a/perl/OpenSSL.xs b/perl/OpenSSL.xs deleted file mode 100644 index 6ef66ccc1e..0000000000 --- a/perl/OpenSSL.xs +++ /dev/null @@ -1,109 +0,0 @@ -/* -** OpenSSL.xs -*/ - -#include "openssl.h" - -SV * -new_ref(type, obj, mort) - char *type; - char *obj; -{ - SV *ret; - - if (mort) - ret = sv_newmortal(); - else - ret = newSViv(0); -#ifdef DEBUG - printf(">new_ref %d\n",type); -#endif - sv_setref_pv(ret, type, (void *)obj); - return(ret); -} - -int -ex_new(obj, data, ad, idx, argl, argp) - char *obj; - SV *data; - CRYPTO_EX_DATA *ad; - int idx; - long argl; - char *argp; -{ - SV *sv; - -#ifdef DEBUG - printf("ex_new %08X %s\n",obj,argp); -#endif - sv = sv_newmortal(); - sv_setref_pv(sv, argp, (void *)obj); -#ifdef DEBUG - printf("%d>new_ref '%s'\n", sv, argp); -#endif - CRYPTO_set_ex_data(ad, idx, (char *)sv); - return(1); -} - -void -ex_cleanup(obj, data, ad, idx, argl, argp) - char *obj; - SV *data; - CRYPTO_EX_DATA *ad; - int idx; - long argl; - char *argp; -{ - pr_name("ex_cleanup"); -#ifdef DEBUG - printf("ex_cleanup %08X %s\n", obj, argp); -#endif - if (data != NULL) - SvREFCNT_dec((SV *)data); -} - -MODULE = OpenSSL PACKAGE = OpenSSL - -PROTOTYPES: ENABLE - -BOOT: - boot_bio(); - boot_cipher(); - boot_digest(); - boot_err(); - boot_ssl(); - - /* */ - /* The next macro is the completely correct way to call a C */ - /* function that uses perl calling conventions but is not */ - /* registered with perl. */ - /* */ - /* The second macro seems to work for this context. (We just */ - /* need a mark for the called function since we don't have */ - /* any local variables and what-not.) */ - /* */ - /* Unfortunately, we need to do this because these boot_* */ - /* functions are auto-generated by xsubpp and are normally */ - /* called from DyncLoader, but we're pulling them in here. */ - /* */ -#define FULL_callBootFunc(func) { \ - dSP; \ - ENTER; \ - SAVETMPS; \ - PUSHMARK(SP); \ - func(); \ - FREETMPS; \ - LEAVE; \ - } -#define callBootFunc(func) { \ - PUSHMARK(SP); \ - func(); \ - } - callBootFunc(boot_OpenSSL__BN); - callBootFunc(boot_OpenSSL__BIO); - callBootFunc(boot_OpenSSL__Cipher); - callBootFunc(boot_OpenSSL__MD); - callBootFunc(boot_OpenSSL__ERR); - callBootFunc(boot_OpenSSL__SSL); - callBootFunc(boot_OpenSSL__X509); - diff --git a/perl/README.1ST b/perl/README.1ST deleted file mode 100644 index 7b5a1aa5e9..0000000000 --- a/perl/README.1ST +++ /dev/null @@ -1,4 +0,0 @@ - - WARNING, this Perl interface to OpenSSL is horrible incomplete. - Don't expect it to be really useable!! - diff --git a/perl/openssl.h b/perl/openssl.h deleted file mode 100644 index 2712324a30..0000000000 --- a/perl/openssl.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -#ifdef __cplusplus -} -#endif - -typedef struct datum_st { - char *dptr; - int dsize; -} datum; - -#include <openssl/crypto.h> -#include <openssl/buffer.h> -#include <openssl/bio.h> -#include <openssl/evp.h> -#include <openssl/err.h> -#include <openssl/x509.h> -#include <openssl/ssl.h> - -#ifdef DEBUG -#define pr_name(name) printf("%s\n",name) -#define pr_name_d(name,p2) printf("%s %d\n",name,p2) -#define pr_name_dd(name,p2,p3) printf("%s %d %d\n",name,p2,p3) -#else -#define pr_name(name) -#define pr_name_d(name,p2) -#define pr_name_dd(name,p2,p3) -#endif - -SV *new_ref(char *type, char *obj, int mort); -int ex_new(char *obj, SV *data, CRYPTO_EX_DATA *ad, int idx, long argl, char *argp); -void ex_cleanup(char *obj, SV *data, CRYPTO_EX_DATA *ad, int idx, long argl, char *argp); - diff --git a/perl/openssl_bio.xs b/perl/openssl_bio.xs deleted file mode 100644 index 5628300d0b..0000000000 --- a/perl/openssl_bio.xs +++ /dev/null @@ -1,450 +0,0 @@ - -#include "openssl.h" - -static int p5_bio_ex_bio_ptr = 0; -static int p5_bio_ex_bio_callback = 0; -static int p5_bio_ex_bio_callback_data = 0; - -static long -p5_bio_callback(bio,state,parg,cmd,larg,ret) - BIO *bio; - int state; - char *parg; - int cmd; - long larg; - int ret; -{ - int i; - SV *me,*cb; - - me = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - cb = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_callback); - if (cb != NULL) { - dSP; - - ENTER; - SAVETMPS; - - PUSHMARK(sp); - XPUSHs(sv_2mortal(newSVsv(me))); - XPUSHs(sv_2mortal(newSViv(state))); - XPUSHs(sv_2mortal(newSViv(cmd))); - if ((state == BIO_CB_READ) || (state == BIO_CB_WRITE)) - XPUSHs(sv_2mortal(newSVpv(parg,larg))); - else - XPUSHs(&PL_sv_undef); - /* ptr one */ - XPUSHs(sv_2mortal(newSViv(larg))); - XPUSHs(sv_2mortal(newSViv(ret))); - PUTBACK; - - i = perl_call_sv(cb,G_SCALAR); - - SPAGAIN; - if (i == 1) - ret = POPi; - else - ret = 1; - PUTBACK; - FREETMPS; - LEAVE; - } - else { - croak("Internal error in p5_bio_callback"); - } - return(ret); -} - -int -boot_bio(void) -{ - p5_bio_ex_bio_ptr = BIO_get_ex_new_index(0, "OpenSSL::BIO", ex_new, NULL, ex_cleanup); - p5_bio_ex_bio_callback = BIO_get_ex_new_index(0, "bio_callback", NULL, NULL, ex_cleanup); - p5_bio_ex_bio_callback_data = BIO_get_ex_new_index(0, "bio_callback_data", NULL, NULL, ex_cleanup); - return(1); -} - -MODULE = OpenSSL::BIO PACKAGE = OpenSSL::BIO PREFIX = p5_BIO_ - -PROTOTYPES: ENABLE -VERSIONCHECK: DISABLE - -void -p5_BIO_new_buffer_ssl_connect(...) - PROTOTYPE: ;$ - PREINIT: - SSL_CTX *ctx; - BIO *bio; - SV *arg; - PPCODE: - if (items == 1) - arg = ST(0); - else if (items == 2) - arg = ST(1); - else - arg = NULL; - if ((arg == NULL) || !(sv_derived_from(arg,"OpenSSL::SSL::CTX"))) - croak("Usage: OpenSSL::BIO::new_buffer_ssl_connect(SSL_CTX)"); - else { - IV tmp = SvIV((SV *)SvRV(arg)); - ctx = (SSL_CTX *)tmp; - } - EXTEND(sp, 1); - bio = BIO_new_buffer_ssl_connect(ctx); - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - PUSHs(arg); - -void -p5_BIO_new_ssl_connect(...) - PROTOTYPE: ;$ - PREINIT: - SSL_CTX *ctx; - BIO *bio; - SV *arg; - PPCODE: - if (items == 1) - arg = ST(0); - else if (items == 2) - arg = ST(1); - else - arg = NULL; - if ((arg == NULL) || !(sv_derived_from(arg,"OpenSSL::SSL::CTX"))) - croak("Usage: OpenSSL::BIO::new_ssl_connect(SSL_CTX)"); - else { - IV tmp = SvIV((SV *)SvRV(arg)); - ctx = (SSL_CTX *)tmp; - } - EXTEND(sp,1); - bio = BIO_new_ssl_connect(ctx); - arg = (SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); - PUSHs(arg); - -void -p5_BIO_new(...) - PROTOTYPE: ;$ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - pr_name("p5_BIO_new"); - if ((items == 1) && SvPOK(ST(0))) - type = SvPV_nolen(ST(0)); - else if ((items == 2) && SvPOK(ST(1))) - type = SvPV_nolen(ST(1)); - else - croak("Usage: OpenSSL::BIO::new(type)"); - EXTEND(sp,1); - if (strcmp(type, "mem") == 0) - bio=BIO_new(BIO_s_mem()); - else if (strcmp(type, "socket") == 0) - bio=BIO_new(BIO_s_socket()); - else if (strcmp(type, "connect") == 0) - bio=BIO_new(BIO_s_connect()); - else if (strcmp(type, "accept") == 0) - bio=BIO_new(BIO_s_accept()); - else if (strcmp(type, "fd") == 0) - bio=BIO_new(BIO_s_fd()); - else if (strcmp(type, "file") == 0) - bio=BIO_new(BIO_s_file()); - else if (strcmp(type, "null") == 0) - bio=BIO_new(BIO_s_null()); - else if (strcmp(type, "ssl") == 0) - bio=BIO_new(BIO_f_ssl()); - else if (strcmp(type, "buffer") == 0) - bio=BIO_new(BIO_f_buffer()); - else - croak("unknown BIO type"); - arg = (SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); - PUSHs(arg); - -int -p5_BIO_hostname(bio, name) - BIO *bio; - char *name; - PROTOTYPE: $$ - CODE: - RETVAL = BIO_set_conn_hostname(bio, name); - OUTPUT: - RETVAL - -int -p5_BIO_set_accept_port(bio, str) - BIO *bio; - char *str; - PROTOTYPE: $$ - CODE: - RETVAL = BIO_set_accept_port(bio, str); - OUTPUT: - RETVAL - -int -p5_BIO_do_handshake(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_do_handshake(bio); - OUTPUT: - RETVAL - -BIO * -p5_BIO_push(b, bio) - BIO *b; - BIO *bio; - PROTOTYPE: $$ - CODE: - /* This reference will be reduced when the reference is - * let go, and then when the BIO_free_all() is called - * inside the OpenSSL library by the BIO with this - * pushed into */ - bio->references++; - RETVAL = BIO_push(b, bio); - OUTPUT: - RETVAL - -void -p5_BIO_pop(b) - BIO *b - PROTOTYPE: $ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - bio = BIO_pop(b); - if (bio != NULL) { - /* This BIO will either be one created in the - * perl library, in which case it will have a perl - * SV, otherwise it will have been created internally, - * inside OpenSSL. For the 'pushed in', it needs - * the reference count decremented. */ - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - if (arg == NULL) { - arg = new_ref("OpenSSL::BIO",(char *)bio,0); - BIO_set_ex_data(bio, p5_bio_ex_bio_ptr, (char *)arg); - PUSHs(arg); - } - else { - /* it was pushed in */ - SvREFCNT_inc(arg); - PUSHs(arg); - } - } - -int -p5_BIO_sysread(bio, in, num, ...) - BIO *bio; - SV *in; - int num; - PROTOTYPE: $$$; - PREINIT: - int i,n,olen; - int offset; - char *p; - CODE: - offset = 0; - if (!SvPOK(in)) - sv_setpvn(in, "", 0); - SvPV(in, olen); - if (items > 3) { - offset = SvIV(ST(3)); - if (offset < 0) { - if (-offset > olen) - croak("Offset outside string"); - offset+=olen; - } - } - if ((num+offset) > olen) { - SvGROW(in, num+offset+1); - p=SvPV(in, i); - memset(&(p[olen]), 0, (num+offset)-olen+1); - } - p = SvPV(in,n); - i = BIO_read(bio, p+offset, num); - RETVAL = i; - if (i <= 0) - i = 0; - SvCUR_set(in, offset+i); - OUTPUT: - RETVAL - -int -p5_BIO_syswrite(bio, in, ...) - BIO *bio; - SV *in; - PROTOTYPE: $$; - PREINIT: - char *ptr; - int len,in_len; - int offset=0; - int n; - CODE: - ptr = SvPV(in, in_len); - if (items > 2) { - len = SvOK(ST(2)) ? SvIV(ST(2)) : in_len; - if (items > 3) { - offset = SvIV(ST(3)); - if (offset < 0) { - if (-offset > in_len) - croak("Offset outside string"); - offset+=in_len; - } - else if ((offset >= in_len) && (in_len > 0)) - croak("Offset outside string"); - } - if (len >= (in_len-offset)) - len = in_len-offset; - } - else - len = in_len; - RETVAL = BIO_write(bio, ptr+offset, len); - OUTPUT: - RETVAL - -void -p5_BIO_getline(bio) - BIO *bio; - PROTOTYPE: $ - PREINIT: - int i; - char *p; - PPCODE: - pr_name("p5_BIO_gets"); - EXTEND(sp, 1); - PUSHs(sv_newmortal()); - sv_setpvn(ST(0), "", 0); - SvGROW(ST(0), 1024); - p=SvPV_nolen(ST(0)); - i = BIO_gets(bio, p, 1024); - if (i < 0) - i = 0; - SvCUR_set(ST(0), i); - -int -p5_BIO_flush(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_flush(bio); - OUTPUT: - RETVAL - -char * -p5_BIO_type(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = bio->method->name; - OUTPUT: - RETVAL - -void -p5_BIO_next_bio(b) - BIO *b - PROTOTYPE: $ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - bio = b->next_bio; - if (bio != NULL) { - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - if (arg == NULL) { - arg = new_ref("OpenSSL::BIO", (char *)bio, 0); - BIO_set_ex_data(bio, p5_bio_ex_bio_ptr, (char *)arg); - bio->references++; - PUSHs(arg); - } - else { - SvREFCNT_inc(arg); - PUSHs(arg); - } - } - -int -p5_BIO_puts(bio, in) - BIO *bio; - SV *in; - PROTOTYPE: $$ - PREINIT: - char *ptr; - CODE: - ptr = SvPV_nolen(in); - RETVAL = BIO_puts(bio, ptr); - OUTPUT: - RETVAL - -void -p5_BIO_set_callback(bio, cb,...) - BIO *bio; - SV *cb; - PROTOTYPE: $$; - PREINIT: - SV *arg = NULL; - SV *arg2 = NULL; - CODE: - if (items > 3) - croak("Usage: OpenSSL::BIO::set_callback(bio,callback[,arg]"); - if (items == 3) { - arg2 = sv_mortalcopy(ST(2)); - SvREFCNT_inc(arg2); - BIO_set_ex_data(bio, p5_bio_ex_bio_callback_data, (char *)arg2); - } - arg = sv_mortalcopy(ST(1)); - SvREFCNT_inc(arg); - BIO_set_ex_data(bio, p5_bio_ex_bio_callback, (char *)arg); - /* printf("%08lx < bio_ptr\n",BIO_get_ex_data(bio,p5_bio_ex_bio_ptr)); */ - BIO_set_callback(bio, p5_bio_callback); - -void -p5_BIO_DESTROY(bio) - BIO *bio - PROTOTYPE: $ - PREINIT: - SV *sv; - PPCODE: - pr_name_d("p5_BIO_DESTROY",bio->references); - /* printf("p5_BIO_DESTROY <%s> %d\n",bio->method->name,bio->references); */ - BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,NULL); - BIO_free_all(bio); - -int -p5_BIO_set_ssl(bio, ssl) - BIO *bio; - SSL *ssl; - PROTOTYPE: $$ - CODE: - pr_name("p5_BIO_set_ssl"); - ssl->references++; - RETVAL = BIO_set_ssl(bio, ssl, BIO_CLOSE); - OUTPUT: - RETVAL - -int -p5_BIO_number_read(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_number_read(bio); - OUTPUT: - RETVAL - -int -p5_BIO_number_written(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_number_written(bio); - OUTPUT: - RETVAL - -int -p5_BIO_references(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = bio->references; - OUTPUT: - RETVAL - diff --git a/perl/openssl_bn.xs b/perl/openssl_bn.xs deleted file mode 100644 index 6817cfb740..0000000000 --- a/perl/openssl_bn.xs +++ /dev/null @@ -1,593 +0,0 @@ - -#include "openssl.h" - -int sv_to_BIGNUM(var,arg,name) -BIGNUM **var; -SV *arg; -char *name; - { - int ret=1; - - if (sv_derived_from(arg,"OpenSSL::BN")) - { - IV tmp = SvIV((SV*)SvRV(arg)); - *var = (BIGNUM *) tmp; - } - else if (SvIOK(arg)) { - SV *tmp=sv_newmortal(); - *var=BN_new(); - BN_set_word(*var,SvIV(arg)); - sv_setref_pv(tmp,"OpenSSL::BN",(void*)*var); - } - else if (SvPOK(arg)) { - char *ptr; - STRLEN len; - SV *tmp=sv_newmortal(); - *var=BN_new(); - sv_setref_pv(tmp,"OpenSSL::BN", (void*)*var); - ptr=SvPV(arg,len); - SvGROW(arg,len+1); - ptr[len]='\0'; - BN_dec2bn(var,ptr); - } - else - { - croak(name); - ret=0; - } - return(ret); - } - -typedef struct gpc_args_st { - SV *cb; - SV *arg; - } GPC_ARGS; - -static void generate_prime_callback(pos,num,arg) -int pos; -int num; -char *arg; - { - dSP ; - int i; - GPC_ARGS *a=(GPC_ARGS *)arg; - - ENTER ; - SAVETMPS ; - - PUSHMARK(sp); - XPUSHs(sv_2mortal(newSViv(pos))); - XPUSHs(sv_2mortal(newSViv(num))); - XPUSHs(sv_2mortal(newSVsv(a->arg))); - PUTBACK; - - i=perl_call_sv(a->cb,G_DISCARD); - - SPAGAIN; - - PUTBACK; - FREETMPS; - LEAVE; - } - -MODULE = OpenSSL::BN PACKAGE = OpenSSL::BN PREFIX = p5_BN_ - -PROTOTYPES: ENABLE -VERSIONCHECK: DISABLE - -void -p5_BN_new(...) - PREINIT: - BIGNUM *bn; - SV *arg; - PPCODE: - pr_name("p5_BN_new"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - bn=BN_new(); - sv_setref_pv(ST(0), "OpenSSL::BN", (void*)bn); - -void -p5_BN_dup(a) - BIGNUM *a; - PREINIT: - BIGNUM *bn; - PPCODE: - pr_name("p5_BN_dup"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - bn=BN_dup(a); - sv_setref_pv(ST(0), "OpenSSL::BN", (void*)bn); - -void -p5_BN_rand(bits,...) - int bits; - PREINIT: - int top=1; - int bottom=0; - BIGNUM *ret; - PPCODE: - pr_name("p5_BN_rand"); - if ((items < 1) || (items > 3)) - croak("Usage: OpenSSL::BN::rand(bits[,top_bit][,bottombit]"); - if (items >= 2) top=(int)SvIV(ST(0)); - if (items >= 3) bottom=(int)SvIV(ST(1)); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - ret=BN_new(); - BN_rand(ret,bits,top,bottom); - sv_setref_pv(ST(0), "OpenSSL::BN", (void*)ret); - -void -p5_BN_bin2bn(a) - datum a; - PREINIT: - BIGNUM *ret; - PPCODE: - pr_name("p5_BN_bin2bn"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - ret=BN_bin2bn(a.dptr,a.dsize,NULL); - sv_setref_pv(ST(0), "OpenSSL::BN", (void*)ret); - -void -p5_BN_bn2bin(a) - BIGNUM *a; - PREINIT: - int i; - PPCODE: - pr_name("p5_BN_bn2bin"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - i=BN_num_bytes(a)+2; - sv_setpvn(ST(0),"",1); - SvGROW(ST(0),i+1); - SvCUR_set(ST(0),BN_bn2bin(a,SvPV_nolen(ST(0)))); - -void -p5_BN_mpi2bn(a) - datum a; - PREINIT: - BIGNUM *ret; - PPCODE: - pr_name("p5_BN_mpi2bn"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - ret=BN_mpi2bn(a.dptr,a.dsize,NULL); - sv_setref_pv(ST(0), "OpenSSL::BN", (void*)ret); - -void -p5_BN_bn2mpi(a) - BIGNUM *a; - PREINIT: - int i; - PPCODE: - pr_name("p5_BN_bn2mpi"); - EXTEND(sp,1); - PUSHs(sv_newmortal()); - i=BN_bn2mpi(a,NULL); - sv_setpvn(ST(0),"",1); - SvGROW(ST(0),i+1); < |