|
|
e6d1806 |
From 0fb25e59e825cdd996384a4571f5ac3a308b4784 Mon Sep 17 00:00:00 2001
|
|
|
e6d1806 |
From: Karel Miko <karel.miko@gmail.com>
|
|
|
e6d1806 |
Date: Mon, 4 Jun 2018 16:52:29 +0200
|
|
|
e6d1806 |
Subject: [PATCH] adopt to the new libtomcrypt
|
|
|
e6d1806 |
MIME-Version: 1.0
|
|
|
e6d1806 |
Content-Type: text/plain; charset=UTF-8
|
|
|
e6d1806 |
Content-Transfer-Encoding: 8bit
|
|
|
e6d1806 |
|
|
|
e6d1806 |
Petr Písař: Ported from CryptX-0.61:
|
|
|
e6d1806 |
|
|
|
e6d1806 |
commit 2466727cd0603184442ba7c8251e64674c6731a7
|
|
|
e6d1806 |
Author: Karel Miko <karel.miko@gmail.com>
|
|
|
e6d1806 |
Date: Mon Jun 4 16:52:29 2018 +0200
|
|
|
e6d1806 |
|
|
|
e6d1806 |
adopt to the new libtomcrypt
|
|
|
e6d1806 |
|
|
|
e6d1806 |
ECC support removed.
|
|
|
e6d1806 |
|
|
|
e6d1806 |
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
|
|
e6d1806 |
---
|
|
|
e6d1806 |
inc/CryptX_PK_ECC.xs.inc | 15 +++++++++++++++
|
|
|
e6d1806 |
lib/Crypt/Misc.pm | 3 +++
|
|
|
e6d1806 |
lib/Crypt/PK/RSA.pm | 5 +++++
|
|
|
e6d1806 |
t/cipher_des_ede.t | 12 ++++++------
|
|
|
e6d1806 |
4 files changed, 29 insertions(+), 6 deletions(-)
|
|
|
e6d1806 |
|
|
|
e6d1806 |
diff --git a/inc/CryptX_PK_ECC.xs.inc b/inc/CryptX_PK_ECC.xs.inc
|
|
|
e6d1806 |
index 2ecbd3c..a3afa69 100644
|
|
|
e6d1806 |
--- a/inc/CryptX_PK_ECC.xs.inc
|
|
|
e6d1806 |
+++ b/inc/CryptX_PK_ECC.xs.inc
|
|
|
e6d1806 |
@@ -45,6 +45,21 @@ _import(Crypt::PK::ECC self, SV * key_data)
|
|
|
e6d1806 |
XPUSHs(ST(0)); /* return self */
|
|
|
e6d1806 |
}
|
|
|
e6d1806 |
|
|
|
e6d1806 |
+void
|
|
|
e6d1806 |
+_import_old(Crypt::PK::ECC self, SV * key_data)
|
|
|
e6d1806 |
+ PPCODE:
|
|
|
e6d1806 |
+ {
|
|
|
e6d1806 |
+ int rv;
|
|
|
e6d1806 |
+ unsigned char *data=NULL;
|
|
|
e6d1806 |
+ STRLEN data_len=0;
|
|
|
e6d1806 |
+
|
|
|
e6d1806 |
+ data = (unsigned char *)SvPVbyte(key_data, data_len);
|
|
|
e6d1806 |
+ if (self->key.type != -1) { ecc_free(&self->key); self->key.type = -1; }
|
|
|
e6d1806 |
+ rv = ecc_import(data, (unsigned long)data_len, &self->key);
|
|
|
e6d1806 |
+ if (rv != CRYPT_OK) croak("FATAL: ecc_import failed: %s", error_to_string(rv));
|
|
|
e6d1806 |
+ XPUSHs(ST(0)); /* return self */
|
|
|
e6d1806 |
+ }
|
|
|
e6d1806 |
+
|
|
|
e6d1806 |
void
|
|
|
e6d1806 |
_import_pkcs8(Crypt::PK::ECC self, SV * key_data, SV * passwd)
|
|
|
e6d1806 |
PPCODE:
|
|
|
e6d1806 |
diff --git a/lib/Crypt/Misc.pm b/lib/Crypt/Misc.pm
|
|
|
e6d1806 |
index 9bd0223..523490c 100644
|
|
|
e6d1806 |
--- a/lib/Crypt/Misc.pm
|
|
|
e6d1806 |
+++ b/lib/Crypt/Misc.pm
|
|
|
e6d1806 |
@@ -252,6 +252,9 @@ sub _name2mode {
|
|
|
e6d1806 |
my ($cipher, undef, $klen, $mode) = $cipher_name =~ /^(AES|CAMELLIA|DES|DES-EDE3|SEED)(-(\d+))?-(CBC|CFB|ECB|OFB)$/i;
|
|
|
e6d1806 |
croak "FATAL: unsupported cipher '$cipher_name'" unless $cipher && $mode;
|
|
|
e6d1806 |
$cipher = $trans{$cipher} || $cipher;
|
|
|
e6d1806 |
+ $klen = 192 if $cipher eq 'DES_EDE';
|
|
|
e6d1806 |
+ $klen = 64 if $cipher eq 'DES';
|
|
|
e6d1806 |
+ $klen = 128 if $cipher eq 'SEED';
|
|
|
e6d1806 |
$klen = $klen ? int($klen/8) : Crypt::Cipher::min_keysize($cipher);
|
|
|
e6d1806 |
my $ilen = Crypt::Cipher::blocksize($cipher);
|
|
|
e6d1806 |
croak "FATAL: unsupported cipher '$cipher_name'" unless $klen && $ilen;
|
|
|
e6d1806 |
diff --git a/lib/Crypt/PK/RSA.pm b/lib/Crypt/PK/RSA.pm
|
|
|
e6d1806 |
index 69e1c1f..a0be518 100644
|
|
|
e6d1806 |
--- a/lib/Crypt/PK/RSA.pm
|
|
|
e6d1806 |
+++ b/lib/Crypt/PK/RSA.pm
|
|
|
e6d1806 |
@@ -10,6 +10,7 @@ our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
|
|
e6d1806 |
our @EXPORT = qw();
|
|
|
e6d1806 |
|
|
|
e6d1806 |
use Carp;
|
|
|
e6d1806 |
+$Carp::Internal{(__PACKAGE__)}++;
|
|
|
e6d1806 |
use CryptX qw(_encode_json _decode_json);
|
|
|
e6d1806 |
use Crypt::Digest qw(digest_data digest_data_b64u);
|
|
|
e6d1806 |
use Crypt::Misc qw(read_rawfile encode_b64u decode_b64u encode_b64 decode_b64 pem_to_der der_to_pem);
|
|
|
e6d1806 |
@@ -24,6 +25,7 @@ sub new {
|
|
|
e6d1806 |
|
|
|
e6d1806 |
sub export_key_pem {
|
|
|
e6d1806 |
my ($self, $type, $password, $cipher) = @_;
|
|
|
e6d1806 |
+ local $SIG{__DIE__} = \&CryptX::_croak;
|
|
|
e6d1806 |
my $key = $self->export_key_der($type||'');
|
|
|
e6d1806 |
return unless $key;
|
|
|
e6d1806 |
|
|
|
e6d1806 |
@@ -40,6 +42,7 @@ sub export_key_pem {
|
|
|
e6d1806 |
|
|
|
e6d1806 |
sub export_key_jwk {
|
|
|
e6d1806 |
my ($self, $type, $wanthash) = @_;
|
|
|
e6d1806 |
+ local $SIG{__DIE__} = \&CryptX::_croak;
|
|
|
e6d1806 |
my $kh = $self->key2hash;
|
|
|
e6d1806 |
if ($type eq 'private') {
|
|
|
e6d1806 |
return unless $kh->{N} && $kh->{e} && $kh->{d} && $kh->{p} && $kh->{q} && $kh->{dP} && $kh->{dQ} && $kh->{qP};
|
|
|
e6d1806 |
@@ -75,6 +78,7 @@ sub export_key_jwk {
|
|
|
e6d1806 |
|
|
|
e6d1806 |
sub export_key_jwk_thumbprint {
|
|
|
e6d1806 |
my ($self, $hash_name) = @_;
|
|
|
e6d1806 |
+ local $SIG{__DIE__} = \&CryptX::_croak;
|
|
|
e6d1806 |
$hash_name ||= 'SHA256';
|
|
|
e6d1806 |
my $h = $self->export_key_jwk('public', 1);
|
|
|
e6d1806 |
my $json = _encode_json({kty=>$h->{kty}, n=>$h->{n}, e=>$h->{e}});
|
|
|
e6d1806 |
@@ -83,6 +87,7 @@ sub export_key_jwk_thumbprint {
|
|
|
e6d1806 |
|
|
|
e6d1806 |
sub import_key {
|
|
|
e6d1806 |
my ($self, $key, $password) = @_;
|
|
|
e6d1806 |
+ local $SIG{__DIE__} = \&CryptX::_croak;
|
|
|
e6d1806 |
croak "FATAL: undefined key" unless $key;
|
|
|
e6d1806 |
|
|
|
e6d1806 |
# special case
|
|
|
e6d1806 |
diff --git a/t/cipher_des_ede.t b/t/cipher_des_ede.t
|
|
|
e6d1806 |
index cfd8d68..b8134db 100644
|
|
|
e6d1806 |
--- a/t/cipher_des_ede.t
|
|
|
e6d1806 |
+++ b/t/cipher_des_ede.t
|
|
|
e6d1806 |
@@ -11,13 +11,13 @@ use Crypt::Cipher::DES_EDE;
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE::blocksize, 8, '::blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE::keysize, 24, '::keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE::max_keysize, 24, '::max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher::DES_EDE::min_keysize, 24, '::min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher::DES_EDE::min_keysize, 16, '::min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE::default_rounds, 16, '::default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->blocksize, 8, '->blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->keysize, 24, '->keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->max_keysize, 24, '->max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher::DES_EDE->min_keysize, 24, '->min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher::DES_EDE->min_keysize, 16, '->min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->default_rounds, 16, '->default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
my $min_key = 'kkkkkkkkkkkkkkkkkkkkkkkk';
|
|
|
e6d1806 |
@@ -26,25 +26,25 @@ my $max_key = 'KKKKKKKKKKKKKKKKKKKKKKKK';
|
|
|
e6d1806 |
is( Crypt::Cipher::blocksize('DES_EDE'), 8, 'Cipher->blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher::keysize('DES_EDE'), 24, 'Cipher->keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::max_keysize('DES_EDE'), 24, 'Cipher->max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher::min_keysize('DES_EDE'), 24, 'Cipher->min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher::min_keysize('DES_EDE'), 16, 'Cipher->min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::default_rounds('DES_EDE'), 16, 'Cipher->default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
is( Crypt::Cipher->blocksize('DES_EDE'), 8, 'Cipher->blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher->keysize('DES_EDE'), 24, 'Cipher->keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher->max_keysize('DES_EDE'), 24, 'Cipher->max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher->min_keysize('DES_EDE'), 24, 'Cipher->min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher->min_keysize('DES_EDE'), 16, 'Cipher->min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher->default_rounds('DES_EDE'), 16, 'Cipher->default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->new($min_key)->blocksize, 8, 'DES_EDE->new()->blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->new($min_key)->keysize, 24, 'DES_EDE->new()->keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->new($min_key)->max_keysize, 24, 'DES_EDE->new()->max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher::DES_EDE->new($min_key)->min_keysize, 24, 'DES_EDE->new()->min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher::DES_EDE->new($min_key)->min_keysize, 16, 'DES_EDE->new()->min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher::DES_EDE->new($min_key)->default_rounds, 16, 'DES_EDE->new()->default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
is( Crypt::Cipher->new('DES_EDE', $min_key)->blocksize, 8, 'Cipher->new()->blocksize');
|
|
|
e6d1806 |
is( Crypt::Cipher->new('DES_EDE', $min_key)->keysize, 24, 'Cipher->new()->keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher->new('DES_EDE', $min_key)->max_keysize, 24, 'Cipher->new()->max_keysize');
|
|
|
e6d1806 |
-is( Crypt::Cipher->new('DES_EDE', $min_key)->min_keysize, 24, 'Cipher->new()->min_keysize');
|
|
|
e6d1806 |
+is( Crypt::Cipher->new('DES_EDE', $min_key)->min_keysize, 16, 'Cipher->new()->min_keysize');
|
|
|
e6d1806 |
is( Crypt::Cipher->new('DES_EDE', $min_key)->default_rounds, 16, 'Cipher->new()->default_rounds');
|
|
|
e6d1806 |
|
|
|
e6d1806 |
my $block_plain = 'BBBBBBBB';
|
|
|
e6d1806 |
--
|
|
|
e6d1806 |
2.17.2
|
|
|
e6d1806 |
|