r13450 - in /branches/upstream/libcrypt-openssl-dsa-perl: ./ current/ current/lib/ current/lib/Crypt/ current/lib/Crypt/OpenSSL/ current/lib/Crypt/OpenSSL/DSA/ current/t/
dmn at users.alioth.debian.org
dmn at users.alioth.debian.org
Thu Jan 24 19:07:58 UTC 2008
Author: dmn
Date: Thu Jan 24 19:07:58 2008
New Revision: 13450
URL: http://svn.debian.org/wsvn/?sc=1&rev=13450
Log:
[svn-inject] Installing original source of libcrypt-openssl-dsa-perl
Added:
branches/upstream/libcrypt-openssl-dsa-perl/
branches/upstream/libcrypt-openssl-dsa-perl/current/
branches/upstream/libcrypt-openssl-dsa-perl/current/Changes
branches/upstream/libcrypt-openssl-dsa-perl/current/DSA.xs
branches/upstream/libcrypt-openssl-dsa-perl/current/MANIFEST
branches/upstream/libcrypt-openssl-dsa-perl/current/META.yml
branches/upstream/libcrypt-openssl-dsa-perl/current/Makefile.PL
branches/upstream/libcrypt-openssl-dsa-perl/current/README
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA.pm
branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/Signature.pod
branches/upstream/libcrypt-openssl-dsa-perl/current/t/
branches/upstream/libcrypt-openssl-dsa-perl/current/t/00-use.t
branches/upstream/libcrypt-openssl-dsa-perl/current/t/10-selftest.t
branches/upstream/libcrypt-openssl-dsa-perl/current/t/90-openssl-compat.t
branches/upstream/libcrypt-openssl-dsa-perl/current/typemap
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/Changes?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/Changes (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/Changes Thu Jan 24 19:07:58 2008
@@ -1,0 +1,33 @@
+Revision history for Perl extension Crypt::OpenSSL::DSA.
+
+0.13 October 15, 2005
+ - made t/90-openssl-compat.t windows compatible (Rob)
+
+0.12 May 22, 2005
+ - Removed all use of strlen() in DSA.xs so signatures with nulls,
+ as commonly generated with sha1, could be signed/verified,
+ and added more tests
+ (Brad Fitzpatrick <brad at danga.com>)
+
+0.11 Jan 6th, 2003
+ - Added -DPERL5 to Makefile.PL required for perl-5.8/gcc-3.2
+
+0.10 Sep 25th, 2002
+ - Fixed Memory leak with signature object.
+ - Added set_p, set_q, set_g, set_pub_key, set_priv_key (Olaf Kolkman)
+ - Added set_r and set_s methods to Crypt::OpenSSL::DSA::Signature
+ - Renamed Signature.pm to Signature.pod
+
+0.04 Sep 24th, 2002
+ - Fixed bug in verify method
+ - Added read_priv_key_str and read_pub_key_str
+
+0.03 Feb 6th, 2002
+ - Added Crypt::OpenSSL::DSA::Signature interface
+
+0.02 Sep 24th, 2001
+ - Added more docs
+ - seed is now optional argument in generate_parameters
+
+0.01 Sep 18th, 2001
+ - original version; created by h2xs
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/DSA.xs
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/DSA.xs?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/DSA.xs (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/DSA.xs Thu Jan 24 19:07:58 2008
@@ -1,0 +1,436 @@
+/* $Id: */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <openssl/bn.h>
+#include <openssl/err.h>
+#include <openssl/pem.h>
+#include <openssl/dsa.h>
+#include <openssl/ssl.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+MODULE = Crypt::OpenSSL::DSA PACKAGE = Crypt::OpenSSL::DSA
+
+PROTOTYPES: DISABLE
+
+BOOT:
+ ERR_load_crypto_strings();
+
+DSA *
+new(CLASS)
+ char * CLASS
+ CODE:
+ RETVAL = DSA_new();
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY(dsa)
+ DSA *dsa
+ CODE:
+ DSA_free(dsa);
+
+DSA *
+generate_parameters(CLASS, bits, seed = NULL)
+ char * CLASS
+ int bits
+ SV * seed
+ PREINIT:
+ DSA * dsa;
+ int seed_len = 0;
+ char * seedpv = NULL;
+ CODE:
+ if (seed) {
+ seedpv = SvPV(seed, seed_len);
+ }
+ dsa = DSA_generate_parameters(bits, seedpv, seed_len, NULL, NULL, NULL, NULL);
+ if (!dsa)
+ croak(ERR_reason_error_string(ERR_get_error()));
+ RETVAL = dsa;
+ OUTPUT:
+ RETVAL
+
+int
+generate_key(dsa)
+ DSA * dsa
+ CODE:
+ RETVAL = DSA_generate_key(dsa);
+ OUTPUT:
+ RETVAL
+
+DSA_SIG *
+do_sign(dsa, dgst)
+ DSA * dsa
+ SV * dgst
+ PREINIT:
+ DSA_SIG * sig;
+ char * CLASS = "Crypt::OpenSSL::DSA::Signature";
+ char * dgst_pv = NULL;
+ int dgst_len = 0;
+ CODE:
+ dgst_pv = SvPV(dgst, dgst_len);
+ if (!(sig = DSA_do_sign((const unsigned char *) dgst_pv, dgst_len, dsa))) {
+ croak("Error in dsa_sign: %s",ERR_error_string(ERR_get_error(), NULL));
+ }
+ RETVAL = sig;
+ OUTPUT:
+ RETVAL
+
+SV *
+sign(dsa, dgst)
+ DSA * dsa
+ SV * dgst
+ PREINIT:
+ unsigned char *sigret;
+ unsigned int siglen;
+ char * dgst_pv = NULL;
+ int dgst_len = 0;
+ CODE:
+ siglen = DSA_size(dsa);
+ sigret = malloc(siglen);
+
+ dgst_pv = SvPV(dgst, dgst_len);
+ /* warn("Length of sign [%s] is %d\n", dgst_pv, dgst_len); */
+
+ if (!(DSA_sign(0, (const unsigned char *) dgst_pv, dgst_len, sigret, &siglen, dsa))) {
+ croak("Error in DSA_sign: %s",ERR_error_string(ERR_get_error(), NULL));
+ }
+ RETVAL = newSVpvn(sigret, siglen);
+ free(sigret);
+ OUTPUT:
+ RETVAL
+
+int
+verify(dsa, dgst, sigbuf)
+ DSA * dsa
+ SV *dgst
+ SV *sigbuf
+ PREINIT:
+ char * dgst_pv = NULL;
+ int dgst_len = 0;
+ char * sig_pv = NULL;
+ int sig_len = 0;
+ CODE:
+ dgst_pv = SvPV(dgst, dgst_len);
+ sig_pv = SvPV(sigbuf, sig_len);
+ RETVAL = DSA_verify(0, dgst_pv, dgst_len, sig_pv, sig_len, dsa);
+ if (RETVAL == -1)
+ croak("Error in DSA_verify: %s",ERR_error_string(ERR_get_error(), NULL));
+ OUTPUT:
+ RETVAL
+
+int
+do_verify(dsa, dgst, sig)
+ DSA *dsa
+ SV *dgst
+ DSA_SIG *sig
+ PREINIT:
+ char * dgst_pv = NULL;
+ int dgst_len = 0;
+ CODE:
+ dgst_pv = SvPV(dgst, dgst_len);
+ RETVAL = DSA_do_verify(dgst_pv, dgst_len, sig, dsa);
+ OUTPUT:
+ RETVAL
+
+DSA *
+read_params(CLASS, filename)
+ char *CLASS
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "r")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_read_DSAparams(f, NULL, NULL, NULL);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+int
+write_params(dsa, filename)
+ DSA * dsa
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "w")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_write_DSAparams(f, dsa);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+DSA *
+_load_key(CLASS, private_flag_SV, key_string_SV)
+ char *CLASS;
+ SV * private_flag_SV;
+ SV * key_string_SV;
+ PREINIT:
+ int key_string_length; /* Needed to pass to SvPV */
+ char *key_string;
+ char private_flag;
+ BIO *stringBIO;
+ CODE:
+ private_flag = SvTRUE( private_flag_SV );
+ key_string = SvPV( key_string_SV, key_string_length );
+ if( (stringBIO = BIO_new_mem_buf(key_string, key_string_length)) == NULL )
+ croak( "Failed to create memory BIO %s", ERR_error_string(ERR_get_error(), NULL));
+ RETVAL = private_flag
+ ? PEM_read_bio_DSAPrivateKey( stringBIO, NULL, NULL, NULL )
+ : PEM_read_bio_DSA_PUBKEY( stringBIO, NULL, NULL, NULL );
+ BIO_set_close(stringBIO, BIO_CLOSE);
+ BIO_free( stringBIO );
+ if ( RETVAL == NULL )
+ croak( "Failed to read key %s", ERR_error_string(ERR_get_error(), NULL));
+ OUTPUT:
+ RETVAL
+
+DSA *
+read_pub_key(CLASS, filename)
+ char *CLASS
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "r")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_read_DSA_PUBKEY(f, NULL, NULL, NULL);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+int
+write_pub_key(dsa, filename)
+ DSA * dsa
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "w")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_write_DSA_PUBKEY(f, dsa);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+DSA *
+read_priv_key(CLASS, filename)
+ char *CLASS
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "r")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_read_DSAPrivateKey(f, NULL, NULL, NULL);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+int
+write_priv_key(dsa, filename)
+ DSA * dsa
+ char *filename
+ PREINIT:
+ FILE *f;
+ CODE:
+ if(!(f = fopen(filename, "w")))
+ croak("Can't open file %s", filename);
+ RETVAL = PEM_write_DSAPrivateKey(f, dsa, NULL, NULL, 0, NULL, NULL);
+ fclose(f);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_p(dsa)
+ DSA *dsa
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa->p, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_q(dsa)
+ DSA *dsa
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 20);
+ len = BN_bn2bin(dsa->q, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_g(dsa)
+ DSA *dsa
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa->g, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_pub_key(dsa)
+ DSA *dsa
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa->pub_key, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_priv_key(dsa)
+ DSA *dsa
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa->priv_key, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+void
+set_p(dsa, p_SV)
+ DSA *dsa
+ SV * p_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(p_SV);
+ dsa->p = BN_bin2bn(SvPV(p_SV, len), len, NULL);
+
+void
+set_q(dsa, q_SV)
+ DSA *dsa
+ SV * q_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(q_SV);
+ dsa->q = BN_bin2bn(SvPV(q_SV, len), len, NULL);
+
+void
+set_g(dsa, g_SV)
+ DSA *dsa
+ SV * g_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(g_SV);
+ dsa->g = BN_bin2bn(SvPV(g_SV, len), len, NULL);
+
+void
+set_pub_key(dsa, pub_key_SV)
+ DSA *dsa
+ SV * pub_key_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(pub_key_SV);
+ dsa->pub_key = BN_bin2bn(SvPV(pub_key_SV, len), len, NULL);
+
+void
+set_priv_key(dsa, priv_key_SV)
+ DSA *dsa
+ SV * priv_key_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(priv_key_SV);
+ dsa->priv_key = BN_bin2bn(SvPV(priv_key_SV, len), len, NULL);
+
+MODULE = Crypt::OpenSSL::DSA PACKAGE = Crypt::OpenSSL::DSA::Signature
+
+DSA_SIG *
+new(CLASS)
+ char * CLASS
+ CODE:
+ RETVAL = DSA_SIG_new();
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY(dsa_sig)
+ DSA_SIG *dsa_sig
+ CODE:
+ DSA_SIG_free(dsa_sig);
+
+SV *
+get_r(dsa_sig)
+ DSA_SIG *dsa_sig
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa_sig->r, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+SV *
+get_s(dsa_sig)
+ DSA_SIG *dsa_sig
+ PREINIT:
+ char *to;
+ int len;
+ CODE:
+ to = malloc(sizeof(char) * 128);
+ len = BN_bn2bin(dsa_sig->s, to);
+ RETVAL = newSVpvn(to, len);
+ free(to);
+ OUTPUT:
+ RETVAL
+
+void
+set_r(dsa_sig, r_SV)
+ DSA_SIG *dsa_sig
+ SV * r_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(r_SV);
+ dsa_sig->r = BN_bin2bn(SvPV(r_SV, len), len, NULL);
+
+void
+set_s(dsa_sig, s_SV)
+ DSA_SIG *dsa_sig
+ SV * s_SV
+ PREINIT:
+ int len;
+ CODE:
+ len = SvCUR(s_SV);
+ dsa_sig->s = BN_bin2bn(SvPV(s_SV, len), len, NULL);
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/MANIFEST?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/MANIFEST (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/MANIFEST Thu Jan 24 19:07:58 2008
@@ -1,0 +1,12 @@
+Changes
+lib/Crypt/OpenSSL/DSA.pm
+lib/Crypt/OpenSSL/DSA/Signature.pod
+DSA.xs
+Makefile.PL
+MANIFEST
+README
+typemap
+t/00-use.t
+t/10-selftest.t
+t/90-openssl-compat.t
+META.yml Module meta-data (added by MakeMaker)
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/META.yml?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/META.yml (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/META.yml Thu Jan 24 19:07:58 2008
@@ -1,0 +1,10 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: Crypt-OpenSSL-DSA
+version: 0.13
+version_from: lib/Crypt/OpenSSL/DSA.pm
+installdirs: site
+requires:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/Makefile.PL?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/Makefile.PL (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/Makefile.PL Thu Jan 24 19:07:58 2008
@@ -1,0 +1,11 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ 'NAME' => 'Crypt::OpenSSL::DSA',
+ 'VERSION_FROM' => 'lib/Crypt/OpenSSL/DSA.pm', # finds $VERSION
+ 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
+ 'AUTHOR' => 'T.J. Mather',
+ 'LIBS' => ['-lssl -lcrypto'],
+ 'DEFINE' => '-DPERL5', # perl-5.8/gcc-3.2 needs this
+);
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/README?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/README (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/README Thu Jan 24 19:07:58 2008
@@ -1,0 +1,33 @@
+Crypt::OpenSSL::DSA version 0.13
+================================
+
+DESCRIPTION
+
+Crypt::OpenSSL::DSA implements the DSA
+(Digital Signature Algorithm) signature verification system.
+
+It is a thin XS wrapper to the DSA functions contained in the
+OpenSSL crypto library, located at http://www.openssl.org
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+ openssl, available from http://www.openssl.org/
+
+COPYRIGHT AND LICENCE
+
+Copyright (c) 2002 T.J. Mather. Crypt::OpenSSL::DSA is free software;
+you may redistribute it and/or modify it under the same terms as Perl itself.
+
+Paid support is available from directly from the author of this package.
+Please see http://www.maxmind.com/app/opensourceservices for more details.
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA.pm?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA.pm (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA.pm Thu Jan 24 19:07:58 2008
@@ -1,0 +1,192 @@
+package Crypt::OpenSSL::DSA;
+
+use strict;
+use warnings;
+
+require DynaLoader;
+
+use vars qw(@ISA $VERSION);
+ at ISA = qw(DynaLoader);
+$VERSION = '0.13';
+
+bootstrap Crypt::OpenSSL::DSA $VERSION;
+
+sub read_pub_key_str {
+ my ($class, $key_str) = @_;
+ $class->_load_key(0, $key_str);
+}
+
+sub read_priv_key_str {
+ my ($class, $key_str) = @_;
+ $class->_load_key(1, $key_str);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Crypt::OpenSSL::DSA - Digital Signature Algorithm using OpenSSL
+
+=head1 SYNOPSIS
+
+ use Crypt::OpenSSL::DSA;
+
+ # generate keys and write out to PEM files
+ my $dsa = Crypt::OpenSSL::DSA->generate_parameters( 512 );
+ $dsa->generate_key;
+ $dsa->write_pub_key( $filename );
+ $dsa->write_priv_key( $filename );
+
+ # using keys from PEM files
+ my $dsa_priv = Crypt::OpenSSL::DSA->read_priv_key( $filename );
+ my $sig = $dsa_priv->sign($message);
+ my $dsa_pub = Crypt::OpenSSL::DSA->read_pub_key( $filename );
+ my $valid = $dsa_pub->verify($message, $sig);
+
+ # using keys from PEM strings
+ my $dsa_priv = Crypt::OpenSSL::DSA->read_priv_key_str( $key_string );
+ my $sig = $dsa_priv->sign($message);
+ my $dsa_pub = Crypt::OpenSSL::DSA->read_pub_key_str( $key_string );
+ my $valid = $dsa_pub->verify($message, $sig);
+
+=head1 DESCRIPTION
+
+Crypt::OpenSSL::DSA implements the DSA
+(Digital Signature Algorithm) signature verification system.
+
+It is a thin XS wrapper to the DSA functions contained in the
+OpenSSL crypto library, located at http://www.openssl.org
+
+=head1 CLASS METHODS
+
+=over 4
+
+=item $dsa = Crypt::OpenSSL::DSA->generate_parameters( $bits, $seed );
+
+Returns a new DSA object and generates the p, q and g
+parameters necessary to generate keys.
+
+bits is the length of the prime to be generated; the DSS allows a maximum of 1024 bits.
+
+=item $dsa = Crypt::OpenSSL::DSA->read_params( $filename );
+
+Reads in a parameter PEM file and returns a new DSA object with the p, q and g
+parameters necessary to generate keys.
+
+=item $dsa = Crypt::OpenSSL::DSA->read_pub_key( $filename );
+
+Reads in a public key PEM file and returns a new DSA object that can be used
+to verify DSA signatures.
+
+=item $dsa = Crypt::OpenSSL::DSA->read_priv_key( $filename );
+
+Reads in a private key PEM file and returns a new DSA object that can be used
+to sign messages.
+
+=item $dsa = Crypt::OpenSSL::DSA->read_pub_key_str( $key_string );
+
+Reads in a public key PEM string and returns a new DSA object that can be used
+to verify DSA signatures.
+The string should include the -----BEGIN...----- and -----END...----- lines.
+
+=item $dsa = Crypt::OpenSSL::DSA->read_priv_key_str( $key_string );
+
+Reads in a private key PEM string and returns a new DSA object that can be used
+to sign messages.
+The string should include the -----BEGIN...----- and -----END...----- lines.
+
+=back
+
+=head1 OBJECT METHODS
+
+=over 4
+
+=item $dsa->generate_key;
+
+Generates private and public keys, assuming that $dsa is the return
+value of generate_parameters.
+
+=item $sig = $dsa->sign( $message );
+
+Signs $message, returning the signature. Note that $meesage cannot exceed
+20 characters in length.
+
+$dsa is the signer's private key.
+
+=item $sig_obj = $dsa->do_sign( $message );
+
+Similar to C<sign>, but returns a L<Crypt::OpenSSL::DSA::Signature> object.
+
+=item $valid = $dsa->verify( $message, $sig );
+
+Verifies that the $sig signature for $message is valid.
+
+$dsa is the signer's public key.
+
+=item $valid = $dsa->do_verify( $message, $sig_obj );
+
+Similar to C<verify>, but uses a L<Crypt::OpenSSL::DSA::Signature> object.
+
+=item $dsa->write_params( $filename );
+
+Writes the parameters into a PEM file.
+
+=item $dsa->write_pub_key( $filename );
+
+Writes the public key into a PEM file.
+
+=item $dsa->write_priv_key( $filename );
+
+Writes the private key into a PEM file.
+
+=item $p = $dsa->get_p, $dsa->set_p($p)
+
+Gets/sets the prime number in binary format.
+
+=item $q = $dsa->get_q, $dsa->set_q($q)
+
+Gets/sets the subprime number (q | p-1) in binary format.
+
+=item $g = $dsa->get_g, $dsa->set_g($g)
+
+Gets/sets the generator of subgroup in binary format.
+
+=item $pub_key = $dsa->get_pub_key, $dsa->set_pub_key($pub_key)
+
+Gets/sets the public key (y = g^x) in binary format.
+
+=item $priv_key = $dsa->get_priv_key, $dsa->set_priv_key($priv_key)
+
+Gets/sets the private key in binary format.
+
+=back
+
+=head1 NOTES
+
+L<Crpyt::DSA> is a more mature Perl DSA module, but can be difficult to
+install, because of the L<Math::Pari> requirement.
+
+Comments, suggestions, and patches welcome.
+
+=head1 AUTHOR
+
+T.J. Mather, E<lt>tjmather at maxmind.comE<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2002 T.J. Mather. Crypt::OpenSSL::DSA is free software;
+you may redistribute it and/or modify it under the same terms as Perl itself.
+
+Paid support is available from directly from the author of this package.
+Please see L<http://www.maxmind.com/app/opensourceservices> for more details.
+
+=head1 SEE ALSO
+
+L<Crypt::OpenSSL::DSA::Signature>
+
+L<Crypt::DSA>, L<Crypt::OpenSSL::RSA>
+
+L<Net::DNS::SEC>
+
+=cut
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/Signature.pod
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/Signature.pod?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/Signature.pod (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/lib/Crypt/OpenSSL/DSA/Signature.pod Thu Jan 24 19:07:58 2008
@@ -1,0 +1,54 @@
+=head1 NAME
+
+ Crypt::OpenSSL::DSA::Signature - Digital Signature Object
+
+=head1 SYNOPSIS
+
+ use Crypt::OpenSSL::DSA;
+ my $dsa_priv = Crypt::OpenSSL::DSA->read_priv_key( $filename );
+ my $sig_obj = $dsa_priv->do_sign($message);
+ my $dsa_pub = Crypt::OpenSSL::DSA->read_pub_key( $filename );
+ my $valid = $dsa_pub->do_verify($message, $sig_obj);
+
+ my $r = $sig_obj->get_r;
+ my $s = $sig_obj->get_s;
+
+ my $sig_obj2 = Crypt::OpenSSL::DSA::Signature->new();
+ $sig_obj2->set_r($r);
+ $sig_obj2->set_s($s);
+ my $valid = $dsa_pub->do_verify($message, $sig_obj2);
+
+=head1 CLASS METHODS
+
+=item $sig_obj = Crypt::OpenSSL::DSA::Signature->new();
+
+Create a new DSA Signature Object. You will need to
+call set_r and set_s after you create this.
+
+=head1 OBJECT METHODS
+
+=item $r = $sig_obj->get_r;
+
+Gets first member of signature pair.
+
+=item $s = $sig_obj->get_s;
+
+Gets second member of signature pair.
+
+=item $r = $sig_obj->set_r;
+
+Sets first member of signature pair.
+
+=item $s = $sig_obj->set_s;
+
+Sets second member of signature pair.
+
+=head1 AUTHOR
+
+T.J. Mather, E<lt>tjmather at maxmind.comE<gt>
+
+=head1 SEE ALSO
+
+L<Crypt::OpenSSL::DSA>
+
+=cut
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/t/00-use.t
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/t/00-use.t?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/t/00-use.t (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/t/00-use.t Thu Jan 24 19:07:58 2008
@@ -1,0 +1,17 @@
+# -*- Mode: Perl; -*-
+
+# test file added by Brad Fitzpatrick in response to bugs found by Karl Koscher
+# related to null bytes in SHA1 signatures, and strlen truncating the message
+# being signed/verified
+
+use strict;
+
+use Test;
+use Crypt::OpenSSL::DSA;
+
+BEGIN { plan tests => 1 };
+
+my $dsa = Crypt::OpenSSL::DSA->generate_parameters( 512 );
+$dsa->generate_key;
+
+ok(1);
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/t/10-selftest.t
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/t/10-selftest.t?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/t/10-selftest.t (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/t/10-selftest.t Thu Jan 24 19:07:58 2008
@@ -1,0 +1,107 @@
+# -*- Mode: Perl; -*-
+
+use strict;
+
+use Test;
+use Crypt::OpenSSL::DSA;
+
+BEGIN { plan tests => 30 }
+
+my $message = "foo bar";
+
+my $dsa = Crypt::OpenSSL::DSA->generate_parameters( 512, "foo" );
+
+$dsa->generate_key;
+
+my $dsa_sig1 = $dsa->sign($message);
+my $dsa_sig_obj1 = $dsa->do_sign($message);
+
+my $bogus_sig = $dsa_sig1;
+$bogus_sig =~ s!.a$!ba!;
+$bogus_sig =~ s!.$!a!;
+
+my $p = $dsa->get_p;
+my $q = $dsa->get_q;
+my $g = $dsa->get_g;
+my $pub_key = $dsa->get_pub_key;
+my $priv_key = $dsa->get_priv_key;
+
+my $r = $dsa_sig_obj1->get_r;
+my $s = $dsa_sig_obj1->get_s;
+
+my $dsa_sig_obj2 = Crypt::OpenSSL::DSA::Signature->new();
+$dsa_sig_obj2->set_r($r);
+$dsa_sig_obj2->set_s($s);
+
+my $dsa_sig_obj_bogus = Crypt::OpenSSL::DSA::Signature->new();
+$dsa_sig_obj_bogus->set_r($s);
+$dsa_sig_obj_bogus->set_s($r);
+
+ok($dsa->verify($message, $dsa_sig1), 1);
+ok($dsa->verify($message, $bogus_sig), 0);
+
+ok($dsa->do_verify($message, $dsa_sig_obj1), 1);
+ok($dsa->do_verify($message, $dsa_sig_obj2), 1);
+ok($dsa->do_verify($message, $dsa_sig_obj_bogus), 0);
+
+ok($dsa->write_params("dsa.param.pem"), 1);
+ok($dsa->write_pub_key("dsa.pub.pem"), 1);
+ok($dsa->write_priv_key("dsa.priv.pem"), 1);
+
+my ($priv_key_str, $pub_key_str);
+{
+ local($/) = undef;
+ open PRIV, "dsa.priv.pem";
+ $priv_key_str = <PRIV>;
+ close PRIV;
+ open PUB, "dsa.pub.pem";
+ $pub_key_str = <PUB>;
+ close PUB;
+}
+
+my $dsa2 = Crypt::OpenSSL::DSA->read_priv_key("dsa.priv.pem");
+my $dsa_sig2 = $dsa2->sign($message);
+
+my $dsa3 = Crypt::OpenSSL::DSA->read_pub_key("dsa.pub.pem");
+
+my $dsa4 = Crypt::OpenSSL::DSA->read_priv_key_str($priv_key_str);
+my $dsa5 = Crypt::OpenSSL::DSA->read_pub_key_str($pub_key_str);
+
+my $dsa6 = Crypt::OpenSSL::DSA->new();
+$dsa6->set_p($p);
+$dsa6->set_q($q);
+$dsa6->set_g($g);
+$dsa6->set_pub_key($pub_key);
+
+ok($dsa6->get_p,$p);
+ok($dsa6->get_q,$q);
+ok($dsa6->get_g,$g);
+ok($dsa6->get_pub_key,$pub_key);
+
+ok($dsa->verify($message, $dsa_sig2), 1);
+ok($dsa2->verify($message, $dsa_sig2), 1);
+ok($dsa2->verify($message, $dsa_sig1), 1);
+ok($dsa3->verify($message, $dsa_sig1), 1);
+ok($dsa3->verify($message, $dsa_sig2), 1);
+ok($dsa4->verify($message, $dsa_sig2), 1);
+ok($dsa4->verify($message, $dsa_sig1), 1);
+ok($dsa5->verify($message, $dsa_sig1), 1);
+ok($dsa5->verify($message, $dsa_sig2), 1);
+ok($dsa6->verify($message, $dsa_sig1), 1);
+ok($dsa6->verify($message, $dsa_sig2), 1);
+
+$dsa6->set_priv_key($priv_key);
+ok($dsa6->get_priv_key,$priv_key);
+my $dsa_sig3 = $dsa6->sign($message);
+
+ok($dsa->verify($message, $dsa_sig3), 1);
+ok($dsa2->verify($message, $dsa_sig3), 1);
+ok($dsa3->verify($message, $dsa_sig3), 1);
+ok($dsa4->verify($message, $dsa_sig3), 1);
+ok($dsa5->verify($message, $dsa_sig3), 1);
+ok($dsa6->verify($message, $dsa_sig3), 1);
+
+unlink("dsa.param.pem");
+unlink("dsa.priv.pem");
+unlink("dsa.pub.pem");
+
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/t/90-openssl-compat.t
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/t/90-openssl-compat.t?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/t/90-openssl-compat.t (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/t/90-openssl-compat.t Thu Jan 24 19:07:58 2008
@@ -1,0 +1,81 @@
+# -*- Mode: Perl; -*-
+
+# test file added by Brad Fitzpatrick in response to bugs found by Karl Koscher
+# related to null bytes in SHA1 signatures, and strlen truncating the message
+# being signed/verified
+
+use strict;
+
+use Test;
+use Crypt::OpenSSL::DSA;
+
+BEGIN { plan tests => 84 }
+
+my $HAS_SHA1 = eval "use Digest::SHA1; 1;";
+my ($OPEN_SSL, $testable);
+if($^O !~ /mswin32/i) {
+ $OPEN_SSL = `which openssl` || "/usr/bin/openssl";
+ chomp $OPEN_SSL;
+ $testable = -x $OPEN_SSL && $HAS_SHA1;
+ }
+else {
+ $OPEN_SSL = "openssl";
+ eval{`openssl version`};
+ if(!$@) {$testable = 1 && $HAS_SHA1}
+ }
+my $why_skip = $HAS_SHA1 ? "Need openssl binary in path" : "Need Digest::SHA1 to test";
+
+my $dsa = Crypt::OpenSSL::DSA->generate_parameters( 512, "foo" );
+$dsa->generate_key;
+
+ok($dsa->write_pub_key("dsa.pub.pem"), 1);
+ok($dsa->write_priv_key("dsa.priv.pem"), 1);
+
+my $dsa_pub = Crypt::OpenSSL::DSA->read_pub_key("dsa.pub.pem");
+ok($dsa_pub);
+my $dsa_priv = Crypt::OpenSSL::DSA->read_priv_key("dsa.priv.pem");
+ok($dsa_priv);
+
+my $to_do = 500;
+my $of_each = 20;
+
+if ($testable) {
+ my %done; # { zero => $ct, nonzero => $ct }
+ for (1..$to_do) {
+ my $plain = "This is test number $_";
+ my $msg = Digest::SHA1::sha1($plain);
+ my $type = ($msg =~ /\x00/) ? "zero" : "nonzero";
+ next if $done{$type}++ >= $of_each;
+
+ my $sig = $dsa_priv->sign($msg);
+
+ my $we_think = $dsa_pub->verify($msg, $sig);
+ my $openssl_think = openssl_verify("dsa.pub.pem", $sig, $plain);
+
+ ok($we_think, 1);
+ ok($openssl_think, 1);
+ }
+} else {
+ for (1..($of_each*4)) {
+ print "ok # Skip $why_skip\n";
+ }
+}
+
+unlink("dsa.priv.pem");
+unlink("dsa.pub.pem");
+
+sub openssl_verify {
+ my ($public_pem_file, $sig, $msg_plain) = @_;
+ require File::Temp;
+ my $sig_temp = new File::Temp(TEMPLATE => "tmp.signatureXXXX") or die;
+ my $msg_temp = new File::Temp(TEMPLATE => "tmp.msgXXXX") or die;
+ syswrite($sig_temp,$sig);
+ syswrite($msg_temp,$msg_plain);
+ # FIXME: shutup openssl from spewing to STDOUT the "Verification
+ # OK". can we depend on reading "Verification OK" from the
+ # open("-|", "openssl") open mode due to portability?
+ my $rv = system("openssl", "dgst", "-dss1", "-verify", $public_pem_file, "-signature", "$sig_temp", "$msg_temp");
+ return 0 if $rv;
+ return 1;
+}
+
Added: branches/upstream/libcrypt-openssl-dsa-perl/current/typemap
URL: http://svn.debian.org/wsvn/branches/upstream/libcrypt-openssl-dsa-perl/current/typemap?rev=13450&op=file
==============================================================================
--- branches/upstream/libcrypt-openssl-dsa-perl/current/typemap (added)
+++ branches/upstream/libcrypt-openssl-dsa-perl/current/typemap Thu Jan 24 19:07:58 2008
@@ -1,0 +1,19 @@
+TYPEMAP
+DSA * O_OBJECT
+DSA_SIG * O_OBJECT
+
+INPUT
+O_OBJECT
+ if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
+ $var = ($type)SvIV((SV*)SvRV( $arg ));
+ else{
+ warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
+ XSRETURN_UNDEF;
+ }
+
+OUTPUT
+
+# The Perl object is blessed into 'CLASS', which should be a
+# char* having the name of the package for the blessing.
+O_OBJECT
+ sv_setref_pv( $arg, (char *)CLASS, (void*)$var );
More information about the Pkg-perl-cvs-commits
mailing list