version 1.58, 2008/09/19 03:50:05 |
version 1.59, 2008/09/19 06:39:07 |
|
|
package Palm::Keyring; |
package Palm::Keyring; |
# $RedRiver: Keyring.pm,v 1.57 2008/09/19 02:04:34 andrew Exp $ |
# $RedRiver: Keyring.pm,v 1.58 2008/09/19 02:50:05 andrew Exp $ |
######################################################################## |
######################################################################## |
# Keyring.pm *** Perl class for Keyring for Palm OS databases. |
# Keyring.pm *** Perl class for Keyring for Palm OS databases. |
# |
# |
|
|
# Nothing extra for version 4 |
# Nothing extra for version 4 |
|
|
} elsif ($self->{version} == 5) { |
} elsif ($self->{version} == 5) { |
_parse_appinfo_v5($appinfo) || return; |
_parse_appinfo_v5($appinfo); |
|
|
} else { |
} else { |
croak "Unsupported Version $self->{version}"; |
croak "Unsupported Version $self->{version}"; |
|
|
{ |
{ |
my $appinfo = shift; |
my $appinfo = shift; |
|
|
if (! exists $appinfo->{other}) { |
croak 'Corrupt appinfo? no {other}' if ! $appinfo->{other}; |
# XXX Corrupt appinfo? |
|
return; |
|
} |
|
|
|
my $unpackstr |
my $unpackstr |
= ("C1" x 8) # 8 uint8s in an array for the salt |
= ("C1" x 8) # 8 uint8s in an array for the salt |
|
|
my $self = shift; |
my $self = shift; |
my $rec = shift; |
my $rec = shift; |
my $pass = shift || $self->{password}; |
my $pass = shift || $self->{password}; |
|
|
|
if ( !$rec ) { |
|
croak('Needed parameter [record] not passed!'); |
|
} |
|
|
my $data = shift || $rec->{plaintext}; |
my $data = shift || $rec->{plaintext}; |
my $ivec = shift; |
my $ivec = shift; |
|
|
|
|
if ( ! $pass && ! $self->{appinfo}->{key}) { |
if ( ! $pass && ! $self->{appinfo}->{key}) { |
croak("password not set!\n"); |
croak('password not set!'); |
} |
} |
|
|
if ( ! $rec) { |
|
croak("Needed parameter 'record' not passed!\n"); |
|
} |
|
|
|
if ( ! $data) { |
if ( ! $data) { |
croak("Needed 'plaintext' not passed!\n"); |
croak('Needed parameter [plaintext] not passed!'); |
} |
} |
|
|
if ( $pass && ! $self->Password($pass)) { |
if ( $pass && ! $self->Password($pass)) { |
croak("Incorrect Password!\n"); |
croak('Incorrect Password!'); |
} |
} |
|
|
my $acct; |
my $acct; |
|
|
my $c = crypts($cipher) or croak('Unknown cipher ' . $cipher); |
my $c = crypts($cipher) or croak('Unknown cipher ' . $cipher); |
|
|
if (! defined $ivec) { |
if (! defined $ivec) { |
$ivec = pack("C*",map {rand(256)} 1..$c->{blocksize}); |
while (! $ivec) { |
|
$ivec = pack("C*",map {rand(256)} 1..$c->{blocksize}); |
|
} |
} |
} |
|
|
my $changed = 0; |
my $changed = 0; |