/usr/local/CPAN/Palm-Zetetic-Strip/Palm/Zetetic/Strip/PDB/PasswordV05i.pm
package Palm::Zetetic::Strip::PDB::PasswordV05i;
use strict;
use Palm::PDB;
use Palm::Raw;
use Palm::Zetetic::Strip::CryptV05i;
use vars qw(@ISA $VERSION);
require Exporter;
@ISA = qw(Exporter);
$VERSION = "1.02";
sub new
{
my $class = shift;
my $self = {};
bless $self, $class;
$self->{pdb} = undef;
return $self;
}
sub load
{
my ($self, $file) = @_;
my $pdb;
$pdb = new Palm::PDB;
$pdb->Load($file);
$self->{pdb} = $pdb;
}
sub get_encrypted_password
{
my ($self) = @_;
my $records;
$records = $self->{pdb}->{records};
return $records->[0]->{data};
}
sub verify_password
{
my ($self, $plaintext_password) = @_;
my $encrypted_password;
my $decrypted_password;
my $hashed_password;
my $crypt;
# The encrypted password is the MD5 hash of the plaintext
# password, encrypted. The MD5 hash is only 16 bytes long, so
# only look at the first 16 bytes after decrypting. To verify a
# password, decrypt the current password using the supplied
# password as the key.
$crypt = new Palm::Zetetic::Strip::CryptV05i($plaintext_password);
$hashed_password = $crypt->get_hashed_key();
$encrypted_password = $self->get_encrypted_password();
$decrypted_password = $crypt->decrypt($encrypted_password);
$decrypted_password = substr($decrypted_password,0,16);
if ($decrypted_password eq $hashed_password)
{
return 1;
}
else
{
return 0;
}
}
1;