diff options
Diffstat (limited to 'Master/tlpkg/tlperl0/lib/Crypt/OpenPGP/MDC.pm')
-rwxr-xr-x | Master/tlpkg/tlperl0/lib/Crypt/OpenPGP/MDC.pm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl0/lib/Crypt/OpenPGP/MDC.pm b/Master/tlpkg/tlperl0/lib/Crypt/OpenPGP/MDC.pm new file mode 100755 index 00000000000..c59b32f3bc1 --- /dev/null +++ b/Master/tlpkg/tlperl0/lib/Crypt/OpenPGP/MDC.pm @@ -0,0 +1,97 @@ +package Crypt::OpenPGP::MDC; +use strict; + +use Crypt::OpenPGP::Digest; +use Crypt::OpenPGP::ErrorHandler; +use base qw( Crypt::OpenPGP::ErrorHandler ); + +sub new { + my $mdc = bless { }, shift; + $mdc->init(@_); +} + +sub init { + my $mdc = shift; + my %param = @_; + if (my $data = $param{Data}) { + my $dgst = Crypt::OpenPGP::Digest->new('SHA1'); + $mdc->{body} = $dgst->hash($data); + } + $mdc; +} + +sub digest { $_[0]->{body} } + +sub parse { + my $class = shift; + my($buf) = @_; + my $mdc = $class->new; + $mdc->{body} = $buf->get_bytes($buf->length - $buf->offset); + $mdc; +} + +sub save { $_[0]->{body} } + +1; +__END__ + +=head1 NAME + +Crypt::OpenPGP::MDC - MDC (modification detection code) packet + +=head1 SYNOPSIS + + use Crypt::OpenPGP::MDC; + + my $mdc = Crypt::OpenPGP::MDC->new( Data => 'foobar' ); + my $digest = $mdc->digest; + my $serialized = $mdc->save; + +=head1 DESCRIPTION + +I<Crypt::OpenPGP::MDC> is a PGP MDC (modification detection code) packet. +Such a packet is used alongside Encrypted-MDC data packets so that +modifications to the ciphertext can be detected. The MDC packet contains +a C<SHA-1> digest of the plaintext for comparison with the decrypted +plaintext. + +You generally will never need to construct a I<Crypt::OpenPGP::MDC> +packet yourself; usage is by the I<Crypt::OpenPGP::Ciphertext> object. + +=head1 USAGE + +=head2 Crypt::OpenPGP::MDC->new( [ Data => $data ] ) + +Creates a new MDC packet object and returns that object. If you do not +supply any data I<$data>, the object is created empty; this is used, for +example, in I<parse> (below), to create an empty packet which is then +filled from the data in the buffer. + +If you wish to initialize a non-empty object, supply I<new> with +the I<Data> parameter along with a value I<$data>. I<$data> should +contain the plaintext prefix (length = cipher blocksize + 2), the actual +plaintext, and two octets corresponding to the hex digits C<0xd3> and +C<0x14>. + +=head2 $mdc->save + +Returns the text of the MDC packet; this is the digest of the data passed +to I<new> (above) as I<$data>, for example. + +=head2 Crypt::OpenPGP::MDC->parse($buffer) + +Given I<$buffer>, a I<Crypt::OpenPGP::Buffer> object holding (or +with offset pointing to) an MDC packet, returns a new <Crypt::OpenPGP::MDC> +object, initialized with the MDC data in the buffer. + +=head2 $mdc->digest + +Returns the MDC digest data (eg. the string passed as I<$data> to +I<new>, above). + +=head1 AUTHOR & COPYRIGHTS + +Please see the Crypt::OpenPGP manpage for author, copyright, and +license information. + +=cut |