version 1.7, 2006/11/10 16:45:42 |
version 1.8, 2006/11/10 17:31:38 |
|
|
# This started as Memo.pm, I just made it work for Keyring. |
# This started as Memo.pm, I just made it work for Keyring. |
# |
# |
# $Id$ |
# $Id$ |
# $RedRiver: Keyring.pm,v 1.6 2006/11/10 16:18:59 andrew Exp $ |
# $RedRiver: Keyring.pm,v 1.7 2006/11/10 16:45:42 andrew Exp $ |
|
|
use strict; |
use strict; |
package Palm::Keyring; |
package Palm::Keyring; |
|
|
} |
} |
|
|
|
|
# XXX Have to make this encrypt as well as decrypting, but w00 h00! |
# XXX It looks like they are using des_ecb2_encrypt so I dunno if that is different |
# do null padding on the end of a cleartext if we are going to encrypt it |
|
sub _crypt3des { |
sub _crypt3des { |
my ( $plaintext, $passphrase, $flag ) = @_; |
my ( $plaintext, $passphrase, $flag ) = @_; |
|
|
$passphrase .= ' ' x (16*3); |
$passphrase .= ' ' x (16*3); |
my $cyphertext = ""; |
my $cyphertext = ""; |
|
|
|
|
my $size = length ( $plaintext ); |
my $size = length ( $plaintext ); |
#print "STRING: '$plaintext' - Length: " . length($plaintext) . "\n"; |
#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; |
|
|
|
my @C; |
my @C; |
for ( 0..2 ) { |
for ( 0..2 ) { |
$C[$_] = new Crypt::DES( pack( "H*", substr($passphrase, 16*$_, 16 ))); |
$C[$_] = new Crypt::DES( pack( "H*", substr($passphrase, 16*$_, 16 ))); |
|
|
my $pt = substr( $plaintext, $_*8, 8 ); |
my $pt = substr( $plaintext, $_*8, 8 ); |
#print "PT: '$pt' - Length: " . length($pt) . "\n"; |
#print "PT: '$pt' - Length: " . length($pt) . "\n"; |
if (length($pt) < 8) { |
if (length($pt) < 8) { |
|
die "record not 8 byte padded" if $flag == DECRYPT; |
my $len = 8 - length($pt); |
my $len = 8 - length($pt); |
print "LENGTH: $len\n"; |
#print "LENGTH: $len\n"; |
print "Binary: '" . unpack("b*", $pt) . "'\n"; |
#print "Binary: '" . unpack("b*", $pt) . "'\n"; |
$pt .= (chr(0) x $len);# . $pt; |
$pt .= (chr(0) x $len);# . $pt; |
print "Binary: '" . unpack("b*", $pt) . "'\n"; |
#print "Binary: '" . unpack("b*", $pt) . "'\n"; |
#print "PT: '$pt' - Length: " . length($pt) . "\n"; |
#print "PT: '$pt' - Length: " . length($pt) . "\n"; |
} |
} |
$pt = $C[0]->decrypt( $pt ); |
$pt = $C[0]->decrypt( $pt ); |