Crypt-CBC
view release on metacpan or search on metacpan
lib/Crypt/CBC.pm view on Meta::CPAN
my ($options,$header_mode) = @_;
# KEY DERIVATION PARAMETERS
# Some special cases here
# 1. literal key has been requested - use algorithm 'none'
# 2. headerless mode - use algorithm 'none'
# 3. randomiv header - use algorithm 'nosalt'
my $pbkdf = $options->{pbkdf} || ($options->{literal_key} ? 'none'
:$header_mode eq 'randomiv' ? 'randomiv'
:DEFAULT_PBKDF);
# iterations
my $iter = $options->{iter} || DEFAULT_ITER;
$iter =~ /[\d_]+/ && $iter >= 1 or croak "-iterations argument must be greater than or equal to 1";
$iter =~ /[\d_]+/ && $iter >= 1 or croak "-iterations argument must be greater than or equal to 1";
# hasher
my $hc = $options->{hasher};
my $nodeprecate = $options->{nodeprecate};
return ($pbkdf,$iter,$hc,$nodeprecate);
}
sub _get_chain_mode {
my $self = shift;
lib/Crypt/CBC.pm view on Meta::CPAN
my $self = shift;
my $pbkdf = $self->pbkdf;
my $iter = $self->{iter};
my $hc = $self->{hasher};
my @hash_args = $hc ? ref ($hc) ? (hasher => $hc) : (hash_class => $hc)
: ();
return Crypt::CBC::PBKDF->new($pbkdf =>
{
key_len => $self->{keysize},
iv_len => $self->{blocksize},
iterations => $iter,
@hash_args,
}
);
}
############################# generating key, iv and salt ########################
sub set_key_and_iv {
my $self = shift;
if ($self->pbkdf eq 'none' || $self->{literal_key}) {
lib/Crypt/CBC/PBKDF/pbkdf2.pm view on Meta::CPAN
package Crypt::CBC::PBKDF::pbkdf2;
use strict;
use base 'Crypt::CBC::PBKDF';
use Crypt::PBKDF2;
our $VERSION = '3.07';
# options:
# key_len => 32 default
# iv_len => 16 default
# iterations => 10000 default
# hash_class => 'HMACSHA2' default
sub create {
my $class = shift;
my %options = @_;
$options{key_len} ||= 32;
$options{iv_len} ||= 16;
$options{iterations} ||= 10_000;
$options{hash_class} ||= 'HMACSHA2';
return bless \%options,$class;
}
sub generate_hash {
my $self = shift;
my ($salt,$passphrase) = @_;
my $pbkdf2 = Crypt::PBKDF2->new(%$self,
output_len => $self->{key_len} + $self->{iv_len});
return $pbkdf2->PBKDF2($salt,$passphrase);
t/parameters.t view on Meta::CPAN
test($crypt->pbkdf eq 'pbkdf2','PBKDF not setting properly. Expected "pbkdf2" but got '.$crypt->pbkdf);
$crypt = eval {Crypt::CBC->new(-cipher => 'Crypt::Crypt8',
-pass=>'very secret',
-pbkdf=>'pbkdf2',
-hasher=>'HMACSHA3',
-iter=>1000)} or warn $@;
my $pbkdf = $crypt->pbkdf_obj;
test(defined $pbkdf,"PBKDF object not created as expected");
test($pbkdf->{hash_class} eq 'HMACSHA3','pbkdf object hasher not initialized to correct class');
test($pbkdf->{iterations} == 1000,'pbkdf object hasher not initialized to correct number of iterations');
test( !eval {Crypt::CBC->new(-cipher => 'Crypt::Crypt8',
-pass=>'very secret',
-pbkdf=>'pbkdf2',
-iv => 'b'x8,
-header=>'randomiv')
},
'module should not allow a header mode of randomiv and a pbkdf not equal to randomiv'
);
( run in 0.627 second using v1.01-cache-2.11-cpan-96521ef73a4 )