=================================================================== RCS file: /cvs/palm/Palm-Keyring/lib/Palm/Keyring.pm,v retrieving revision 1.7 retrieving revision 1.9 diff -u -r1.7 -r1.9 --- palm/Palm-Keyring/lib/Palm/Keyring.pm 2006/11/10 16:45:42 1.7 +++ palm/Palm-Keyring/lib/Palm/Keyring.pm 2006/11/10 17:49:51 1.9 @@ -8,8 +8,8 @@ # # This started as Memo.pm, I just made it work for Keyring. # -# $Id: Keyring.pm,v 1.7 2006/11/10 16:45:42 andrew Exp $ -# $RedRiver: Keyring.pm,v 1.6 2006/11/10 16:18:59 andrew Exp $ +# $Id: Keyring.pm,v 1.9 2006/11/10 17:49:51 andrew Exp $ +# $RedRiver: Keyring.pm,v 1.8 2006/11/10 17:31:38 andrew Exp $ use strict; package Palm::Keyring; @@ -27,7 +27,7 @@ # One liner, to allow MakeMaker to work. -$VERSION = do { my @r = (q$Revision: 1.7 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +$VERSION = do { my @r = (q$Revision: 1.9 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; @ISA = qw( Palm::StdAppInfo Palm::Raw ); @@ -323,37 +323,43 @@ } -# XXX Have to make this encrypt as well as decrypting, but w00 h00! -# do null padding on the end of a cleartext if we are going to encrypt it +# XXX It looks like they are using des_ecb2_encrypt so I dunno if that is different sub _crypt3des { my ( $plaintext, $passphrase, $flag ) = @_; $passphrase .= ' ' x (16*3); my $cyphertext = ""; - my $size = length ( $plaintext ); #print "STRING: '$plaintext' - Length: " . length($plaintext) . "\n"; - # This check should see if it is plaintext first, if it is, - # pad it with \000 - # if not, then die - die "record not 8 byte padded" if (length($plaintext) % 8) && ! $flag; - my @C; for ( 0..2 ) { $C[$_] = new Crypt::DES( pack( "H*", substr($passphrase, 16*$_, 16 ))); } + +# XXX From Crypt::TripleDES +# http://search.cpan.org/src/VIPUL/Crypt-TripleDES-0.24/lib/Crypt/TripleDES.pm +# +# for ( 0 .. (($size)/8) -1 ) { +# my $pt = substr( $plaintext, $_*8, 8 ); +# $pt = Crypt::PPDES::des_ecb_encrypt( $flag ? $keyvecs{0} : $keyvecs{2}, $flag, $pt ); +# $pt = Crypt::PPDES::des_ecb_encrypt( $keyvecs{1}, (not $flag), $pt ); +# $pt = Crypt::PPDES::des_ecb_encrypt( $flag ? $keyvecs{2} : $keyvecs{0}, $flag, $pt ); +# $cyphertext .= $pt; +# } + for ( 0 .. (($size)/8) - 1) { my $pt = substr( $plaintext, $_*8, 8 ); #print "PT: '$pt' - Length: " . length($pt) . "\n"; if (length($pt) < 8) { + die "record not 8 byte padded" if $flag == DECRYPT; my $len = 8 - length($pt); - print "LENGTH: $len\n"; - print "Binary: '" . unpack("b*", $pt) . "'\n"; + #print "LENGTH: $len\n"; + #print "Binary: '" . unpack("b*", $pt) . "'\n"; $pt .= (chr(0) x $len);# . $pt; - print "Binary: '" . unpack("b*", $pt) . "'\n"; + #print "Binary: '" . unpack("b*", $pt) . "'\n"; #print "PT: '$pt' - Length: " . length($pt) . "\n"; } $pt = $C[0]->decrypt( $pt );