=================================================================== RCS file: /cvs/palm/Palm-Keyring/lib/Palm/Keyring.pm,v retrieving revision 1.3 retrieving revision 1.5 diff -u -r1.3 -r1.5 --- palm/Palm-Keyring/lib/Palm/Keyring.pm 2006/02/02 00:59:08 1.3 +++ palm/Palm-Keyring/lib/Palm/Keyring.pm 2006/11/10 04:52:27 1.5 @@ -8,8 +8,8 @@ # # This started as Memo.pm, I just made it work for Keyring. # -# $Id: Keyring.pm,v 1.3 2006/02/02 00:59:08 andrew Exp $ -# $RedRiver: Keyring.pm,v 1.2 2006/01/31 23:03:39 andrew Exp $ +# $Id: Keyring.pm,v 1.5 2006/11/10 04:52:27 andrew Exp $ +# $RedRiver: Keyring.pm,v 1.4 2006/11/10 04:21:17 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.3 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +$VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; @ISA = qw( Palm::StdAppInfo Palm::Raw ); @@ -65,17 +65,16 @@ my $classname = shift; my $pass = shift; + # Create a generic PDB. No need to rebless it, though. my $self = $classname->SUPER::new(@_); - # Create a generic PDB. No need to rebless it, - # though. $self->{name} = "Keys-Gtkr"; # Default $self->{creator} = "Gtkr"; $self->{type} = "Gkyr"; + # The PDB is not a resource database by + # default, but it's worth emphasizing, + # since MemoDB is explicitly not a PRC. $self->{attributes}{resource} = 0; - # The PDB is not a resource database by - # default, but it's worth emphasizing, - # since MemoDB is explicitly not a PRC. # Initialize the AppInfo block $self->{appinfo} = {}; @@ -87,17 +86,15 @@ $self->{version} = 4; # Give the PDB the first record that will hold the encrypted password - $self->{records} = [ - { - 'category' => 0, - 'attributes' => { - 'private' => 1, - 'Secret' => 1, - 'Dirty' => 1, - 'dirty' => 1 - }, + $self->{records} = [ { + 'category' => 0, + 'attributes' => { + 'private' => 1, + 'Secret' => 1, + 'Dirty' => 1, + 'dirty' => 1 }, - ]; + }, ]; if ($pass) { $self->Encrypt($pass); @@ -202,14 +199,14 @@ $record->{plaintext}->{password} = defined $password ? $password : ''; $record->{plaintext}->{description} = defined $description ? $description : ''; - print "Name: '$name'\n"; - print "Encrypted: '$encrypted' - Length: " . length($encrypted) . "\n"; + #print "Name: '$name'\n"; + #print "Encrypted: '$encrypted' - Length: " . length($encrypted) . "\n"; #print "Hex: '" . unpack("H*", $encrypted) . "'\n"; #print "Binary: '" . unpack("b*", $encrypted) . "'\n"; - print "Decrypted: '$decrypted' - Length: " . length($decrypted) . "\n"; - print "Hex: '" . unpack("H*", $decrypted) . "'\n"; - print "Binary: '" . unpack("b*", $decrypted) . "'\n"; - print "\n"; + #print "Decrypted: '$decrypted' - Length: " . length($decrypted) . "\n"; + #print "Hex: '" . unpack("H*", $decrypted) . "'\n"; + #print "Binary: '" . unpack("b*", $decrypted) . "'\n"; + #print "\n"; #print "Extra: $extra\n"; #-------------------------------------------------- # print "Account: $account\n"; @@ -252,7 +249,7 @@ my $self = shift; my $pass = shift; - die "No password specified!" unless defined $pass; + die "No password specified!" unless $pass; $self->{password} = $pass; # AFAIK the thing we use to test the password is @@ -292,7 +289,7 @@ my $self = shift; my $pass = shift; - die "No password specified!" unless defined $pass; + die "No password specified!" unless $pass; # if the database already has a password in it if ($self->{records}->[0]->{data}) { @@ -327,45 +324,45 @@ # 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 sub _crypt3des { - my ( $self, $plaintext, $flag ) = @_; + my ( $self, $plaintext, $flag ) = @_; my $passphrase = $self->{digest} || $self->_calc_keys(); - $passphrase .= ' ' x (16*3); - my $cyphertext = ""; + $passphrase .= ' ' x (16*3); + my $cyphertext = ""; - my $size = length ( $plaintext ); - print "STRING: '$plaintext' - Length: " . length($plaintext) . "\n"; + 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; + # 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 ))); - } + my @C; + for ( 0..2 ) { + $C[$_] = new Crypt::DES( pack( "H*", substr($passphrase, 16*$_, 16 ))); + } - for ( 0 .. (($size)/8) - 1) { - my $pt = substr( $plaintext, $_*8, 8 ); - print "PT: '$pt' - Length: " . length($pt) . "\n"; - if (length($pt) < 8) { - my $len = 8 - length($pt); - print "LENGTH: $len\n"; - print "Binary: '" . unpack("b*", $pt) . "'\n"; - $pt .= (chr(0) x $len);# . $pt; - print "Binary: '" . unpack("b*", $pt) . "'\n"; - print "PT: '$pt' - Length: " . length($pt) . "\n"; - } - $pt = $C{0}->decrypt( $pt ); - $pt = $C{1}->encrypt( $pt ); - $pt = $C{2}->decrypt( $pt ); - print "PT: '$pt' - Length: " . length($pt) . "\n"; - $cyphertext .= $pt; - } + for ( 0 .. (($size)/8) - 1) { + my $pt = substr( $plaintext, $_*8, 8 ); + #print "PT: '$pt' - Length: " . length($pt) . "\n"; + if (length($pt) < 8) { + my $len = 8 - length($pt); + print "LENGTH: $len\n"; + print "Binary: '" . unpack("b*", $pt) . "'\n"; + $pt .= (chr(0) x $len);# . $pt; + print "Binary: '" . unpack("b*", $pt) . "'\n"; + #print "PT: '$pt' - Length: " . length($pt) . "\n"; + } + $pt = $C[0]->decrypt( $pt ); + $pt = $C[1]->encrypt( $pt ); + $pt = $C[2]->decrypt( $pt ); + #print "PT: '$pt' - Length: " . length($pt) . "\n"; + $cyphertext .= $pt; + } - return substr ( $cyphertext, 0, $size ); + return substr ( $cyphertext, 0, $size ); } 1;