home *** CD-ROM | disk | FTP | other *** search
- # $Id: PEM.pm,v 1.6 2001/04/22 08:03:04 btrott Exp $
-
- package Crypt::DSA::Key::PEM;
- use strict;
-
- use Convert::PEM;
-
- use Crypt::DSA::Key;
- use base qw( Crypt::DSA::Key );
-
- sub deserialize {
- my $key = shift;
- my %param = @_;
-
- my $pem = $key->_pem;
- my $pkey = $pem->decode( Content => $param{Content},
- Password => $param{Password} );
- return unless $pkey;
-
- for my $m (qw( p q g pub_key priv_key )) {
- $key->$m( $pkey->{DSAPrivateKey}{$m} );
- }
- $key;
- }
-
- sub serialize {
- my $key = shift;
- my %param = @_;
-
- my $pkey = { DSAPrivateKey => { version => 0 } };
- for my $m (qw( p q g pub_key priv_key )) {
- $pkey->{DSAPrivateKey}{$m} = $key->$m();
- }
-
- my $pem = $key->_pem;
- my $buf = $pem->encode(
- Content => $pkey,
- Password => $param{Password}
- ) or croak $pem->errstr;
- $buf;
- }
-
- sub _pem {
- my $key = shift;
- unless (defined $key->{__pem}) {
- my $pem = Convert::PEM->new(
- Name => "DSA PRIVATE KEY",
- ASN => qq(
- DSAPrivateKey SEQUENCE {
- version INTEGER,
- p INTEGER,
- q INTEGER,
- g INTEGER,
- pub_key INTEGER,
- priv_key INTEGER
- }
- ));
- $pem->asn->configure( decode => { bigint => 'Math::Pari' },
- encode => { bigint => 'Math::Pari' } );
- $key->{__pem} = $pem;
- }
- $key->{__pem};
- }
-
- 1;
- __END__
-
- =head1 NAME
-
- Crypt::DSA::Key::PEM - Read/write DSA PEM files
-
- =head1 SYNOPSIS
-
- use Crypt::DSA::Key;
- my $key = Crypt::DSA::Key->new( Type => 'PEM', ...);
- $key->write( Type => 'PEM', ...);
-
- =head1 DESCRIPTION
-
- I<Crypt::DSA::Key::PEM> provides an interface to reading and
- writing DSA PEM files, using I<Convert::PEM>. The files are
- ASN.1-encoded and optionally encrypted.
-
- You shouldn't use this module directly. As the SYNOPSIS above
- suggests, this module should be considered a plugin for
- I<Crypt::DSA::Key>, and all access to PEM files (reading DSA
- keys from disk, etc.) should be done through that module.
-
- Read the I<Crypt::DSA::Key> documentation for more details.
-
- =head1 AUTHOR & COPYRIGHTS
-
- Please see the Crypt::DSA manpage for author, copyright,
- and license information.
-
- =cut
-