Codebase list libcryptx-perl / af016b8
using CryptX::_croak Karel Miko 6 years ago
18 changed file(s) with 92 addition(s) and 35 deletion(s). Raw diff Collapse all Expand all
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp; $Carp::Internal{(__PACKAGE__)}++;
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1213 use CryptX;
1314 use Crypt::Cipher;
1415
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1113 use CryptX;
1214
13 sub new { my $class = shift; _new(@_) }
15 sub new {
16 my $class = shift;
17 local $SIG{__DIE__} = \&CryptX::_croak;
18 return _new(@_);
19 }
1420
1521 sub chacha20poly1305_encrypt_authenticate {
1622 my $key = shift;
1824 my $adata = shift;
1925 my $plaintext = shift;
2026
27 local $SIG{__DIE__} = \&CryptX::_croak;
2128 my $m = Crypt::AuthEnc::ChaCha20Poly1305->new($key, $iv);
2229 $m->adata_add(defined $adata ? $adata : ''); #XXX-TODO if no aad we have to pass empty string
2330 my $ct = $m->encrypt_add($plaintext);
3239 my $ciphertext = shift;
3340 my $tag = shift;
3441
42 local $SIG{__DIE__} = \&CryptX::_croak;
3543 my $m = Crypt::AuthEnc::ChaCha20Poly1305->new($key, $iv);
3644 $m->adata_add(defined $adata ? $adata : ''); #XXX-TODO if no aad we have to pass empty string
3745 my $ct = $m->decrypt_add($ciphertext);
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1113 use CryptX;
1214 use Crypt::Cipher;
1315
2123 # - decrypt_done
2224 # - adata_add
2325
24 sub new { my $class = shift; _new(Crypt::Cipher::_trans_cipher_name(shift), @_) }
26 sub new {
27 my $class = shift;
28 local $SIG{__DIE__} = \&CryptX::_croak;
29 return _new(Crypt::Cipher::_trans_cipher_name(shift), @_);
30 }
2531
2632 sub eax_encrypt_authenticate {
2733 my $cipher_name = shift;
3036 my $adata = shift;
3137 my $plaintext = shift;
3238
39 local $SIG{__DIE__} = \&CryptX::_croak;
3340 my $m = Crypt::AuthEnc::EAX->new($cipher_name, $key, $iv);
3441 $m->adata_add($adata) if defined $adata;
3542 my $ct = $m->encrypt_add($plaintext);
4552 my $ciphertext = shift;
4653 my $tag = shift;
4754
55 local $SIG{__DIE__} = \&CryptX::_croak;
4856 my $m = Crypt::AuthEnc::EAX->new($cipher_name, $key, $iv);
4957 $m->adata_add($adata) if defined $adata;
5058 my $ct = $m->decrypt_add($ciphertext);
99107 =head1 DESCRIPTION
100108
101109 EAX is a mode that requires a cipher, CTR and OMAC support and provides encryption and authentication.
102 It is initialized with a random IV that can be shared publicly, additional authenticated data which can
110 It is initialized with a random IV that can be shared publicly, additional authenticated data which can
103111 be fixed and public, and a random secret symmetric key.
104112
105113 =head1 EXPORT
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1113 use CryptX;
1214 use Crypt::Cipher;
1315
1416 sub new {
1517 my ($class, $cipher, $key, $iv) = @_;
18 local $SIG{__DIE__} = \&CryptX::_croak;
1619 my $self = _new(Crypt::Cipher::_trans_cipher_name($cipher), $key);
1720 # for backwards compatibility the $iv is optional
1821 $self->iv_add($iv) if defined $iv;
2629 my $adata = shift;
2730 my $plaintext = shift;
2831
32 local $SIG{__DIE__} = \&CryptX::_croak;
2933 my $m = Crypt::AuthEnc::GCM->new($cipher_name, $key);
3034 $m->iv_add($iv);
3135 $m->adata_add(defined $adata ? $adata : ''); #XXX-TODO if no aad we have to pass empty string
4246 my $ciphertext = shift;
4347 my $tag = shift;
4448
49 local $SIG{__DIE__} = \&CryptX::_croak;
4550 my $m = Crypt::AuthEnc::GCM->new($cipher_name, $key);
4651 $m->iv_add($iv);
4752 $m->adata_add(defined $adata ? $adata : ''); #XXX-TODO if no aad we have to pass empty string
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1113 use CryptX;
1214 use Crypt::Cipher;
1315
14 sub new { my $class = shift; _new(Crypt::Cipher::_trans_cipher_name(shift), @_) }
16 sub new {
17 my $class = shift;
18 local $SIG{__DIE__} = \&CryptX::_croak;
19 return _new(Crypt::Cipher::_trans_cipher_name(shift), @_);
20 }
1521
1622 sub ocb_encrypt_authenticate {
1723 my $cipher_name = shift;
2127 my $tag_len = shift;
2228 my $plaintext = shift;
2329
30 local $SIG{__DIE__} = \&CryptX::_croak;
2431 my $m = Crypt::AuthEnc::OCB->new($cipher_name, $key, $nonce, $tag_len);
2532 $m->adata_add($adata) if defined $adata;
2633 my $ct = $m->encrypt_last($plaintext);
3643 my $ciphertext = shift;
3744 my $tag = shift;
3845
46 local $SIG{__DIE__} = \&CryptX::_croak;
3947 my $m = Crypt::AuthEnc::OCB->new($cipher_name, $key, $nonce, length($tag));
4048 $m->adata_add($adata) if defined $adata;
4149 my $ct = $m->decrypt_last($ciphertext);
88 1;
99
1010 __END__
11
11
1212 =head1 NAME
1313
1414 Crypt::AuthEnc - [internal only]
22 use strict;
33 use warnings;
44 our $VERSION = '0.054_004';
5
56 use Carp;
7 $Carp::Internal{(__PACKAGE__)}++;
68 use CryptX;
79
810 sub addfile {
22 use strict;
33 use warnings;
44 our $VERSION = '0.054_004';
5
56 use Carp;
7 $Carp::Internal{(__PACKAGE__)}++;
68 use CryptX;
79
810 sub addfile {
1212 our @EXPORT = qw();
1313
1414 use Carp;
15 $Carp::Internal{(__PACKAGE__)}++;
16 use CryptX;
1517 use Crypt::Checksum::Adler32;
1618 use Crypt::Checksum::CRC32;
1719
18 sub adler32_data { Crypt::Checksum::Adler32->new->add(@_)->digest }
19 sub adler32_data_hex { Crypt::Checksum::Adler32->new->add(@_)->hexdigest }
20 sub adler32_data_int { unpack("N", Crypt::Checksum::Adler32->new->add(@_)->digest) }
21 sub adler32_file { Crypt::Checksum::Adler32->new->addfile(@_)->digest }
22 sub adler32_file_hex { Crypt::Checksum::Adler32->new->addfile(@_)->hexdigest }
23 sub adler32_file_int { unpack("N", Crypt::Checksum::Adler32->new->addfile(@_)->digest) }
24 sub crc32_data { Crypt::Checksum::CRC32->new->add(@_)->digest }
25 sub crc32_data_hex { Crypt::Checksum::CRC32->new->add(@_)->hexdigest }
26 sub crc32_data_int { unpack("N", Crypt::Checksum::CRC32->new->add(@_)->digest) }
27 sub crc32_file { Crypt::Checksum::CRC32->new->addfile(@_)->digest }
28 sub crc32_file_hex { Crypt::Checksum::CRC32->new->addfile(@_)->hexdigest }
29 sub crc32_file_int { unpack("N", Crypt::Checksum::CRC32->new->addfile(@_)->digest) }
20 sub adler32_data { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::Adler32->new->add(@_)->digest }
21 sub adler32_data_hex { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::Adler32->new->add(@_)->hexdigest }
22 sub adler32_data_int { local $SIG{__DIE__} = \&CryptX::_croak; unpack("N", Crypt::Checksum::Adler32->new->add(@_)->digest) }
23 sub adler32_file { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::Adler32->new->addfile(@_)->digest }
24 sub adler32_file_hex { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::Adler32->new->addfile(@_)->hexdigest }
25 sub adler32_file_int { local $SIG{__DIE__} = \&CryptX::_croak; unpack("N", Crypt::Checksum::Adler32->new->addfile(@_)->digest) }
26 sub crc32_data { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->add(@_)->digest }
27 sub crc32_data_hex { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->add(@_)->hexdigest }
28 sub crc32_data_int { local $SIG{__DIE__} = \&CryptX::_croak; unpack("N", Crypt::Checksum::CRC32->new->add(@_)->digest) }
29 sub crc32_file { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->addfile(@_)->digest }
30 sub crc32_file_hex { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->addfile(@_)->hexdigest }
31 sub crc32_file_int { local $SIG{__DIE__} = \&CryptX::_croak; unpack("N", Crypt::Checksum::CRC32->new->addfile(@_)->digest) }
3032
3133 1;
3234
3941 =head1 SYNOPSIS
4042
4143 use Crypt::Checksum ':all';
42
44
4345 # calculate Adler32 checksum from string/buffer
4446 $checksum_raw = adler32_data($data);
4547 $checksum_hex = adler32_data_hex($data);
6365 # calculate CRC32 checksum from filehandle
6466 $checksum_raw = crc32_file(*FILEHANDLE);
6567 $checksum_hex = crc32_file_hex(*FILEHANDLE);
66
68
6769 =head1 DESCRIPTION
6870
6971 Calculating CRC32 and Adler32 checksums (functional interface);
22 use strict;
33 use warnings;
44 our $VERSION = '0.054_004';
5
6 use Carp;
7 $Carp::Internal{(__PACKAGE__)}++;
58 use CryptX;
69
710 ### the following methods/functions are implemented in XS:
4043 sub new {
4144 my $pkg = shift;
4245 my $cipher_name = $pkg eq __PACKAGE__ ? _trans_cipher_name(shift) : _trans_cipher_name($pkg);
46 local $SIG{__DIE__} = \&CryptX::_croak;
4347 return _new($cipher_name, @_);
4448 }
4549
4751 my $self = shift;
4852 return $self->_blocksize if ref($self);
4953 $self = _trans_cipher_name(shift) if $self eq __PACKAGE__;
54 local $SIG{__DIE__} = \&CryptX::_croak;
5055 return _block_length_by_name(_trans_cipher_name($self));
51 }
52
53 sub keysize {
54 max_keysize(@_);
5556 }
5657
5758 sub max_keysize
6061 return unless defined $self;
6162 return $self->_max_keysize if ref($self);
6263 $self = _trans_cipher_name(shift) if $self eq __PACKAGE__;
64 local $SIG{__DIE__} = \&CryptX::_croak;
6365 return _max_key_length_by_name(_trans_cipher_name($self));
6466 }
6567
6870 return unless defined $self;
6971 return $self->_min_keysize if ref($self);
7072 $self = _trans_cipher_name(shift) if $self eq __PACKAGE__;
73 local $SIG{__DIE__} = \&CryptX::_croak;
7174 return _min_key_length_by_name(_trans_cipher_name($self));
75 }
76
77 sub keysize {
78 goto &max_keysize;
7279 }
7380
7481 sub default_rounds {
7683 return unless defined $self;
7784 return $self->_default_rounds if ref($self);
7885 $self = _trans_cipher_name(shift) if $self eq __PACKAGE__;
86 local $SIG{__DIE__} = \&CryptX::_croak;
7987 return _default_rounds_by_name(_trans_cipher_name($self));
8088 }
8189
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp; $Carp::Internal{(__PACKAGE__)}++;
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1213 use CryptX;
1314
1415 ### the following methods/functions are implemented in XS:
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
1113 use CryptX;
1214 use Crypt::Digest;
1315
1618 $iteration_count ||= 5000;
1719 $hash_name = Crypt::Digest::_trans_digest_name($hash_name||'SHA256');
1820 $len ||= 32;
21 local $SIG{__DIE__} = \&CryptX::_croak;
1922 return _pkcs_5_alg1($password, $salt, $iteration_count, $hash_name, $len);
2023 }
2124
2427 $iteration_count ||= 5000;
2528 $hash_name = Crypt::Digest::_trans_digest_name($hash_name||'SHA256');
2629 $len ||= 32;
30 local $SIG{__DIE__} = \&CryptX::_croak;
2731 return _pkcs_5_alg2($password, $salt, $iteration_count, $hash_name, $len);
2832 }
2933
3337 my ($keying_material, $salt, $hash_name) = @_;
3438 $hash_name = Crypt::Digest::_trans_digest_name($hash_name||'SHA256');
3539 $salt = pack("H*", "00" x Crypt::Digest->hashsize($hash_name)) unless defined $salt; # according to rfc5869 defaults to HashLen zero octets
40 local $SIG{__DIE__} = \&CryptX::_croak;
3641 return _hkdf_extract($hash_name, $salt, $keying_material);
3742 }
3843
4348 $len ||= 32;
4449 $info ||= '';
4550 $hash_name = Crypt::Digest::_trans_digest_name($hash_name||'SHA256');
51 local $SIG{__DIE__} = \&CryptX::_croak;
4652 return _hkdf_expand($hash_name, $info, $keying_material, $len);
4753 }
4854
5359 $info ||= '';
5460 $hash_name = Crypt::Digest::_trans_digest_name($hash_name||'SHA256');
5561 $salt = pack("H*", "00" x Crypt::Digest->hashsize($hash_name)) unless defined $salt; # according to rfc5869 defaults to HashLen zero octets
62 local $SIG{__DIE__} = \&CryptX::_croak;
5663 return _hkdf($hash_name, $salt, $info, $keying_material, $len);
5764 }
5865
88 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
99 our @EXPORT = qw();
1010
11 use Carp;
12 $Carp::Internal{(__PACKAGE__)}++;
13 use CryptX;
14
1115 sub add {
1216 my $self = shift;
17 local $SIG{__DIE__} = \&CryptX::_croak;
1318 $self->_add_single($_) for (@_);
1419 return $self;
1520 }
3136
3237 my $n;
3338 my $buf = "";
39 local $SIG{__DIE__} = \&CryptX::_croak;
3440 while (($n = read($handle, $buf, 32*1024))) {
3541 $self->_add_single($buf)
3642 }
4450 1;
4551
4652 __END__
47
53
4854 =head1 NAME
4955
5056 Crypt::Mac - [internal only]
6363 1;
6464
6565 __END__
66
66
6767 =head1 NAME
6868
6969 Crypt::Mode - [internal only]
353353 $pk->generate_key($param_hash)
354354 # $param_hash is { g => $g, p => $p }
355355 # where $g is the generator (base) in a hex string and $p is the prime in a hex string
356
356
357357 $pk->generate_key(\$dh_param)
358358 # $dh_param is the content of DER or PEM file with DH params
359359 # e.g. openssl dhparam 2048
279279 $pk->generate_key(\$dsa_param)
280280 # $dsa_param is the content of DER or PEM file with DSA params
281281 # e.g. openssl dsaparam 2048
282
282
283283 =head2 import_key
284284
285285 Loads private or public key in DER or PEM format.
5252 my @ch = split(//, $chars);
5353 my $max_index = $#ch;
5454 return if $max_index > 65535;
55
55
5656 my $mask;
5757 for my $n (1..31) {
5858 $mask = (1<<$n) - 1;
3131 }
3232
3333 sub _croak {
34 die @_ if ref $_[0];
35 if ($_[-1] =~ /\n$/s) {
36 my $arg = pop @_;
37 $arg =~ s/(.*)( at .*? line .*?\n$)/$1/s;
38 push @_, $arg;
34 die @_ if ref $_[0] || !$_[-1];
35 if ($_[-1] =~ /^(.*)( at .+ line .+\n$)/s) {
36 pop @_;
37 push @_, $1;
3938 }
4039 die Carp::shortmess @_;
4140 }