libcrypt-simple-perl-0.06.orig/0000755000175000017500000000000007543630603016757 5ustar morphmorph00000000000000libcrypt-simple-perl-0.06.orig/t/0000755000175000017500000000000007543630603017222 5ustar morphmorph00000000000000libcrypt-simple-perl-0.06.orig/t/passphrase.t0000644000175000017500000000150207543624131021555 0ustar morphmorph00000000000000#!/usr/bin/perl =head1 NAME passphrase.t - test =head1 DESCRIPTION Check we can use the 'passphrase' option. =cut use strict; use warnings; use Test::More tests => 6; require_ok('Crypt::Simple'); { package Foo; Crypt::Simple->import(passphrase => "qwerty"); } { package Bar; Crypt::Simple->import(passphrase => "asdfg"); } { package Baz; Crypt::Simple->import(passphrase => "qwerty"); } my $plaintext = "hello world"; my $footext = Foo::encrypt($plaintext); my $bartext = Bar::encrypt($plaintext); my $baztext = Baz::encrypt($plaintext); isnt $footext, $bartext, "Foo and Bar are different"; is $footext, $baztext, "Foo and Baz are the same"; is Foo::decrypt($footext), $plaintext, "Foo encryption"; is Bar::decrypt($bartext), $plaintext, "Bar encryption"; is Baz::decrypt($baztext), $plaintext, "Baz encryption"; libcrypt-simple-perl-0.06.orig/t/complex.t0000444000175000017500000000032207473264611021055 0ustar morphmorph00000000000000#!/usr/bin/perl -w use strict; use Test; plan tests => 2; use Crypt::Simple; my $r = bless {foo=>'bar'}, "thingie"; my $e = encrypt($r); my $r2 = decrypt($e); ok($r->isa("thingie")); ok($r->{foo} eq 'bar'); libcrypt-simple-perl-0.06.orig/t/single.t0000444000175000017500000000062307473264611020673 0ustar morphmorph00000000000000#!/usr/bin/perl -w use strict; use Test; plan tests => 5; use Crypt::Simple; my $plaintext = "A message before encryption or after decryption"; my $ciphertext = encrypt($plaintext); my $nonsense = "Hello World!"; ok($ciphertext); ok($ciphertext ne encrypt($nonsense)); ok($ciphertext eq encrypt($plaintext)); ok($plaintext eq decrypt($ciphertext)); eval { decrypt('VGhpcyBpcyBhIHRlc3Q=') }; ok($@); libcrypt-simple-perl-0.06.orig/t/file.t0000644000175000017500000000202007543625143020323 0ustar morphmorph00000000000000#!/usr/bin/perl =head1 NAME file.t - test =head1 DESCRIPTION Check we can use the 'file' option. =cut use strict; use warnings; use Test::More tests => 6; sub make_tmpfile { my ($file, $data) = @_; open my $io, ">$file" or return; print {$io} $data; close $io; } make_tmpfile(foo => "abcdefgh"); make_tmpfile(bar => "zyxwvuts"); make_tmpfile(baz => "abcdefgh"); END { unlink qw/foo bar baz/ } require_ok('Crypt::Simple'); { package Foo; Crypt::Simple->import(file => "foo"); } { package Bar; Crypt::Simple->import(file => "bar"); } { package Baz; Crypt::Simple->import(file => "baz"); } my $plaintext = "hello world"; my $footext = Foo::encrypt($plaintext); my $bartext = Bar::encrypt($plaintext); my $baztext = Baz::encrypt($plaintext); isnt $footext, $bartext, "Foo and Bar are different"; is $footext, $baztext, "Foo and Baz are the same"; is Foo::decrypt($footext), $plaintext, "Foo encryption"; is Bar::decrypt($bartext), $plaintext, "Bar encryption"; is Baz::decrypt($baztext), $plaintext, "Baz encryption"; libcrypt-simple-perl-0.06.orig/t/multi.t0000444000175000017500000000044707473264611020550 0ustar morphmorph00000000000000#!/usr/bin/perl -w use strict; use Test; plan tests => 6; use Crypt::Simple; my @plain = qw/this is a test/; my $ciphertext = encrypt(@plain); ok($ciphertext); my @out = decrypt($ciphertext); ok(scalar @plain == scalar @out); for (my $i=0; $i<@plain; ++$i) { ok($plain[$i] eq $out[$i]); } libcrypt-simple-perl-0.06.orig/t/passfile.t0000644000175000017500000000203607543624734021226 0ustar morphmorph00000000000000#!/usr/bin/perl =head1 NAME passfile.t - test =head1 DESCRIPTION Check we can use the 'passfile' option. =cut use strict; use warnings; use Test::More tests => 6; sub make_tmpfile { my ($file, $data) = @_; open my $io, ">$file" or return; print {$io} $data; close $io; } make_tmpfile(foo => "qwerty"); make_tmpfile(bar => "asdfgh"); make_tmpfile(baz => "qwerty"); END { unlink qw/foo bar baz/ } require_ok('Crypt::Simple'); { package Foo; Crypt::Simple->import(passfile => "foo"); } { package Bar; Crypt::Simple->import(passfile => "bar"); } { package Baz; Crypt::Simple->import(passfile => "baz"); } my $plaintext = "hello world"; my $footext = Foo::encrypt($plaintext); my $bartext = Bar::encrypt($plaintext); my $baztext = Baz::encrypt($plaintext); isnt $footext, $bartext, "Foo and Bar are different"; is $footext, $baztext, "Foo and Baz are the same"; is Foo::decrypt($footext), $plaintext, "Foo encryption"; is Bar::decrypt($bartext), $plaintext, "Bar encryption"; is Baz::decrypt($baztext), $plaintext, "Baz encryption"; libcrypt-simple-perl-0.06.orig/README0000644000175000017500000000515607543630073017647 0ustar morphmorph00000000000000DESCRIPTION Maybe you have a web application and you need to store some session data at the client side (in a cookie or hidden form fields) but you don't want the user to be able to mess with the data. Maybe you want to save secret information to a text file. Maybe you have better ideas of what to do with encrypted stuff! This little module will convert all your data into nice base64 text that you can save in a text file, send in an email, store in a cookie or web page, or bounce around the Net. The data you encrypt can be as simple or as complicated as you like. CHANGES Version 0.05 had a few missing subroutine bodies, so quite a few things didn't work! I'm now practising what I preach, and have written some tests! INTERNALS "Crypt::Simple" is really just a wrapper round a few other useful Perl modules: you may want to read the documentation for these modules too. We use "FreezeThaw" to squish all your data into a concise textual representation. We use "Compress::Zlib" to compress this string, and then use "Crypt::Blowfish" in a home-brew CBC mode to perform the encryption. Somewhere in this process we also add a MD5 digest (using "Digest::MD5"). Then we throw the whole thing through "MIME::Base64" to produce a nice bit of text for you to play with. Decryption, obviously, is the reverse of this process. WARNING Governments throughout the world do not like encryption because it makes it difficult for them to look at all your stuff. Each country has a different policy designed to stop you using encryption: some governments are honest enough to make it illegal; some think it is a dangerous weapon; some insist that you are free to encrypt, but only evil people would want to; some make confusing and contradictory laws because they try to do all of the above. Although this modules itself does not include any encryption code, it does use another module that contains encryption code, and this documentation mentions encryption. Downloading, using, or reading this modules could be illegal where you live. AUTHOR Marty Pauley COPYRIGHT Copyright (C) 2001 Kasei Limited This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. libcrypt-simple-perl-0.06.orig/Simple.pm0000644000175000017500000001317007543622740020553 0ustar morphmorph00000000000000package Crypt::Simple; $Crypt::Simple::VERSION = '0.06'; =head1 NAME Crypt::Simple - encrypt stuff simply =head1 SYNOPSIS use Crypt::Simple; my $data = encrypt(@stuff); my @same_stuff = decrypt($data); =head1 DESCRIPTION Maybe you have a web application and you need to store some session data at the client side (in a cookie or hidden form fields) but you don't want the user to be able to mess with the data. Maybe you want to save secret information to a text file. Maybe you have better ideas of what to do with encrypted stuff! This little module will convert all your data into nice base64 text that you can save in a text file, send in an email, store in a cookie or web page, or bounce around the Net. The data you encrypt can be as simple or as complicated as you like. =head1 KEY If you don't pass any options when using C we will generate a key for you based on the name of your module that uses this one. In many cases this works fine, but you may want more control over the key. Here's how: =over 4 =item use Crypt::Simple passphrase => 'pass phrase'; The MD5 hash of the text string "pass phrase" is used as the key. =item use Crypt::Simple prompt => 'Please type the magic words'; The user is prompted to enter a passphrase, and the MD5 hash of the entered text is used as the key. =item use Crypt::Simple passfile => '/home/marty/secret'; The contents of the file /home/marty/secret are used as the pass phrase: the MD5 hash of the file is used as the key. =item use Crypt::Simple file => '/home/marty/noise'; The contents of the file /home/marty/noise are directly used as the key. =back =head1 INTERNALS C is really just a wrapper round a few other useful Perl modules: you may want to read the documentation for these modules too. We use C to squish all your data into a concise textual representation. We use C to compress this string, and then use C in a home-brew CBC mode to perform the encryption. Somewhere in this process we also add a MD5 digest (using C). Then we throw the whole thing through C to produce a nice bit of text for you to play with. Decryption, obviously, is the reverse of this process. =head1 WARNING Governments throughout the world do not like encryption because it makes it difficult for them to look at all your stuff. Each country has a different policy designed to stop you using encryption: some governments are honest enough to make it illegal; some think it is a dangerous weapon; some insist that you are free to encrypt, but only evil people would want to; some make confusing and contradictory laws because they try to do all of the above. Although this modules itself does not include any encryption code, it does use another module that contains encryption code, and this documentation mentions encryption. Downloading, using, or reading this modules could be illegal where you live. =head1 AUTHOR Marty Pauley Emarty@kasei.comE =head1 COPYRIGHT Copyright (C) 2001 Kasei Limited This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =cut use strict; use Carp; use Crypt::Blowfish; use Compress::Zlib; use MIME::Base64; use Digest::MD5 qw(md5); use FreezeThaw qw(freeze thaw); sub _chunk($) { $_[0] =~ /.{1,8}/ogs } sub import { my ($class, @args) = @_; my $caller = caller; my $key = $class->get_key_param(@args) || $class->get_key_default($caller); my $cipher = Crypt::Blowfish->new($key); no strict 'refs'; *{"${caller}::encrypt"} = sub { my $data = freeze(@_); my $sig = md5($data); my $b0 = pack('NN', 0, 0); my $ct = ''; foreach my $block (_chunk($sig.compress($data))) { $ct .= $b0 = $cipher->encrypt($b0 ^ $block); } return encode_base64($ct, ''); }; *{"${caller}::decrypt"} = sub { my $data = decode_base64($_[0]); my ($sig1, $sig2, @blocks) = _chunk($data); my $b0 = pack('NN', 0, 0); my $sig = $b0 ^ $cipher->decrypt($sig1); $b0 = $sig1; $sig .= $b0 ^ $cipher->decrypt($sig2); $b0 = $sig2; my $pt = ''; foreach my $block (@blocks) { $pt .= $b0 ^ $cipher->decrypt($block); $b0 = $block; } my $result = uncompress($pt); croak "message digest incorrect" unless $sig eq md5($result); my @data = thaw($result); return wantarray ? @data : $data[0]; }; 1; } sub get_key_param { my ($class, @p) = @_; return md5($p[0]) if @p == 1; my %p = @p; my $key = ''; foreach my $k ($class->get_key_methods) { next unless exists $p{$k}; if (my $m = $class->can("key_from_$k")) { $key = $class->$m($p{$k}); last if $key; } } return $key; } sub get_key_default { my ($class, $c) = @_; return md5("$class,$c"); } sub get_key_methods { qw{passphrase passfile file prompt} } sub key_from_passphrase { my ($class, $pass) = @_; return md5($pass); } sub read_file_contents { my ($class, $file) = @_; open my $io, $file or croak "cannot open $file: $!"; local $/; my $data = <$io>; close $io; return $data; } sub key_from_passfile { my ($class, $file) = @_; my $pass = $class->read_file_contents($file); return $class->key_from_passphrase($pass); } sub key_from_file { my ($class, $file) = @_; return $class->read_file_contents($file); } sub key_from_prompt { my ($class, $prompt) = @_; print STDERR "$prompt: "; my $pass = ; chomp $pass; return $class->key_from_passphrase($pass); } 1; libcrypt-simple-perl-0.06.orig/Makefile.PL0000444000175000017500000000062507473264611020736 0ustar morphmorph00000000000000use ExtUtils::MakeMaker; WriteMakefile( 'NAME' => 'Crypt::Simple', 'VERSION_FROM' => 'Simple.pm', 'PREREQ_PM' => { 'Crypt::Blowfish' => 2.06, 'Compress::Zlib' => 1.11, 'MIME::Base64' => 2.11, 'Digest::MD5' => 2.13, 'FreezeThaw' => 0.41, }, ); libcrypt-simple-perl-0.06.orig/MANIFEST0000644000175000017500000000020107543625354020110 0ustar morphmorph00000000000000MANIFEST This list of files Makefile.PL README Simple.pm t/complex.t t/file.t t/multi.t t/passfile.t t/passphrase.t t/single.t