diff options
Diffstat (limited to 'perl/OpenSSL.pm')
-rw-r--r-- | perl/OpenSSL.pm | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/perl/OpenSSL.pm b/perl/OpenSSL.pm new file mode 100644 index 0000000000..21c05a44cf --- /dev/null +++ b/perl/OpenSSL.pm @@ -0,0 +1,80 @@ +## +## OpenSSL.pm +## + +package OpenSSL; + +use Exporter; +use DynaLoader; + +@ISA = qw(Exporter DynaLoader); +@EXPORT = qw(); + +$VERSION='0.92'; +bootstrap penSSL; + +@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]; (div($_[0],$_[1]))[0]; }, +"%" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; mod($_[0],$_[1]); }, +"**" => sub { ($_[1],$_[0])=($_[0],$_[1]) if $_[2]; exp($_[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; |