Import upstream version 0.073
Debian Janitor
2 years ago
0 | 0 | Changes for CryptX |
1 | ||
2 | 0.073 2021-07-18 | |
3 | - fix #73 CPAN testers failure with Math::BigInt 1.99982 | |
4 | - fix #70 remove lto related hacks from Makefile.PL | |
5 | - fix #72 drop optional prereqs JSON::XS + Cpanel::JSON::XS, use optionally only JSON | |
6 | ||
7 | 0.072 2021-04-29 | |
8 | - fix #69 Identifier Octet's Leniency in RSA PKCS#1 Signature Verification | |
9 | - bundled libtomcrypt update branch:develop (commit:165c795b 2021-04-14) | |
10 | ||
11 | 0.071 2021-03-30 | |
12 | - fix #67 (better handling of PEM decoding failures) | |
1 | 13 | |
2 | 14 | 0.070 2021-02-12 |
3 | 15 | - fix #66 remove -flto=auto (Makefile.PL) |
3 | 3 | "Karel Miko" |
4 | 4 | ], |
5 | 5 | "dynamic_config" : 1, |
6 | "generated_by" : "ExtUtils::MakeMaker version 7.58, CPAN::Meta::Converter version 2.150010", | |
6 | "generated_by" : "ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010", | |
7 | 7 | "license" : [ |
8 | 8 | "perl_5" |
9 | 9 | ], |
49 | 49 | "url" : "https://github.com/DCIT/perl-CryptX" |
50 | 50 | } |
51 | 51 | }, |
52 | "version" : "0.070", | |
53 | "x_serialization_backend" : "JSON::PP version 4.05" | |
52 | "version" : "0.073", | |
53 | "x_serialization_backend" : "JSON::PP version 4.06" | |
54 | 54 | } |
7 | 7 | configure_requires: |
8 | 8 | ExtUtils::MakeMaker: '0' |
9 | 9 | dynamic_config: 1 |
10 | generated_by: 'ExtUtils::MakeMaker version 7.58, CPAN::Meta::Converter version 2.150010' | |
10 | generated_by: 'ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010' | |
11 | 11 | license: perl |
12 | 12 | meta-spec: |
13 | 13 | url: http://module-build.sourceforge.net/META-spec-v1.4.html |
22 | 22 | resources: |
23 | 23 | bugtracker: https://github.com/DCIT/perl-CryptX/issues |
24 | 24 | repository: https://github.com/DCIT/perl-CryptX |
25 | version: '0.070' | |
25 | version: '0.073' | |
26 | 26 | x_serialization_backend: 'CPAN::Meta::YAML version 0.018' |
24 | 24 | glob('src/ltc/*/*/*/*.c'), |
25 | 25 | glob('src/ltc/*/*/*/*/*.c'), |
26 | 26 | ); |
27 | $mycflags = "$Config{ccflags} $Config{cccdlflags} $Config{optimize}"; | |
27 | $mycflags = " $Config{ccflags} $Config{cccdlflags} $Config{optimize} "; # keep leading + trailing spaces | |
28 | 28 | |
29 | 29 | #FIX: this is particularly useful for Debian https://github.com/DCIT/perl-CryptX/pull/39 |
30 | $mycflags .= " $ENV{CFLAGS}" if $ENV{CFLAGS}; | |
31 | $mycflags .= " $ENV{CPPFLAGS}" if $ENV{CPPFLAGS}; | |
30 | $mycflags .= " $ENV{CFLAGS} " if $ENV{CFLAGS}; | |
31 | $mycflags .= " $ENV{CPPFLAGS} " if $ENV{CPPFLAGS}; | |
32 | 32 | |
33 | #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32 | |
34 | #FIX: another issue with "-flto=auto" see https://github.com/DCIT/perl-CryptX/pull/66 | |
35 | $mycflags =~ s/-flto=[a-zA-Z0-9]+//g; # -flto=auto -flto=jobserver -flto=N ... | |
36 | $mycflags =~ s/-flto\b//g; | |
33 | #### remove all lto hacks - https://github.com/DCIT/perl-CryptX/issues/70 | |
34 | ## #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32 | |
35 | ## #FIX: another issue with "-flto=auto" see https://github.com/DCIT/perl-CryptX/pull/66 | |
36 | ## $mycflags =~ s/\s-flto\S+\s/ /g; # -flto -flto=auto -flto=jobserver -flto=N ... | |
37 | 37 | |
38 | 38 | #FIX: avoid -Wwrite-strings -Wcast-qual -pedantic -pedantic-errors -ansi -std=c89 |
39 | $mycflags =~ s/-pedantic\b//g; | |
40 | $mycflags =~ s/-pedantic-errors\b//g; | |
41 | $mycflags =~ s/-std=c89\b//g; | |
42 | $mycflags =~ s/-ansi\b//g; | |
43 | $mycflags =~ s/-Wwrite-strings\b//g; | |
44 | $mycflags =~ s/-Wcast-qual\b//g; | |
39 | $mycflags =~ s/\s-pedantic-errors\s/ /g; | |
40 | $mycflags =~ s/\s-pedantic\s/ /g; | |
41 | $mycflags =~ s/\s-std=c89\s/ /g; | |
42 | $mycflags =~ s/\s-ansi\s/ /g; | |
43 | $mycflags =~ s/\s-Wwrite-strings\s/ /g; | |
44 | $mycflags =~ s/\s-Wcast-qual\s/ /g; | |
45 | 45 | |
46 | 46 | #FIX: avoid "ar: fatal: Numeric group ID too large" see https://github.com/DCIT/perl-CryptX/issues/33 |
47 | 47 | $myarflags = '$(AR_STATIC_ARGS)'; |
73 | 73 | PREREQ_PM => { }, |
74 | 74 | TEST_REQUIRES => { 'Test::More' => 0 }, |
75 | 75 | META_MERGE => { resources => { repository => 'https://github.com/DCIT/perl-CryptX', bugtracker => 'https://github.com/DCIT/perl-CryptX/issues' } }, |
76 | dist => { PREOP => 'perldoc -u lib/CryptX.pm | pod2markdown > README.md', TAR => 'ptar', TARFLAGS => '-c -C -f' }, | |
76 | dist => { PREOP => 'perldoc -u lib/CryptX.pm | pod2markdown > README.md', TARFLAGS => '--owner=0 --group=0 -cvf' }, | |
77 | 77 | @EUMM_INC_LIB |
78 | 78 | ); |
79 | 79 |
67 | 67 | |
68 | 68 | # COPYRIGHT |
69 | 69 | |
70 | Copyright (c) 2013-2020 DCIT, a.s. [https://www.dcit.cz](https://www.dcit.cz) / Karel Miko | |
70 | Copyright (c) 2013-2021 DCIT, a.s. [https://www.dcit.cz](https://www.dcit.cz) / Karel Miko |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( ccm_encrypt_authenticate ccm_decrypt_verify )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( eax_encrypt_authenticate eax_decrypt_verify )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( gcm_encrypt_authenticate gcm_decrypt_verify )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( ocb_encrypt_authenticate ocb_decrypt_verify )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | ### not used |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::Checksum Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::Checksum Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw/ adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Cipher); |
9 | 9 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use Carp; |
7 | 7 | $Carp::Internal{(__PACKAGE__)}++; |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2b_160 blake2b_160_hex blake2b_160_b64 blake2b_160_b64u blake2b_160_file blake2b_160_file_hex blake2b_160_file_b64 blake2b_160_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2b_256 blake2b_256_hex blake2b_256_b64 blake2b_256_b64u blake2b_256_file blake2b_256_file_hex blake2b_256_file_b64 blake2b_256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2b_384 blake2b_384_hex blake2b_384_b64 blake2b_384_b64u blake2b_384_file blake2b_384_file_hex blake2b_384_file_b64 blake2b_384_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2b_512 blake2b_512_hex blake2b_512_b64 blake2b_512_b64u blake2b_512_file blake2b_512_file_hex blake2b_512_file_b64 blake2b_512_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2s_128 blake2s_128_hex blake2s_128_b64 blake2s_128_b64u blake2s_128_file blake2s_128_file_hex blake2s_128_file_b64 blake2s_128_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2s_160 blake2s_160_hex blake2s_160_b64 blake2s_160_b64u blake2s_160_file blake2s_160_file_hex blake2s_160_file_b64 blake2s_160_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2s_224 blake2s_224_hex blake2s_224_b64 blake2s_224_b64u blake2s_224_file blake2s_224_file_hex blake2s_224_file_b64 blake2s_224_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2s_256 blake2s_256_hex blake2s_256_b64 blake2s_256_b64u blake2s_256_file blake2s_256_file_hex blake2s_256_file_b64 blake2s_256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( chaes chaes_hex chaes_b64 chaes_b64u chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( keccak224 keccak224_hex keccak224_b64 keccak224_b64u keccak224_file keccak224_file_hex keccak224_file_b64 keccak224_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( keccak256 keccak256_hex keccak256_b64 keccak256_b64u keccak256_file keccak256_file_hex keccak256_file_b64 keccak256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( keccak384 keccak384_hex keccak384_b64 keccak384_b64u keccak384_file keccak384_file_hex keccak384_file_b64 keccak384_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( keccak512 keccak512_hex keccak512_b64 keccak512_b64u keccak512_file keccak512_file_hex keccak512_file_b64 keccak512_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( md2 md2_hex md2_b64 md2_b64u md2_file md2_file_hex md2_file_b64 md2_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( md4 md4_hex md4_b64 md4_b64u md4_file md4_file_hex md4_file_b64 md4_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( md5 md5_hex md5_b64 md5_b64u md5_file md5_file_hex md5_file_b64 md5_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( ripemd128 ripemd128_hex ripemd128_b64 ripemd128_b64u ripemd128_file ripemd128_file_hex ripemd128_file_b64 ripemd128_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( ripemd160 ripemd160_hex ripemd160_b64 ripemd160_b64u ripemd160_file ripemd160_file_hex ripemd160_file_b64 ripemd160_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( ripemd256 ripemd256_hex ripemd256_b64 ripemd256_b64u ripemd256_file ripemd256_file_hex ripemd256_file_b64 ripemd256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( ripemd320 ripemd320_hex ripemd320_b64 ripemd320_b64u ripemd320_file ripemd320_file_hex ripemd320_file_b64 ripemd320_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha1 sha1_hex sha1_b64 sha1_b64u sha1_file sha1_file_hex sha1_file_b64 sha1_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha224 sha224_hex sha224_b64 sha224_b64u sha224_file sha224_file_hex sha224_file_b64 sha224_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha256 sha256_hex sha256_b64 sha256_b64u sha256_file sha256_file_hex sha256_file_b64 sha256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha384 sha384_hex sha384_b64 sha384_b64u sha384_file sha384_file_hex sha384_file_b64 sha384_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha3_224 sha3_224_hex sha3_224_b64 sha3_224_b64u sha3_224_file sha3_224_file_hex sha3_224_file_b64 sha3_224_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha3_256 sha3_256_hex sha3_256_b64 sha3_256_b64u sha3_256_file sha3_256_file_hex sha3_256_file_b64 sha3_256_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha3_384 sha3_384_hex sha3_384_b64 sha3_384_b64u sha3_384_file sha3_384_file_hex sha3_384_file_b64 sha3_384_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha3_512 sha3_512_hex sha3_512_b64 sha3_512_b64u sha3_512_file sha3_512_file_hex sha3_512_file_b64 sha3_512_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha512 sha512_hex sha512_b64 sha512_b64u sha512_file sha512_file_hex sha512_file_b64 sha512_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha512_224 sha512_224_hex sha512_224_b64 sha512_224_b64u sha512_224_file sha512_224_file_hex sha512_224_file_b64 sha512_224_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( sha512_256 sha512_256_hex sha512_256_b64 sha512_256_b64u sha512_256_file sha512_256_file_hex sha512_256_file_b64 sha512_256_file_b64u )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use Carp; |
7 | 7 | $Carp::Internal{(__PACKAGE__)}++; |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( tiger192 tiger192_hex tiger192_b64 tiger192_b64u tiger192_file tiger192_file_hex tiger192_file_b64 tiger192_file_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Digest Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( whirlpool whirlpool_hex whirlpool_b64 whirlpool_b64u whirlpool_file whirlpool_file_hex whirlpool_file_b64 whirlpool_file_b64u )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(pbkdf1 pbkdf2 hkdf hkdf_expand hkdf_extract)] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2b blake2b_hex blake2b_b64 blake2b_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( blake2s blake2s_hex blake2s_b64 blake2s_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( f9 f9_hex f9_b64 f9_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( hmac hmac_hex hmac_b64 hmac_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( omac omac_hex omac_b64 omac_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( pmac pmac_hex pmac_b64 pmac_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( pelican pelican_hex pelican_b64 pelican_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u )] ); |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( xcbc xcbc_hex xcbc_b64 xcbc_b64u )] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use Carp; |
7 | 7 | $Carp::Internal{(__PACKAGE__)}++; |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | use Carp 'croak'; |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use Crypt::Cipher; |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use Crypt::Cipher; |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use Crypt::Cipher; |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use Crypt::Cipher; |
9 | 9 |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.070'; | |
6 | our $VERSION = '0.073'; | |
7 | 7 | |
8 | 8 | use Crypt::Cipher; |
9 | 9 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | ### not used |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( dh_shared_secret )] ); |
226 | 226 | } |
227 | 227 | elsif (ref $param eq 'SCALAR') { |
228 | 228 | my $data = $$param; |
229 | $data = pem_to_der($data) if $data =~ /-----BEGIN DH PARAMETERS-----\s*(.+)\s*-----END DH PARAMETERS-----/s; | |
229 | if ($data =~ /-----BEGIN DH PARAMETERS-----\s*(.+)\s*-----END DH PARAMETERS-----/s) { | |
230 | $data = pem_to_der($data) or croak "FATAL: PEM/params decode failed"; | |
231 | } | |
230 | 232 | return $self->_generate_key_dhparam($data); |
231 | 233 | } |
232 | 234 | elsif (ref $param eq 'HASH') { |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( dsa_encrypt dsa_decrypt dsa_sign_message dsa_verify_message dsa_sign_hash dsa_verify_hash )] ); |
35 | 35 | } |
36 | 36 | elsif (@_ == 1 && ref $_[0] eq 'SCALAR') { |
37 | 37 | my $data = ${$_[0]}; |
38 | $data = pem_to_der($data) if $data =~ /-----BEGIN DSA PARAMETERS-----\s*(.+)\s*-----END DSA PARAMETERS-----/s; | |
38 | if ($data =~ /-----BEGIN DSA PARAMETERS-----\s*(.+)\s*-----END DSA PARAMETERS-----/s) { | |
39 | $data = pem_to_der($data) or croak "FATAL: PEM/params decode failed"; | |
40 | } | |
39 | 41 | return $self->_generate_key_dsaparam($data); |
40 | 42 | } |
41 | 43 | croak "FATAL: DSA generate_key - invalid args"; |
75 | 77 | croak "FATAL: invalid key data" unless $data; |
76 | 78 | |
77 | 79 | if ($data =~ /-----BEGIN (DSA PRIVATE|DSA PUBLIC|PRIVATE|PUBLIC) KEY-----(.*?)-----END/sg) { |
78 | $data = pem_to_der($data, $password); | |
80 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
79 | 81 | return $self->_import($data); |
80 | 82 | } |
81 | 83 | elsif ($data =~ /---- BEGIN SSH2 PUBLIC KEY ----(.*?)---- END SSH2 PUBLIC KEY ----/sg) { |
82 | $data = pem_to_der($data); | |
84 | $data = pem_to_der($data) or croak "FATAL: PEM/key decode failed"; | |
83 | 85 | my ($typ, $p, $q, $g, $y) = Crypt::PK::_ssh_parse($data); |
84 | 86 | return $self->_import_hex(unpack('H*',$p), unpack('H*',$q), unpack('H*',$g), undef, unpack('H*',$y)) if $typ && $p && $q && $g && $y && $typ eq 'ssh-dss'; |
85 | 87 | } |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret )] ); |
218 | 218 | croak "FATAL: invalid key data" unless $data; |
219 | 219 | |
220 | 220 | if ($data =~ /-----BEGIN (EC PRIVATE|EC PUBLIC|PUBLIC) KEY-----(.*?)-----END/sg) { |
221 | $data = pem_to_der($data, $password); | |
221 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
222 | 222 | my $rv = eval { $self->_import($data) } || eval { $self->_import_old($data) }; |
223 | 223 | return $rv if $rv; |
224 | 224 | } |
225 | 225 | elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) { |
226 | $data = pem_to_der($data, $password); | |
226 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
227 | 227 | return $self->_import_pkcs8($data, $password); |
228 | 228 | } |
229 | 229 | elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) { |
230 | $data = pem_to_der($data, $password); | |
230 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
231 | 231 | return $self->_import_pkcs8($data, $password); |
232 | 232 | } |
233 | 233 | elsif ($data =~ /^\s*(\{.*?\})\s*$/s) { |
243 | 243 | } |
244 | 244 | } |
245 | 245 | elsif ($data =~ /-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----/sg) { |
246 | $data = pem_to_der($data); | |
246 | $data = pem_to_der($data) or croak "FATAL: PEM/cert decode failed"; | |
247 | 247 | return $self->_import_x509($data); |
248 | 248 | } |
249 | 249 | elsif ($data =~ /---- BEGIN SSH2 PUBLIC KEY ----(.*?)---- END SSH2 PUBLIC KEY ----/sg) { |
250 | $data = pem_to_der($data); | |
250 | $data = pem_to_der($data) or croak "FATAL: PEM/key decode failed"; | |
251 | 251 | my ($typ, $skip, $pubkey) = Crypt::PK::_ssh_parse($data); |
252 | 252 | return $self->import_key_raw($pubkey, "$2") if $pubkey && $typ =~ /^ecdsa-(.+?)-(.*)$/; |
253 | 253 | } |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( )] ); |
63 | 63 | croak "FATAL: invalid key data" unless $data; |
64 | 64 | |
65 | 65 | if ($data =~ /-----BEGIN PUBLIC KEY-----(.*?)-----END/sg) { |
66 | $data = pem_to_der($data, $password); | |
66 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
67 | 67 | return $self->_import($data); |
68 | 68 | } |
69 | 69 | elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) { |
70 | $data = pem_to_der($data, $password); | |
70 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
71 | 71 | return $self->_import_pkcs8($data, $password); |
72 | 72 | } |
73 | 73 | elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) { |
74 | $data = pem_to_der($data, $password); | |
74 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
75 | 75 | return $self->_import_pkcs8($data, $password); |
76 | 76 | } |
77 | 77 | elsif ($data =~ /-----BEGIN ED25519 PRIVATE KEY-----(.*?)-----END/sg) { |
78 | $data = pem_to_der($data, $password); | |
78 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
79 | 79 | return $self->_import_pkcs8($data, $password); |
80 | 80 | } |
81 | 81 | elsif ($data =~ /^\s*(\{.*?\})\s*$/s) { # JSON |
86 | 86 | } |
87 | 87 | } |
88 | 88 | elsif ($data =~ /-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----/sg) { |
89 | $data = pem_to_der($data); | |
89 | $data = pem_to_der($data) or croak "FATAL: PEM/cert decode failed"; | |
90 | 90 | return $self->_import_x509($data); |
91 | 91 | } |
92 | 92 | elsif ($data =~ /-----BEGIN OPENSSH PRIVATE KEY-----(.*?)-----END/sg) { |
96 | 96 | croak "FATAL: OPENSSH PRIVATE KEY not supported"; |
97 | 97 | } |
98 | 98 | elsif ($data =~ /---- BEGIN SSH2 PUBLIC KEY ----(.*?)---- END SSH2 PUBLIC KEY ----/sg) { |
99 | $data = pem_to_der($data); | |
99 | $data = pem_to_der($data) or croak "FATAL: PEM/key decode failed"; | |
100 | 100 | my ($typ, $pubkey) = Crypt::PK::_ssh_parse($data); |
101 | 101 | return $self->_import_raw($pubkey, 0) if $typ eq 'ssh-ed25519' && length($pubkey) == 32; |
102 | 102 | } |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(rsa_encrypt rsa_decrypt rsa_sign_message rsa_verify_message rsa_sign_hash rsa_verify_hash)] ); |
121 | 121 | # PKCS#1 RSAPublicKey (PEM header: BEGIN RSA PUBLIC KEY) |
122 | 122 | # PKCS#1 RSAPrivateKey (PEM header: BEGIN RSA PRIVATE KEY) |
123 | 123 | # X.509 SubjectPublicKeyInfo (PEM header: BEGIN PUBLIC KEY) |
124 | $data = pem_to_der($data, $password); | |
124 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
125 | 125 | return $self->_import($data) if $data; |
126 | 126 | } |
127 | 127 | elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) { |
128 | 128 | # PKCS#8 PrivateKeyInfo (PEM header: BEGIN PRIVATE KEY) |
129 | $data = pem_to_der($data, $password); | |
129 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
130 | 130 | return $self->_import_pkcs8($data, $password); |
131 | 131 | } |
132 | 132 | elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) { |
133 | 133 | # PKCS#8 PrivateKeyInfo (PEM header: BEGIN ENCRYPTED PRIVATE KEY) |
134 | $data = pem_to_der($data, $password); | |
134 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
135 | 135 | return $self->_import_pkcs8($data, $password); |
136 | 136 | } |
137 | 137 | elsif ($data =~ /^\s*(\{.*?\})\s*$/s) { |
146 | 146 | } |
147 | 147 | } |
148 | 148 | elsif ($data =~ /-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----/sg) { |
149 | $data = pem_to_der($data); | |
149 | $data = pem_to_der($data) or croak "FATAL: PEM/cert decode failed"; | |
150 | 150 | return $self->_import_x509($data); |
151 | 151 | } |
152 | 152 | elsif ($data =~ /---- BEGIN SSH2 PUBLIC KEY ----(.*?)---- END SSH2 PUBLIC KEY ----/sg) { |
153 | $data = pem_to_der($data); | |
153 | $data = pem_to_der($data) or croak "FATAL: PEM/key decode failed"; | |
154 | 154 | my ($typ, $N, $e) = Crypt::PK::_ssh_parse($data); |
155 | 155 | return $self->_import_hex(unpack("H*", $e), unpack("H*", $N)) if $typ && $e && $N && $typ eq 'ssh-rsa'; |
156 | 156 | } |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw( )] ); |
63 | 63 | croak "FATAL: invalid key data" unless $data; |
64 | 64 | |
65 | 65 | if ($data =~ /-----BEGIN PUBLIC KEY-----(.*?)-----END/sg) { |
66 | $data = pem_to_der($data, $password); | |
66 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
67 | 67 | return $self->_import($data); |
68 | 68 | } |
69 | 69 | elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) { |
70 | $data = pem_to_der($data, $password); | |
70 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
71 | 71 | return $self->_import_pkcs8($data, $password); |
72 | 72 | } |
73 | 73 | elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) { |
74 | $data = pem_to_der($data, $password); | |
74 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
75 | 75 | return $self->_import_pkcs8($data, $password); |
76 | 76 | } |
77 | 77 | elsif ($data =~ /-----BEGIN X25519 PRIVATE KEY-----(.*?)-----END/sg) { |
78 | $data = pem_to_der($data, $password); | |
78 | $data = pem_to_der($data, $password) or croak "FATAL: PEM/key decode failed"; | |
79 | 79 | return $self->_import_pkcs8($data, $password); |
80 | 80 | } |
81 | 81 | elsif ($data =~ /^\s*(\{.*?\})\s*$/s) { # JSON |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use Carp; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::PRNG Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::PRNG Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::PRNG Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::PRNG Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use base qw(Crypt::PRNG Exporter); |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; |
7 | 7 | our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings ; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | require XSLoader; |
7 | 7 | XSLoader::load('CryptX', $VERSION); |
10 | 10 | my $has_json; |
11 | 11 | |
12 | 12 | BEGIN { |
13 | if (eval { require Cpanel::JSON::XS }) { | |
14 | Cpanel::JSON::XS->import(qw(encode_json decode_json)); | |
15 | $has_json = 1; | |
16 | } | |
17 | elsif (eval { require JSON::XS }) { | |
18 | JSON::XS->import(qw(encode_json decode_json)); | |
19 | $has_json = 2; | |
20 | } | |
21 | elsif (eval { require JSON::PP }) { | |
22 | JSON::PP->import(qw(encode_json decode_json)); | |
23 | $has_json = 3; | |
24 | } | |
25 | else { | |
26 | $has_json = 0; | |
27 | } | |
13 | $has_json = 1 if eval { require JSON; 1 }; | |
28 | 14 | } |
29 | 15 | |
30 | 16 | sub _croak { |
37 | 23 | } |
38 | 24 | |
39 | 25 | sub _decode_json { |
40 | croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json; | |
41 | decode_json(shift); | |
26 | croak "FATAL: cannot find JSON module" if !$has_json; | |
27 | return JSON->new->utf8->decode(shift); | |
42 | 28 | } |
43 | 29 | |
44 | 30 | sub _encode_json { |
45 | croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json; | |
46 | my $data = shift; | |
47 | my $rv = encode_json($data); # non-canonical fallback | |
48 | return(eval { Cpanel::JSON::XS->new->canonical->encode($data) } || $rv) if $has_json == 1; | |
49 | return(eval { JSON::XS->new->canonical->encode($data) } || $rv) if $has_json == 2; | |
50 | return(eval { JSON::PP->new->canonical->encode($data) } || $rv) if $has_json == 3; | |
51 | return($rv); | |
31 | croak "FATAL: cannot find JSON module" if !$has_json; | |
32 | return JSON->new->utf8->canonical->encode(shift); | |
52 | 33 | } |
53 | 34 | |
54 | 35 | 1; |
129 | 110 | |
130 | 111 | =head1 COPYRIGHT |
131 | 112 | |
132 | Copyright (c) 2013-2020 DCIT, a.s. L<https://www.dcit.cz> / Karel Miko | |
113 | Copyright (c) 2013-2021 DCIT, a.s. L<https://www.dcit.cz> / Karel Miko | |
133 | 114 | |
134 | 115 | =cut |
1 | 1 | |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | our $VERSION = '0.070'; | |
4 | our $VERSION = '0.073'; | |
5 | 5 | |
6 | 6 | use CryptX; |
7 | 7 | use Carp; |
24 | 24 | if ((15 - ccm->noncelen) > ccm->L) { |
25 | 25 | ccm->L = 15 - ccm->noncelen; |
26 | 26 | } |
27 | if (ccm->L > 8) { | |
28 | return CRYPT_INVALID_ARG; | |
29 | } | |
27 | 30 | |
28 | 31 | /* decrease noncelen to match L */ |
29 | 32 | if ((ccm->noncelen + ccm->L) > 15) { |
37 | 40 | (ccm->L-1)); |
38 | 41 | |
39 | 42 | /* nonce */ |
40 | for (y = 0; y < (16 - (ccm->L + 1)); y++) { | |
43 | for (y = 0; y < 15 - ccm->L; y++) { | |
41 | 44 | ccm->PAD[x++] = nonce[y]; |
42 | 45 | } |
43 | 46 |
34 | 34 | } |
35 | 35 | |
36 | 36 | /* make sure the taglen is valid */ |
37 | if (taglen < 4 || taglen > 16 || (taglen % 2) == 1) { | |
37 | if (taglen < 4 || taglen > 16 || (taglen % 2) == 1 || aadlen < 0 || ptlen < 0) { | |
38 | 38 | return CRYPT_INVALID_ARG; |
39 | 39 | } |
40 | 40 | ccm->taglen = taglen; |
74 | 74 | } |
75 | 75 | |
76 | 76 | /* make sure the taglen is valid */ |
77 | if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1) { | |
77 | if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1 || headerlen > 0x7fffffffu) { | |
78 | 78 | return CRYPT_INVALID_ARG; |
79 | 79 | } |
80 | 80 | |
107 | 107 | if ((15 - noncelen) > L) { |
108 | 108 | L = 15 - noncelen; |
109 | 109 | } |
110 | if (L > 8) { | |
111 | return CRYPT_INVALID_ARG; | |
112 | } | |
110 | 113 | |
111 | 114 | /* allocate mem for the symmetric key */ |
112 | 115 | if (uskey == NULL) { |
140 | 143 | (L-1)); |
141 | 144 | |
142 | 145 | /* nonce */ |
143 | for (y = 0; y < (16 - (L + 1)); y++) { | |
146 | for (y = 0; y < 15 - L; y++) { | |
144 | 147 | PAD[x++] = nonce[y]; |
145 | 148 | } |
146 | 149 |
104 | 104 | #define ENDIAN_64BITWORD |
105 | 105 | #if defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) |
106 | 106 | #define ENDIAN_BIG |
107 | #endif | |
107 | #else | |
108 | 108 | #define ENDIAN_LITTLE |
109 | 109 | #endif |
110 | 110 | #endif |
181 | 181 | defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || \ |
182 | 182 | defined(__BIG_ENDIAN__) || \ |
183 | 183 | defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ |
184 | defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) | |
184 | defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || \ | |
185 | defined(__m68k__) | |
185 | 186 | #define ENDIAN_BIG |
186 | 187 | #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN || \ |
187 | 188 | defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \ |
285 | 286 | |
286 | 287 | #if !defined(LTC_NO_ROTATE) && (__has_builtin(__builtin_rotateleft32) && __has_builtin(__builtin_rotateright32)) |
287 | 288 | #define LTC_HAVE_ROTATE_BUILTIN |
289 | #endif | |
290 | ||
291 | #if defined(__GNUC__) | |
292 | #define LTC_ALIGN(n) __attribute__((aligned(n))) | |
293 | #else | |
294 | #define LTC_ALIGN(n) | |
288 | 295 | #endif |
289 | 296 | |
290 | 297 | #if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405) |
302 | 309 | # define LTC_DEPRECATED(s) |
303 | 310 | # define LTC_DEPRECATED_PRAGMA(s) |
304 | 311 | #endif |
312 | ||
313 | #endif /* TOMCRYPT_CFG_H */ |
317 | 317 | ctrlen; |
318 | 318 | |
319 | 319 | /** The counter */ |
320 | unsigned char ctr[MAXBLOCKSIZE], | |
320 | unsigned char ctr[MAXBLOCKSIZE]; | |
321 | 321 | /** The pad used to encrypt/decrypt */ |
322 | pad[MAXBLOCKSIZE]; | |
322 | unsigned char pad[MAXBLOCKSIZE] LTC_ALIGN(16); | |
323 | 323 | /** The scheduled key */ |
324 | 324 | symmetric_key key; |
325 | 325 | } symmetric_CTR; |
394 | 394 | typedef struct { |
395 | 395 | symmetric_key K; |
396 | 396 | int cipher, /* which cipher */ |
397 | taglen, /* length of the tag */ | |
397 | taglen, /* length of the tag (encoded in M value) */ | |
398 | 398 | x; /* index in PAD */ |
399 | 399 | |
400 | 400 | unsigned long L, /* L value */ |
404 | 404 | current_aadlen, /* length of the currently provided add */ |
405 | 405 | noncelen; /* length of the nonce */ |
406 | 406 | |
407 | unsigned char PAD[16], | |
407 | unsigned char PAD[16], /* flags | Nonce N | l(m) */ | |
408 | 408 | ctr[16], |
409 | 409 | CTRPAD[16], |
410 | 410 | CTRlen; |
481 | 481 | #ifdef LTC_GCM_TABLES |
482 | 482 | unsigned char PC[16][256][16] /* 16 tables of 8x128 */ |
483 | 483 | #ifdef LTC_GCM_TABLES_SSE2 |
484 | __attribute__ ((aligned (16))) | |
484 | LTC_ALIGN(16) | |
485 | 485 | #endif |
486 | 486 | ; |
487 | 487 | #endif |
383 | 383 | |
384 | 384 | #ifdef LTC_MDSA |
385 | 385 | |
386 | /* Max diff between group and modulus size in bytes */ | |
387 | #define LTC_MDSA_DELTA 512 | |
388 | ||
389 | /* Max DSA group size in bytes (default allows 4k-bit groups) */ | |
390 | #define LTC_MDSA_MAX_GROUP 512 | |
386 | /* Max diff between group and modulus size in bytes (max case: L=8192bits, N=256bits) */ | |
387 | #define LTC_MDSA_DELTA 992 | |
388 | ||
389 | /* Max DSA group size in bytes */ | |
390 | #define LTC_MDSA_MAX_GROUP 64 | |
391 | ||
392 | /* Max DSA modulus size in bytes (the actual DSA size, max 8192 bits) */ | |
393 | #define LTC_MDSA_MAX_MODULUS 1024 | |
391 | 394 | |
392 | 395 | /** DSA key structure */ |
393 | 396 | typedef struct { |
63 | 63 | } |
64 | 64 | #if defined(LTC_TEST) && defined(LTC_TEST_DBG) |
65 | 65 | if (res != 0) { |
66 | fprintf(stderr, "Testvector #%i of %s failed:\n", which, what); | |
66 | fprintf(stderr, "Testvector #%i(0x%x) of %s failed:\n", which, which, what); | |
67 | 67 | s_print_hex("SHOULD", should, should_len); |
68 | 68 | s_print_hex("IS ", is, is_len); |
69 | 69 | #if LTC_TEST_DBG > 1 |
70 | 70 | } else { |
71 | fprintf(stderr, "Testvector #%i of %s passed!\n", which, what); | |
71 | fprintf(stderr, "Testvector #%i(0x%x) of %s passed!\n", which, which, what); | |
72 | 72 | #endif |
73 | 73 | } |
74 | 74 | #else |
101 | 101 | {"LTC_MDSA", 1}, |
102 | 102 | C_STRINGIFY(LTC_MDSA_DELTA), |
103 | 103 | C_STRINGIFY(LTC_MDSA_MAX_GROUP), |
104 | C_STRINGIFY(LTC_MDSA_MAX_MODULUS), | |
104 | 105 | #else |
105 | 106 | {"LTC_MDSA", 0}, |
106 | 107 | #endif |
154 | 154 | } |
155 | 155 | |
156 | 156 | switch (type) { |
157 | case LTC_ASN1_CUSTOM_TYPE: | |
158 | case LTC_ASN1_SET: | |
159 | case LTC_ASN1_SETOF: | |
160 | case LTC_ASN1_SEQUENCE: | |
161 | break; | |
162 | default: | |
163 | /* Verify that all basic types are indeed UNIVERSAL&PRIMITIVE */ | |
164 | if (((flags & LTC_DER_SEQ_STRICT) == LTC_DER_SEQ_STRICT) && (inlen > 0)) { | |
165 | if (in[x] & 0xE0u) { | |
166 | err = CRYPT_PK_ASN1_ERROR; | |
167 | goto LBL_ERR; | |
168 | } | |
169 | } | |
170 | } | |
171 | ||
172 | switch (type) { | |
157 | 173 | case LTC_ASN1_BOOLEAN: |
158 | 174 | z = inlen; |
159 | 175 | if ((err = der_decode_boolean(in + x, z, ((int *)data))) != CRYPT_OK) { |
25 | 25 | int err, res, mr_tests_q, mr_tests_p, found_p, found_q, hash; |
26 | 26 | unsigned char *wbuf, *sbuf, digest[MAXBLOCKSIZE]; |
27 | 27 | void *t2L1, *t2N1, *t2q, *t2seedlen, *U, *W, *X, *c, *h, *e, *seedinc; |
28 | const char *accepted_hashes[] = { "sha3-512", "sha512", "sha3-384", "sha384", "sha3-256", "sha256" }; | |
28 | 29 | |
29 | 30 | /* check size */ |
30 | if (group_size >= LTC_MDSA_MAX_GROUP || group_size < 1 || group_size >= modulus_size) { | |
31 | if (group_size > LTC_MDSA_MAX_GROUP || group_size < 1 || group_size >= modulus_size || modulus_size > LTC_MDSA_MAX_MODULUS) { | |
31 | 32 | return CRYPT_INVALID_ARG; |
32 | 33 | } |
33 | 34 | |
86 | 87 | else { mr_tests_q = 64; } |
87 | 88 | #endif |
88 | 89 | |
89 | if (N <= 256) { | |
90 | hash = register_hash(&sha256_desc); | |
91 | } | |
92 | else if (N <= 384) { | |
93 | hash = register_hash(&sha384_desc); | |
94 | } | |
95 | else if (N <= 512) { | |
96 | hash = register_hash(&sha512_desc); | |
97 | } | |
98 | else { | |
90 | hash = -1; | |
91 | for (i = 0; i < sizeof(accepted_hashes)/sizeof(accepted_hashes[0]); ++i) { | |
92 | hash = find_hash(accepted_hashes[i]); | |
93 | if (hash != -1) break; | |
94 | } | |
95 | if (hash == -1) { | |
96 | return CRYPT_INVALID_ARG; /* no appropriate hash function found */ | |
97 | } | |
98 | if (N > hash_descriptor[hash].hashsize * 8) { | |
99 | 99 | return CRYPT_INVALID_ARG; /* group_size too big */ |
100 | 100 | } |
101 | 101 |
1 | 1 | use warnings; |
2 | 2 | use Test::More; |
3 | 3 | |
4 | plan skip_all => "No JSON::* module installed" unless eval { require JSON::PP } || eval { require JSON::XS } || eval { require Cpanel::JSON::XS }; | |
4 | plan skip_all => "JSON module not installed" unless eval { require JSON }; | |
5 | 5 | plan tests => 97; |
6 | 6 | |
7 | 7 | use Crypt::PK::RSA; |
19 | 19 | } |
20 | 20 | |
21 | 21 | use Math::BigFloat only => 'LTM'; |
22 | use Math::BigInt; | |
22 | use Math::BigInt only => 'LTM'; | |
23 | 23 | |
24 | 24 | my $cl = "Math::BigInt"; |
25 | 25 |
16 | 16 | } |
17 | 17 | |
18 | 18 | use Math::BigFloat only => 'LTM'; |
19 | use Math::BigInt; | |
19 | use Math::BigInt only => 'LTM'; | |
20 | 20 | |
21 | 21 | is (Math::BigInt->config()->{lib}, 'Math::BigInt::LTM', 'LTM loaded'); |
22 | 22 |
0 | 0 | use strict; |
1 | 1 | use warnings; |
2 | use Test::More tests => 91; | |
2 | ||
3 | use Test::More; | |
4 | ||
5 | plan skip_all => "JSON module not installed" unless eval { require JSON }; | |
6 | plan tests => 91; | |
3 | 7 | |
4 | 8 | use Crypt::PK::Ed25519; |
5 | 9 | use Crypt::Misc qw(read_rawfile); |
0 | 0 | use strict; |
1 | 1 | use warnings; |
2 | use Test::More tests => 49; | |
2 | use Test::More tests => 52; | |
3 | 3 | |
4 | 4 | use Crypt::PK::RSA qw(rsa_encrypt rsa_decrypt rsa_sign_message rsa_verify_message rsa_sign_hash rsa_verify_hash); |
5 | 5 | |
111 | 111 | ok($sig, 'rsa_sign_hash'); |
112 | 112 | ok(rsa_verify_hash('t/data/cryptx_pub_rsa1.der', $sig, $hash, 'SHA1'), 'rsa_verify_hash'); |
113 | 113 | } |
114 | ||
115 | { | |
116 | ## https://github.com/DCIT/perl-CryptX/issues/69 | |
117 | ||
118 | # my $priv = Crypt::PK::RSA->new({ | |
119 | # e => "03", | |
120 | # N => "E932AC92252F585B3A80A4DD76A897C8B7652952FE788F6EC8DD640587A1EE5647670A8AD4C2BE0F9FA6E49C605ADF77B5174230". | |
121 | # "AF7BD50E5D6D6D6D28CCF0A886A514CC72E51D209CC772A52EF419F6A953F3135929588EBE9B351FCA61CED78F346FE00DBB6306". | |
122 | # "E5C2A4C6DFC3779AF85AB417371CF34D8387B9B30AE46D7A5FF5A655B8D8455F1B94AE736989D60A6F2FD5CADBFFBD504C5A756A". | |
123 | # "2E6BB5CECC13BCA7503F6DF8B52ACE5C410997E98809DB4DC30D943DE4E812A47553DCE54844A78E36401D13F77DC650619FED88". | |
124 | # "D8B3926E3D8E319C80C744779AC5D6ABE252896950917476ECE5E8FC27D5F053D6018D91B502C4787558A002B9283DA7", | |
125 | # d => "009b771db6c374e59227006de8f9c5ba85cf98c63754505f9f30939803afc1498eda44b1b1e32c7eb51519edbd9591ea4fce0f81". | |
126 | # "75ca528e09939e48f37088a07059c36332f74368c06884f718c9f8114f1b8d4cb790c63b09d46778bfdc41348fb4cd9feab3d242". | |
127 | # "04992c6dd9ea824fbca591cd64cf68a233ad0526775c9848fafa31528177e1f8df9181a8b945081106fd58bd3d73799b229575c4". | |
128 | # "f3b29101a03ee1f05472b3615784d9244ce0ed639c77e8e212ab52abddf4a928224b6b6f74b7114786dd6071bd9113d7870c6b52". | |
129 | # "c0bc8b9c102cfe321dac357e030ed6c580040ca41c13d6b4967811807ef2a225983ea9f88d67faa42620f42a4f5bdbe03b", | |
130 | # }); | |
131 | # my $sig_hex = unpack("H*", $priv->sign_message('hello world!', 'SHA256', 'v1.5')); | |
132 | ||
133 | my $pub = Crypt::PK::RSA->new({ | |
134 | e => "03", | |
135 | N => "E932AC92252F585B3A80A4DD76A897C8B7652952FE788F6EC8DD640587A1EE5647670A8AD4C2BE0F9FA6E49C605ADF77B5174230". | |
136 | "AF7BD50E5D6D6D6D28CCF0A886A514CC72E51D209CC772A52EF419F6A953F3135929588EBE9B351FCA61CED78F346FE00DBB6306". | |
137 | "E5C2A4C6DFC3779AF85AB417371CF34D8387B9B30AE46D7A5FF5A655B8D8455F1B94AE736989D60A6F2FD5CADBFFBD504C5A756A". | |
138 | "2E6BB5CECC13BCA7503F6DF8B52ACE5C410997E98809DB4DC30D943DE4E812A47553DCE54844A78E36401D13F77DC650619FED88". | |
139 | "D8B3926E3D8E319C80C744779AC5D6ABE252896950917476ECE5E8FC27D5F053D6018D91B502C4787558A002B9283DA7", | |
140 | }); | |
141 | ||
142 | my $sig1 = pack("H*", "8df69d774c6ac8b5f8aa16576ca37a4f948706c5daecb3c15cfd247a7657616b2bbb786b50158cac8c23e3". | |
143 | "289d300d3fbb82380b8746d929df36bdaf43a5fc5d1d04c61c98d47c22de02d051be3ba9e42b1c47aa5192". | |
144 | "66d4cae244e5ce99b24771a13a7c8c7b08868a3eccf70b4bc7570d5131a1ac8943d91b0151c39da2ad75cd". | |
145 | "1b9a697d100eef6747217df581b272cfd1f549a901ff4951036a4eb28fd2ea1e9df3fa9fa457663f4259be". | |
146 | "8e5f2f2fb84f831a0ca5320e2b79f04a17830f43062c4c8fc0d0b1ff90567f3342d524f682ca26661caadf". | |
147 | "4272f2585e6013a92bfa68de72fe6174096890e4296aedd72da43aa508007df53fb852bd7162ab635b"); | |
148 | ||
149 | my $sig2 = pack("H*", "1ee08947536e6b11d8923c3b00061d26a6933b5345077ea0214fdcbcc1ad68395008ff709117047e6b01dd". | |
150 | "2a371dfa032c0732abc86ab2e0273bbd0dfe6b1c769e21bb9079982801d8f72e01be3244959312ab09bb8f". | |
151 | "88572dc23216719b9810c73edf826749604feb8da1345f83f0209271aca462c1235b4cb4ba538f85a9c03d". | |
152 | "d1dde1856fe73fd86b95566df2dfe8b0895c34489b97e02c8e48dabad7067619edec6267a776fa416fbcac". | |
153 | "0fcacf3efa7852ce33ed63a9149c685c303d98c3dc37ee87521bc5b130377345fc95c87aa48505470deaf6". | |
154 | "fb1064df041e3f03322b1ec90d3608deb17bf77f47066ecc6c511bfba69eed6da42881dcce603fcb2a"); | |
155 | ||
156 | my $sig3 = pack("H*", "02364fdabb83d98118fe3d3bb86866038de4dc6e569f59fd6dc0360d3785e7fbded2f5a4c6d87052aeab25". | |
157 | "c451a91f8dccbc0d6db3b59ddd57368180091183369221b67a399a96ca5d318a908575462fe42d1aabba27". | |
158 | "7b7b5bb2aae43567ecd671dfc1d8b935c7dc06d0058a45dadabfc21b1cbae3cb719f3bca8b1365576e2eb9". | |
159 | "54cba048beba174e515a919148ac4a9ae3505b3a8ad6326b63757d1dd59a9f83df60bb295b32d90053b016". | |
160 | "b4cd2745eb29f12a2aad86c05f04ebd3cca3a8c63c752ccad07d7fd4e6e2adab4f353efbda04a6b5b7f4a6". | |
161 | "d540c085e7ddc90f1665adb048dfc707eac2db28246e1bffe53f115a02f7c74defccafa7213cb22245"); | |
162 | ||
163 | is($pub->verify_message($sig1, 'hello world!', 'SHA256', 'v1.5'), 0, "github issue 69 - invalid signature/1"); | |
164 | is($pub->verify_message($sig2, 'hello world!', 'SHA256', 'v1.5'), 0, "github issue 69 - invalid signature/2"); | |
165 | is($pub->verify_message($sig3, 'hello world!', 'SHA256', 'v1.5'), 1, "github issue 69 - valid signature/3"); | |
166 | } |