[BACK]Return to Keyring.pm CVS log [TXT][DIR] Up to [local] / palm / Palm-Keyring / lib / Palm

Diff for /palm/Palm-Keyring/lib/Palm/Keyring.pm between version 1.30 and 1.31

version 1.30, 2007/02/19 01:37:10 version 1.31, 2007/02/19 02:55:35
Line 1 
Line 1 
 package Palm::Keyring;  package Palm::Keyring;
 # $RedRiver: Keyring.pm,v 1.29 2007/02/19 00:22:42 andrew Exp $  # $RedRiver: Keyring.pm,v 1.30 2007/02/19 01:37:10 andrew Exp $
 ########################################################################  ########################################################################
 # Keyring.pm *** Perl class for Keyring for Palm OS databases.  # Keyring.pm *** Perl class for Keyring for Palm OS databases.
 #  #
Line 157 
Line 157 
         my $ivec      = substr $extra, 0, $blocksize;          my $ivec      = substr $extra, 0, $blocksize;
         my $encrypted = substr $extra, $blocksize;          my $encrypted = substr $extra, $blocksize;
   
         if ($self->{options}->{v4compatible}) {          $rec->{name}      = $field->{data};
             $rec->{name} = $field->{data};  
         } else {  
             $rec->{name} = $field;  
         }  
         $rec->{ivec}      = $ivec;          $rec->{ivec}      = $ivec;
         $rec->{encrypted} = $encrypted;          $rec->{encrypted} = $encrypted;
   
Line 191 
Line 187 
         }          }
   
     } elsif ($self->{version} == 5) {      } elsif ($self->{version} == 5) {
         my $field;          my $field = {
         if ($rec->{name}) {              'label_id' => 1,
             if ($self->{options}->{v4compatible}) {              'data'     => $rec->{name},
                 $field = {              'font'     => 0,
                     label    => 'name',          };
                     font     => 0,          my $packed .= _pack_field($field);
                     data     => $rec->{'name'},  
                 };  
             } else {  
                 $field = $rec->{name};  
             }  
         }  
         my $packed = '';  
         if ($field) {  
             $packed = _pack_field($field);  
         }  
         my $len = length $packed;  
         my $blocksize = $CRYPTS[ $self->{appinfo}->{cipher} ]{blocksize};  
   
         $rec->{data} = join '', $packed, $rec->{ivec}, $rec->{encrypted};          $rec->{data} = join '', $packed, $rec->{ivec}, $rec->{encrypted};
   
Line 581 
Line 565 
   
 # Decrypt  # Decrypt
   
 sub Decrypt  sub Decrypt
 {  {
     my $self = shift;      my $self = shift;
     my $rec  = shift;      my $rec  = shift;
Line 1228 
Line 1212 
   
 1;  1;
 __END__  __END__
   
 =head1 NAME  =head1 NAME
   
 Palm::Keyring - Handler for Palm Keyring databases.  Palm::Keyring - Handler for Palm Keyring databases.
Line 1242 
Line 1225 
 It has the standard Palm::PDB methods with 2 additional public methods.  It has the standard Palm::PDB methods with 2 additional public methods.
 Decrypt and Encrypt.  Decrypt and Encrypt.
   
 It currently supports the v4 Keyring databases.  The v5 databases from  It currently supports the v4 Keyring databases.
 the pre-release keyring-2.0 are not supported.  The pre-release v5 databases are mostly supported.  There are definitely some
   bugs,  For example, t/keyring5.t sometimes fails.  I am not sure why yet.
   
 This module doesn't store the decrypted content.  It only keeps it until it  This module doesn't store the decrypted content.  It only keeps it until it
 returns it to you or encrypts it.  returns it to you or encrypts it.
Line 1259 
Line 1243 
     $pdb->Load($file);      $pdb->Load($file);
   
     foreach (0..$#{ $pdb->{records} }) {      foreach (0..$#{ $pdb->{records} }) {
         next if $_ = 0; # skip the password record          # skip the password record for version 4 databases
           next if $_ == 0 && $pdb->{version} == 4;
         my $rec  = $pdb->{records}->[$_];          my $rec  = $pdb->{records}->[$_];
         my $acct = $pdb->Decrypt($rec, $pass);          my $acct = $pdb->Decrypt($rec, $pass);
         print $rec->{name}, ' - ', $acct->{account}, "\n";          print $rec->{name}, ' - ', $acct->{account}, "\n";
Line 1269 
Line 1254 
   
 =head2 new  =head2 new
   
     $pdb = new Palm::Keyring([$password]);      $pdb = new Palm::Keyring([$password[, $version]]);
   
 Create a new PDB, initialized with the various Palm::Keyring fields  Create a new PDB, initialized with the various Palm::Keyring fields
 and an empty record list.  and an empty record list.
Line 1280 
Line 1265 
 If you pass in a password, it will initalize the first record with the encrypted  If you pass in a password, it will initalize the first record with the encrypted
 password.  password.
   
   new() now also takes options in other formats
   
       $pdb = new Palm::Keyring({ key1 => value1,  key2 => value2 });
       $pdb = new Palm::Keyring( -key1 => value1, -key2 => value2);
   
   =head3 Supported options are:
   
   =over
   
   =item password
   
   The password used to initialize the database
   
   =item version
   
   The version of database to create.  Accepts either 4 or 5.  Currently defaults to 4.
   
   =item v4compatible
   
   The format of the fields passed to Encrypt and returned from Decrypt have changed.
   This allows programs to use the newer databases with few changes but with less features.
   
   =item cipher
   
   The cipher to use.  0, 1, 2 or 3.
   
       0 => None
       1 => DES_EDE3
       2 => AES128
       3 => AES256
   
   =item iterations
   
   The number of iterations to encrypt with.
   
   =back
   
 =head2 Encrypt  =head2 Encrypt
   
     $pdb->Encrypt($rec, $acct[, $password]);      $pdb->Encrypt($rec, $acct[, $password]);
Line 1288 
Line 1310 
 used, or with a password that is passed.  used, or with a password that is passed.
   
 $rec is a record from $pdb->{records} or a new_Record().  $rec is a record from $pdb->{records} or a new_Record().
 $acct is a hashref in the format below.  The v4 $acct is a hashref in the format below.
   
     my $acct = {      my $v4acct = {
         name       => $rec->{name},          name       => $rec->{name},
         account    => $account,          account    => $account,
         password   => $password,          password   => $password,
Line 1302 
Line 1324 
         },          },
     };      };
   
   The v5 $acct is an arrayref full of hashrefs that contain each encrypted field.
   
       my $v5acct = [
           {
               'label_id' => 2,
               'data' => 'abcd1234',
               'label' => 'password',
               'font' => 0
           },
           {
               'label_id' => 3,
               'data' => {
                   'month' => 1,
                   'day' => 11,
                   'year' => 107
               },
               'label' => 'lastchange',
               'font' => 0
           },
           {
               'label_id' => 255,
               'data' => 'This is a short note.',
               'label' => 'notes',
               'font' => 0
           }
       ];
   
   
   The account name is stored in $rec->{name} for both v4 and v5 databases.
   It is not returned in the decrypted information for v5.
   
       $rec->{name} = 'account name';
   
 If you have changed anything other than the lastchange, or don't pass in a  If you have changed anything other than the lastchange, or don't pass in a
 lastchange key, Encrypt() will generate a new lastchange date for you.  lastchange key, Encrypt() will generate a new lastchange date for you.
   
Line 1314 
Line 1369 
   
     my $acct = $pdb->Decrypt($rec[, $password]);      my $acct = $pdb->Decrypt($rec[, $password]);
   
 Decrypts the record and returns a hashref for the account as described  Decrypts the record and returns a reference for the account as described
 under Encrypt().  under Encrypt().
   
     foreach (0..$#{ $pdb->{records}) {      foreach (0..$#{ $pdb->{records}) {
         next if $_ == 0;          next if $_ == 0 && $pdb->{version} == 4;
         my $rec = $pdb->{records}->[$_];          my $rec = $pdb->{records}->[$_];
         my $acct = $pdb->Decrypt($rec[, $password]);          my $acct = $pdb->Decrypt($rec);
         # do something with $acct          # do something with $acct
     }      }
   
   
 =head2 Password  =head2 Password
   
     $pdb->Password([$password[, $new_password]]);      $pdb->Password([$password[, $new_password]]);
Line 1387 
Line 1443 
   
 The Keyring for Palm OS website:  The Keyring for Palm OS website:
 L<http://gnukeyring.sourceforge.net/>  L<http://gnukeyring.sourceforge.net/>
   
   The HACKING guide for palm keyring databases:
   L<http://gnukeyring.cvs.sourceforge.net/*checkout*/gnukeyring/keyring/HACKING>
   
 Johan Vromans also has a wxkeyring app that now uses this module, available  Johan Vromans also has a wxkeyring app that now uses this module, available
 from his website at L<http://www.vromans.org/johan/software/sw_palmkeyring.html>  from his website at L<http://www.vromans.org/johan/software/sw_palmkeyring.html>

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.31

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>