File-KeePass
view release on metacpan or search on metacpan
lib/File/KeePass.pm view on Meta::CPAN
my $size = -s $file || die "File $file appears to be empty.\n";
binmode $fh;
read($fh, my $buffer, $size);
close $fh;
die "Could not read entire file contents of $file.\n" if length($buffer) != $size;
return $buffer;
}
sub decrypt_rijndael_cbc {
my ($self, $buffer, $key, $enc_iv) = @_;
#use Crypt::CBC; return Crypt::CBC->new(-cipher => 'Rijndael', -key => $key, -iv => $enc_iv, -regenerate_key => 0, -prepend_iv => 0)->decrypt($buffer);
my $cipher = Crypt::Rijndael->new($key, Crypt::Rijndael::MODE_CBC());
$cipher->set_iv($enc_iv);
$buffer = $cipher->decrypt($buffer);
my $extra = ord(substr $buffer, -1, 1);
substr($buffer, length($buffer) - $extra, $extra, '');
return $buffer;
}
sub encrypt_rijndael_cbc {
my ($self, $buffer, $key, $enc_iv) = @_;
#use Crypt::CBC; return Crypt::CBC->new(-cipher => 'Rijndael', -key => $key, -iv => $enc_iv, -regenerate_key => 0, -prepend_iv => 0)->encrypt($buffer);
my $cipher = Crypt::Rijndael->new($key, Crypt::Rijndael::MODE_CBC());
$cipher->set_iv($enc_iv);
my $extra = (16 - length($buffer) % 16) || 16; # always pad so we can always trim
$buffer .= chr($extra) for 1 .. $extra;
return $cipher->encrypt($buffer);
}
sub unchunksum {
my ($self, $buffer) = @_;
my ($new, $pos) = ('', 0);
while ($pos < length($buffer)) {
( run in 1.554 second using v1.01-cache-2.11-cpan-e1769b4cff6 )