X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FFile%2FKDBX%2FLoader%2FV3.pm;h=687215a00caff562637ffd507e23c4e752ca084b;hb=eb5adf956fc6b9285b43ce6965eea728573e7864;hp=68d7f9ce0c35389592889415ae8178aa3819419d;hpb=f63182fc62b25269b1c38588dca2b3535ed1a1a2;p=chaz%2Fp5-File-KDBX diff --git a/lib/File/KDBX/Loader/V3.pm b/lib/File/KDBX/Loader/V3.pm index 68d7f9c..687215a 100644 --- a/lib/File/KDBX/Loader/V3.pm +++ b/lib/File/KDBX/Loader/V3.pm @@ -20,9 +20,9 @@ use Crypt::Digest qw(digest_data); use Encode qw(decode); use File::KDBX::Constants qw(:header :compression :kdf); use File::KDBX::Error; -use File::KDBX::Util qw(:io assert_64bit erase_scoped); -use PerlIO::via::File::KDBX::Crypt; -use PerlIO::via::File::KDBX::HashBlock; +use File::KDBX::IO::Crypt; +use File::KDBX::IO::HashBlock; +use File::KDBX::Util qw(:io :load assert_64bit erase_scoped); use namespace::clean; use parent 'File::KDBX::Loader'; @@ -127,7 +127,7 @@ sub _read_body { push @cleanup, erase_scoped $final_key; my $cipher = $kdbx->cipher(key => $final_key); - PerlIO::via::File::KDBX::Crypt->push($fh, $cipher); + $fh = File::KDBX::IO::Crypt->new($fh, cipher => $cipher); read_all $fh, my $start_bytes, 32 or throw 'Failed to read starting bytes'; @@ -138,21 +138,21 @@ sub _read_body { $kdbx->key($key); - PerlIO::via::File::KDBX::HashBlock->push($fh); + $fh = File::KDBX::IO::HashBlock->new($fh); my $compress = $kdbx->headers->{+HEADER_COMPRESSION_FLAGS}; if ($compress == COMPRESSION_GZIP) { - require PerlIO::via::File::KDBX::Compression; - PerlIO::via::File::KDBX::Compression->push($fh); + load_optional('IO::Uncompress::Gunzip'); + $fh = IO::Uncompress::Gunzip->new($fh) + or throw "Failed to initialize compression library: $IO::Uncompress::Gunzip::GunzipError", + error => $IO::Uncompress::Gunzip::GunzipError; } elsif ($compress != COMPRESSION_NONE) { throw "Unsupported compression ($compress)\n", compression_flags => $compress; } $self->_read_inner_body($fh); - - binmode($fh, ':pop') if $compress; - binmode($fh, ':pop:pop'); + close($fh); if (my $header_hash = $kdbx->meta->{header_hash}) { my $got_header_hash = digest_data('SHA256', $header_data);