Revision history for File-KDBX.
+0.905 2022-08-06 12:12:42-0600
+ * Declare Time::Local 1.19 as a required dependency.
+ * Declare CryptX 0.055 as a required dependency. Thanks HIGHTOWE.
+ * Fixed minor documentation errors.
+
0.904 2022-07-07 21:51:17-0600
* Use expanded title, username in OTP parameters.
"Carp" : "0",
"Crypt::Argon2" : "0",
"Crypt::Cipher" : "0",
+ "Crypt::Cipher::AES" : "0",
"Crypt::Digest" : "0",
"Crypt::Mac::HMAC" : "0",
"Crypt::Misc" : "0.049",
"Crypt::Mode::CBC" : "0",
"Crypt::PRNG" : "0",
+ "Crypt::Stream::ChaCha" : "0.048",
+ "Crypt::Stream::Salsa20" : "0.055",
"Data::Dumper" : "0",
"Devel::GlobalDestruction" : "0",
"Encode" : "0",
"Storable" : "0",
"Symbol" : "0",
"Text::ParseWords" : "0",
+ "Time::Local" : "1.19",
"Time::Piece" : "1.33",
"XML::LibXML" : "0",
"XML::LibXML::Reader" : "0",
"perl" : "5.010",
"strict" : "0",
"warnings" : "0"
+ },
+ "suggests" : {
+ "Crypt::Stream::Serpent" : "0.055",
+ "Crypt::Stream::Twofish" : "0"
}
},
"test" : {
"provides" : {
"File::KDBX" : {
"file" : "lib/File/KDBX.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Cipher" : {
"file" : "lib/File/KDBX/Cipher.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Cipher::CBC" : {
"file" : "lib/File/KDBX/Cipher/CBC.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Cipher::Stream" : {
"file" : "lib/File/KDBX/Cipher/Stream.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Constants" : {
"file" : "lib/File/KDBX/Constants.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper" : {
"file" : "lib/File/KDBX/Dumper.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper::KDB" : {
"file" : "lib/File/KDBX/Dumper/KDB.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper::Raw" : {
"file" : "lib/File/KDBX/Dumper/Raw.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper::V3" : {
"file" : "lib/File/KDBX/Dumper/V3.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper::V4" : {
"file" : "lib/File/KDBX/Dumper/V4.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Dumper::XML" : {
"file" : "lib/File/KDBX/Dumper/XML.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Entry" : {
"file" : "lib/File/KDBX/Entry.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Error" : {
"file" : "lib/File/KDBX/Error.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Group" : {
"file" : "lib/File/KDBX/Group.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::IO" : {
"file" : "lib/File/KDBX/IO.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::IO::Crypt" : {
"file" : "lib/File/KDBX/IO/Crypt.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::IO::HashBlock" : {
"file" : "lib/File/KDBX/IO/HashBlock.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::IO::HmacBlock" : {
"file" : "lib/File/KDBX/IO/HmacBlock.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Iterator" : {
"file" : "lib/File/KDBX/Iterator.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::KDF" : {
"file" : "lib/File/KDBX/KDF.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::KDF::AES" : {
"file" : "lib/File/KDBX/KDF/AES.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::KDF::Argon2" : {
"file" : "lib/File/KDBX/KDF/Argon2.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key" : {
"file" : "lib/File/KDBX/Key.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key::ChallengeResponse" : {
"file" : "lib/File/KDBX/Key/ChallengeResponse.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key::Composite" : {
"file" : "lib/File/KDBX/Key/Composite.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key::File" : {
"file" : "lib/File/KDBX/Key/File.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key::Password" : {
"file" : "lib/File/KDBX/Key/Password.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Key::YubiKey" : {
"file" : "lib/File/KDBX/Key/YubiKey.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader" : {
"file" : "lib/File/KDBX/Loader.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader::KDB" : {
"file" : "lib/File/KDBX/Loader/KDB.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader::Raw" : {
"file" : "lib/File/KDBX/Loader/Raw.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader::V3" : {
"file" : "lib/File/KDBX/Loader/V3.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader::V4" : {
"file" : "lib/File/KDBX/Loader/V4.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Loader::XML" : {
"file" : "lib/File/KDBX/Loader/XML.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Object" : {
"file" : "lib/File/KDBX/Object.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Safe" : {
"file" : "lib/File/KDBX/Safe.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Transaction" : {
"file" : "lib/File/KDBX/Transaction.pm",
- "version" : "0.904"
+ "version" : "0.905"
},
"File::KDBX::Util" : {
"file" : "lib/File/KDBX/Util.pm",
- "version" : "0.904"
+ "version" : "0.905"
}
},
"release_status" : "stable",
"web" : "https://github.com/chazmcgarvey/File-KDBX"
}
},
- "version" : "0.904",
+ "version" : "0.905",
"x_authority" : "cpan:CCM",
"x_generated_by_perl" : "v5.36.0",
"x_serialization_backend" : "Cpanel::JSON::XS version 4.30",
provides:
File::KDBX:
file: lib/File/KDBX.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Cipher:
file: lib/File/KDBX/Cipher.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Cipher::CBC:
file: lib/File/KDBX/Cipher/CBC.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Cipher::Stream:
file: lib/File/KDBX/Cipher/Stream.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Constants:
file: lib/File/KDBX/Constants.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper:
file: lib/File/KDBX/Dumper.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper::KDB:
file: lib/File/KDBX/Dumper/KDB.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper::Raw:
file: lib/File/KDBX/Dumper/Raw.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper::V3:
file: lib/File/KDBX/Dumper/V3.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper::V4:
file: lib/File/KDBX/Dumper/V4.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Dumper::XML:
file: lib/File/KDBX/Dumper/XML.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Entry:
file: lib/File/KDBX/Entry.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Error:
file: lib/File/KDBX/Error.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Group:
file: lib/File/KDBX/Group.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::IO:
file: lib/File/KDBX/IO.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::IO::Crypt:
file: lib/File/KDBX/IO/Crypt.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::IO::HashBlock:
file: lib/File/KDBX/IO/HashBlock.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::IO::HmacBlock:
file: lib/File/KDBX/IO/HmacBlock.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Iterator:
file: lib/File/KDBX/Iterator.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::KDF:
file: lib/File/KDBX/KDF.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::KDF::AES:
file: lib/File/KDBX/KDF/AES.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::KDF::Argon2:
file: lib/File/KDBX/KDF/Argon2.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key:
file: lib/File/KDBX/Key.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key::ChallengeResponse:
file: lib/File/KDBX/Key/ChallengeResponse.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key::Composite:
file: lib/File/KDBX/Key/Composite.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key::File:
file: lib/File/KDBX/Key/File.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key::Password:
file: lib/File/KDBX/Key/Password.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Key::YubiKey:
file: lib/File/KDBX/Key/YubiKey.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader:
file: lib/File/KDBX/Loader.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader::KDB:
file: lib/File/KDBX/Loader/KDB.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader::Raw:
file: lib/File/KDBX/Loader/Raw.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader::V3:
file: lib/File/KDBX/Loader/V3.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader::V4:
file: lib/File/KDBX/Loader/V4.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Loader::XML:
file: lib/File/KDBX/Loader/XML.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Object:
file: lib/File/KDBX/Object.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Safe:
file: lib/File/KDBX/Safe.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Transaction:
file: lib/File/KDBX/Transaction.pm
- version: '0.904'
+ version: '0.905'
File::KDBX::Util:
file: lib/File/KDBX/Util.pm
- version: '0.904'
+ version: '0.905'
recommends:
Compress::Raw::Zlib: '0'
File::KDBX::XS: '0'
Carp: '0'
Crypt::Argon2: '0'
Crypt::Cipher: '0'
+ Crypt::Cipher::AES: '0'
Crypt::Digest: '0'
Crypt::Mac::HMAC: '0'
Crypt::Misc: '0.049'
Crypt::Mode::CBC: '0'
Crypt::PRNG: '0'
+ Crypt::Stream::ChaCha: '0.048'
+ Crypt::Stream::Salsa20: '0.055'
Data::Dumper: '0'
Devel::GlobalDestruction: '0'
Encode: '0'
Storable: '0'
Symbol: '0'
Text::ParseWords: '0'
+ Time::Local: '1.19'
Time::Piece: '1.33'
XML::LibXML: '0'
XML::LibXML::Reader: '0'
bugtracker: https://github.com/chazmcgarvey/File-KDBX/issues
homepage: https://github.com/chazmcgarvey/File-KDBX
repository: https://github.com/chazmcgarvey/File-KDBX.git
-version: '0.904'
+version: '0.905'
x_authority: cpan:CCM
x_generated_by_perl: v5.36.0
x_serialization_backend: 'YAML::Tiny version 1.73'
"Carp" => 0,
"Crypt::Argon2" => 0,
"Crypt::Cipher" => 0,
+ "Crypt::Cipher::AES" => 0,
"Crypt::Digest" => 0,
"Crypt::Mac::HMAC" => 0,
"Crypt::Misc" => "0.049",
"Crypt::Mode::CBC" => 0,
"Crypt::PRNG" => 0,
+ "Crypt::Stream::ChaCha" => "0.048",
+ "Crypt::Stream::Salsa20" => "0.055",
"Data::Dumper" => 0,
"Devel::GlobalDestruction" => 0,
"Encode" => 0,
"Storable" => 0,
"Symbol" => 0,
"Text::ParseWords" => 0,
+ "Time::Local" => "1.19",
"Time::Piece" => "1.33",
"XML::LibXML" => 0,
"XML::LibXML::Reader" => 0,
"lib" => 0,
"utf8" => 0
},
- "VERSION" => "0.904",
+ "VERSION" => "0.905",
"test" => {
"TESTS" => "t/*.t"
}
"Carp" => 0,
"Crypt::Argon2" => 0,
"Crypt::Cipher" => 0,
+ "Crypt::Cipher::AES" => 0,
"Crypt::Digest" => 0,
"Crypt::Mac::HMAC" => 0,
"Crypt::Misc" => "0.049",
"Crypt::Mode::CBC" => 0,
"Crypt::PRNG" => 0,
+ "Crypt::Stream::ChaCha" => "0.048",
+ "Crypt::Stream::Salsa20" => "0.055",
"Data::Dumper" => 0,
"Devel::GlobalDestruction" => 0,
"Encode" => 0,
"Test::More" => "1.001004_001",
"Test::Warnings" => 0,
"Text::ParseWords" => 0,
+ "Time::Local" => "1.19",
"Time::Piece" => "1.33",
"XML::LibXML" => 0,
"XML::LibXML::Reader" => 0,
VERSION
- version 0.904
+ version 0.905
SYNOPSIS
$kdbx->add_entry($entry, %options);
$kdbx->add_entry(%entry_attributes, %options);
- Add a entry to a database. This is equivalent to identifying a parent
+ Add an entry to a database. This is equivalent to identifying a parent
group and calling "add_entry" in File::KDBX::Group on the parent group,
forwarding the arguments. Available options:
keep (default: value of "history_max_size", no limit: -1)
* max_age - Maximum age (in days) of historical entries to keep
- (default: 365, no limit: -1)
+ (default: value of "maintenance_history_days", no limit: -1)
randomize_seeds
Randomizing these values has no effect on a loaded database. These are
only used when a database is dumped. You normally do not need to call
- this method explicitly because the dumper does it explicitly by
- default.
+ this method explicitly because the dumper does it for you by default.
key
use boolean;
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our $WARNINGS = 1;
fieldhashes \my (%SAFE, %KEYS);
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
$kdbx->add_entry($entry, %options);
$kdbx->add_entry(%entry_attributes, %options);
-Add a entry to a database. This is equivalent to identifying a parent group and calling
+Add an entry to a database. This is equivalent to identifying a parent group and calling
L<File::KDBX::Group/add_entry> on the parent group, forwarding the arguments. Available options:
=over 4
=item *
-C<max_age> - Maximum age (in days) of historical entries to keep (default: 365, no limit: -1)
+C<max_age> - Maximum age (in days) of historical entries to keep (default: value of L</maintenance_history_days>, no limit: -1)
=back
=back
Randomizing these values has no effect on a loaded database. These are only used when a database is dumped.
-You normally do not need to call this method explicitly because the dumper does it explicitly by default.
+You normally do not need to call this method explicitly because the dumper does it for you by default.
=head2 key
use Scalar::Util qw(looks_like_number);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
my %CIPHERS;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Cipher';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has key_size => 32;
sub iv_size { 16 }
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Cipher';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has 'counter', is => 'ro', default => 0;
$counter = int($offset / 64);
$pos = $offset % 64;
}
+ load $pkg;
my $s = $pkg->new($self->key, $self->iv, $counter);
# seek to correct position within block
$s->keystream($pos) if $pos;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
use Scalar::Util qw(dualvar);
use namespace::clean -except => 'import';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
BEGIN {
my %CONSTANTS = (
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
use Scalar::Util qw(looks_like_number openhandle);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub new {
=head1 VERSION
-version 0.904
+version 0.905
=head1 ATTRIBUTES
extends 'File::KDBX::Dumper';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _write_magic_numbers { '' }
sub _write_headers { '' }
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::Dumper';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _dump {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Dumper';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _write_headers {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 BUGS
extends 'File::KDBX::Dumper';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has _binaries_written => {}, is => 'ro';
=head1 VERSION
-version 0.904
+version 0.905
=head1 BUGS
extends 'File::KDBX::Dumper';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has allow_protection => 1;
=head1 VERSION
-version 0.904
+version 0.905
=head1 ATTRIBUTES
extends 'File::KDBX::Object';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
my $PLACEHOLDER_MAX_DEPTH = 10;
my %PLACEHOLDERS;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
use Scalar::Util qw(blessed looks_like_number);
use namespace::clean -except => 'import';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our @EXPORT = qw(alert error throw);
=head1 VERSION
-version 0.904
+version 0.905
=head1 ATTRIBUTES
extends 'File::KDBX::Object';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
# has uuid => sub { generate_uuid(printable => 1) };
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'IO::Handle';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _croak { require Carp; goto &Carp::croak }
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::IO';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our $BUFFER_SIZE = 16384;
our $ERROR;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::IO';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our $ALGORITHM = 'SHA256';
our $BLOCK_SIZE = 1048576; # 1MiB
our $ERROR;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::IO';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our $BLOCK_SIZE = 1048576; # 1MiB
our $ERROR;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
BEGIN { mark_as_loaded('Iterator::Simple::Iterator') }
extends 'Iterator::Simple::Iterator';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub new {
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
use Scalar::Util qw(blessed);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
my %KDFS;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::KDF';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
# Rounds higher than this are eligible for forking:
my $FORK_OPTIMIZATION_THRESHOLD = 100_000;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::KDF';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub salt { $_[0]->{+KDF_PARAM_ARGON2_SALT} or throw 'Salt is not set' }
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
use Scalar::Util qw(blessed openhandle);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
fieldhashes \my %SAFE;
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::Key';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub init {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Key';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub init {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Key';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has 'type', is => 'ro';
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Key';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub init {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Key::ChallengeResponse';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
# It can take some time for the USB device to be ready again, so we can retry a few times.
our $RETRY_COUNT = 5;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
$device = $key->device($device);
Get or set the device number, which is the index number starting and incrementing from zero assigned
-to the YubiKey device. If there is only one detected YubiKey device, it's number is C<0>.
+to the YubiKey device. If there is only one detected YubiKey device, its number is C<0>.
Defaults to C<0>.
@keys = File::KDBX::Key::YubiKey->scan(%options);
Find connected, configured YubiKeys that are capable of responding to a challenge. This can take several
-second.
+seconds.
Options:
This doesn't work yet on Windows, probably. The hangup is pretty silly: IPC. Theoretically it would work if
C<run_forked> from L<IPC::Cmd> worked in Windows, but it probably doesn't. I spent a couple hours applying
various quirks to L<IPC::Open3> and L<IPC::Cmd> implementations but never quite got it to worked reliably
-without deadlocks. Maybe I'll revisit this later. Hit me up so I know if there's demand.
+without deadlocks. Maybe I'll revisit this later. Hit me up so I know if there's interest.
It would also be possible to implement this as an XS module that incorporated ykcore, using libusb-1 which
would probably make it more portable with Windows. Perhaps if I get around to it.
use Scalar::Util qw(looks_like_number openhandle);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub new {
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::Loader';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
my $DEFAULT_EXPIRATION = Time::Piece->strptime('2999-12-31 23:59:59', '%Y-%m-%d %H:%M:%S');
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
extends 'File::KDBX::Loader';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _read {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
extends 'File::KDBX::Loader';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _read_header {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 BUGS
extends 'File::KDBX::Loader';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub _read_header {
my $self = shift;
=head1 VERSION
-version 0.904
+version 0.905
=head1 BUGS
extends 'File::KDBX::Loader';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
has '_reader', is => 'ro';
has '_safe', is => 'ro', default => sub { File::KDBX::Safe->new(cipher => $_[0]->kdbx->random_stream) };
=head1 VERSION
-version 0.904
+version 0.905
=head1 BUGS
use Scalar::Util qw(blessed weaken);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
fieldhashes \my (%KDBX, %PARENT, %TXNS, %REFS, %SIGNALS);
=head1 VERSION
-version 0.904
+version 0.905
=head1 DESCRIPTION
use Scalar::Util qw(refaddr);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub new {
=head1 VERSION
-version 0.904
+version 0.905
=head1 SYNOPSIS
use File::KDBX::Util qw(:class);
use namespace::clean;
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
sub new {
=head1 VERSION
-version 0.904
+version 0.905
=head1 ATTRIBUTES
use boolean;
use namespace::clean -except => 'import';
-our $VERSION = '0.904'; # VERSION
+our $VERSION = '0.905'; # VERSION
our %EXPORT_TAGS = (
assert => [qw(DEBUG assert)],
=head1 VERSION
-version 0.904
+version 0.905
=head1 FUNCTIONS
'Carp' => '0',
'Crypt::Argon2' => '0',
'Crypt::Cipher' => '0',
+ 'Crypt::Cipher::AES' => '0',
'Crypt::Digest' => '0',
'Crypt::Mac::HMAC' => '0',
'Crypt::Misc' => '0.049',
'Crypt::Mode::CBC' => '0',
'Crypt::PRNG' => '0',
+ 'Crypt::Stream::ChaCha' => '0.048',
+ 'Crypt::Stream::Salsa20' => '0.055',
'Data::Dumper' => '0',
'Devel::GlobalDestruction' => '0',
'Encode' => '0',
'Storable' => '0',
'Symbol' => '0',
'Text::ParseWords' => '0',
+ 'Time::Local' => '1.19',
'Time::Piece' => '1.33',
'XML::LibXML' => '0',
'XML::LibXML::Reader' => '0',
'perl' => '5.010',
'strict' => '0',
'warnings' => '0'
+ },
+ 'suggests' => {
+ 'Crypt::Stream::Serpent' => '0.055',
+ 'Crypt::Stream::Twofish' => '0'
}
},
'test' => {
pipe(my $read, my $write) or die "pipe failed: $!";
$read = File::KDBX::IO::Crypt->new($read, cipher => $block_cipher);
- print $write "blah blah blah!\1";
+ print $write "blah blah blah!"; # should produce: FATAL: cipher text length has to be multiple of 16 (15)
close($write) or die "close failed: $!";
is $read->error, '', 'Read handle starts out fine';