version 1.31, 2007/02/19 02:55:35 |
version 1.32, 2007/02/19 03:33:56 |
|
|
package Palm::Keyring; |
package Palm::Keyring; |
# $RedRiver: Keyring.pm,v 1.30 2007/02/19 01:37:10 andrew Exp $ |
# $RedRiver: Keyring.pm,v 1.31 2007/02/19 02:55:35 andrew Exp $ |
######################################################################## |
######################################################################## |
# Keyring.pm *** Perl class for Keyring for Palm OS databases. |
# Keyring.pm *** Perl class for Keyring for Palm OS databases. |
# |
# |
|
|
use warnings; |
use warnings; |
|
|
use Carp; |
use Carp; |
use Data::Dumper; |
|
|
|
use base qw/ Palm::StdAppInfo /; |
use base qw/ Palm::StdAppInfo /; |
|
|
use Digest::HMAC_SHA1 qw(hmac_sha1); |
|
use Digest::SHA1 qw(sha1); |
|
use Crypt::CBC; |
|
|
|
use Digest::MD5 qw(md5); |
|
use Crypt::DES; |
|
|
|
my $ENCRYPT = 1; |
my $ENCRYPT = 1; |
my $DECRYPT = 0; |
my $DECRYPT = 0; |
my $MD5_CBLOCK = 64; |
my $MD5_CBLOCK = 64; |
|
|
|
|
sub _encrypt_v4 |
sub _encrypt_v4 |
{ |
{ |
|
require Crypt::CBC; |
|
|
my $new = shift; |
my $new = shift; |
my $old = shift; |
my $old = shift; |
my $digest = shift; |
my $digest = shift; |
|
|
|
|
sub _decrypt_v5 |
sub _decrypt_v5 |
{ |
{ |
|
require Crypt::CBC; |
my $encrypted = shift; |
my $encrypted = shift; |
my $key = shift; |
my $key = shift; |
my $cipher = shift; |
my $cipher = shift; |
|
|
|
|
sub _password_verify_v4 |
sub _password_verify_v4 |
{ |
{ |
|
require Digest::MD5; |
|
import Digest::MD5 qw(md5); |
|
|
my $pass = shift; |
my $pass = shift; |
my $data = shift; |
my $data = shift; |
|
|
|
|
|
|
sub _password_update_v4 |
sub _password_update_v4 |
{ |
{ |
|
require Digest::MD5; |
|
import Digest::MD5 qw(md5); |
|
|
my $pass = shift; |
my $pass = shift; |
|
|
if (! defined $pass) { croak('No password specified!'); }; |
if (! defined $pass) { croak('No password specified!'); }; |
|
|
{ |
{ |
my ($pass, $salt, $iter, $keylen, $dop) = @_; |
my ($pass, $salt, $iter, $keylen, $dop) = @_; |
|
|
|
require Digest::HMAC_SHA1; |
|
import Digest::HMAC_SHA1 qw(hmac_sha1); |
|
require Digest::SHA1; |
|
import Digest::SHA1 qw(sha1); |
|
|
my $key = _pbkdf2( $pass, $salt, $iter, $keylen, \&hmac_sha1 ); |
my $key = _pbkdf2( $pass, $salt, $iter, $keylen, \&hmac_sha1 ); |
if ($dop) { $key = DES_odd_parity($key); } |
if ($dop) { $key = DES_odd_parity($key); } |
|
|
|
|
|
|
sub _crypt3des |
sub _crypt3des |
{ |
{ |
|
require Crypt::DES; |
|
|
my ( $plaintext, $passphrase, $flag ) = @_; |
my ( $plaintext, $passphrase, $flag ) = @_; |
|
|
$passphrase .= $SPACE x ( 16 * 3 ); |
$passphrase .= $SPACE x ( 16 * 3 ); |