use File::KDBX::Error;
use File::KDBX::IO::Crypt;
use File::KDBX::IO::HmacBlock;
-use File::KDBX::Util qw(:class :empty :load assert_64bit erase_scoped);
+use File::KDBX::Util qw(:class :empty :int :load erase_scoped);
use IO::Handle;
use Scalar::Util qw(looks_like_number);
use boolean qw(:all);
return VMAP_TYPE_BOOL;
}
elsif (looks_like_number($variant) && ($variant + 0) =~ /^\d+$/) {
- assert_64bit;
my $neg = $variant < 0;
- my @b = unpack('L>2', pack('Q>', $variant));
+ my @b = unpack('L>2', scalar reverse pack_Ql($variant));
return VMAP_TYPE_INT64 if $b[0] && $neg;
return VMAP_TYPE_UINT64 if $b[0];
return VMAP_TYPE_INT32 if $neg;
$val = pack('L<', $val);
}
elsif ($type == VMAP_TYPE_UINT64) {
- assert_64bit;
- $val = pack('Q<', $val);
+ $val = pack_Ql($val);
}
elsif ($type == VMAP_TYPE_BOOL) {
$val = pack('C', $val);
$val = pack('l', $val);
}
elsif ($type == VMAP_TYPE_INT64) {
- assert_64bit;
- $val = pack('q<', $val);
+ $val = pack_ql($val);
}
elsif ($type == VMAP_TYPE_STRING) {
$val = encode('UTF-8', $val);
my $cipher = $kdbx->cipher(key => $final_key);
$fh = File::KDBX::IO::Crypt->new($fh, cipher => $cipher);
+ my $got_iv_size = length($kdbx->headers->{+HEADER_ENCRYPTION_IV});
+ my $iv_size = $cipher->iv_size;
+ alert "Encryption IV should be $iv_size bytes long",
+ got => $got_iv_size,
+ expected => $iv_size if $got_iv_size != $iv_size;
+
my $compress = $kdbx->headers->{+HEADER_COMPRESSION_FLAGS};
if ($compress == COMPRESSION_GZIP) {
load_optional('IO::Compress::Gzip');