Blame CryptX-0.053-adopt-to-the-new-libtomcrypt.patch

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