use Crypt::Cipher;
use Crypt::Digest qw(digest_data);
-use File::KDBX::Constants qw(:kdf);
+use File::KDBX::Constants qw(:bool :kdf);
use File::KDBX::Error;
-use File::KDBX::Util qw(:load can_fork);
+use File::KDBX::Util qw(:class :load can_fork);
use namespace::clean;
-use parent 'File::KDBX::KDF';
+extends 'File::KDBX::KDF';
our $VERSION = '999.999'; # VERSION
my $FORK_OPTIMIZATION_THRESHOLD = 100_000;
BEGIN {
- load_xs;
-
- my $use_fork = 1;
- $use_fork = 0 if $ENV{NO_FORK} || !can_fork;
- *_USE_FORK = $use_fork ? sub() { 1 } : sub() { 0 };
-}
-
-sub init {
- my $self = shift;
- my %args = @_;
- return $self->SUPER::init(
- KDF_PARAM_AES_ROUNDS() => $args{+KDF_PARAM_AES_ROUNDS} // $args{rounds},
- KDF_PARAM_AES_SEED() => $args{+KDF_PARAM_AES_SEED} // $args{seed},
- );
+ my $use_fork = $ENV{NO_FORK} || !can_fork;
+ *_USE_FORK = $use_fork ? \&TRUE : \&FALSE;
}
=attr rounds
sub rounds { $_[0]->{+KDF_PARAM_AES_ROUNDS} || KDF_DEFAULT_AES_ROUNDS }
sub seed { $_[0]->{+KDF_PARAM_AES_SEED} }
+sub init {
+ my $self = shift;
+ my %args = @_;
+ return $self->SUPER::init(
+ KDF_PARAM_AES_ROUNDS() => $args{+KDF_PARAM_AES_ROUNDS} // $args{rounds},
+ KDF_PARAM_AES_SEED() => $args{+KDF_PARAM_AES_SEED} // $args{seed},
+ );
+}
+
sub _transform {
my $self = shift;
my $key = shift;
return digest_data('SHA256', $l, $r);
}
-sub _transform_half {
- my $xs = __PACKAGE__->can('_transform_half_xs');
- goto $xs if $xs;
-
+sub _transform_half_pp {
my $seed = shift;
my $key = shift;
my $rounds = shift;
return $result;
}
+BEGIN {
+ my $use_xs = load_xs;
+ *_transform_half = $use_xs ? \&File::KDBX::XS::kdf_aes_transform_half : \&_transform_half_pp;
+}
+
1;
__END__