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 )