be19e32
From 524db900a5b2d2b260ba83526b4f152653743d83 Mon Sep 17 00:00:00 2001
be19e32
From: Lincoln Stein <lincoln.stein@gmail.com>
be19e32
Date: Thu, 20 May 2021 12:02:24 -0400
be19e32
Subject: [PATCH] Fixed bug in which manually-specified key and -pkdf=>"none"
be19e32
 was not having effect
be19e32
be19e32
---
be19e32
 Changes          |  3 +++
be19e32
 lib/Crypt/CBC.pm | 12 ++++++------
be19e32
 2 files changed, 9 insertions(+), 6 deletions(-)
be19e32
be19e32
diff --git a/Changes b/Changes
be19e32
index 524b74e..0919bb5 100644
be19e32
--- a/Changes
be19e32
+++ b/Changes
be19e32
@@ -1,4 +1,7 @@
be19e32
 Revision history for Perl extension Crypt::CBC.
be19e32
+3.05	 Thu 20 May 2021 12:00:18 PM EDT
be19e32
+	 - Fixed bug involving manually-specified key not being used in some circumstances.
be19e32
+	 
be19e32
 3.04	 Mon 17 May 2021 10:58:37 AM EDT
be19e32
         - Fixed bug involving manually-specified IV not being used in some circumstances.
be19e32
 	
be19e32
diff --git a/lib/Crypt/CBC.pm b/lib/Crypt/CBC.pm
be19e32
index f935bbc..327fc4c 100644
be19e32
--- a/lib/Crypt/CBC.pm
be19e32
+++ b/lib/Crypt/CBC.pm
be19e32
@@ -72,11 +72,11 @@ sub new {
be19e32
 
be19e32
     # HEADER consistency
be19e32
     if ($header_mode eq 'salt') {
be19e32
-	croak "Cannot use salt-based key generation if literal key is specified"
be19e32
+	croak "Cannot use -header mode of 'salt' if a literal key is specified or key derivation function is none"
be19e32
 	    if $literal_key;
be19e32
     }
be19e32
     elsif ($header_mode eq 'randomiv') {
be19e32
-	croak "Cannot encrypt using a non-8 byte blocksize cipher when using randomiv header mode"
be19e32
+	croak "Cannot use -header mode of 'randomiv' in conjunction with a cipher whose blocksize greater than 8"
be19e32
 	    unless $bs == 8
be19e32
     }
be19e32
 
be19e32
@@ -618,16 +618,15 @@ sub pbkdf_obj {
be19e32
 }
be19e32
 
be19e32
 ############################# generating key, iv and salt ########################
be19e32
-# hopefully a replacement for mess below
be19e32
 sub set_key_and_iv {
be19e32
     my $self = shift;
be19e32
 
be19e32
-    if (!$self->{literal_key}) {
be19e32
+    if ($self->pbkdf eq 'none' || $self->{literal_key}) {
be19e32
+	$self->{iv} = $self->_get_random_bytes($self->blocksize) if $self->{make_random_iv};
be19e32
+    } else {
be19e32
 	my ($key,$iv) = $self->pbkdf_obj->key_and_iv($self->{salt},$self->{passphrase});
be19e32
 	$self->{key} = $key;
be19e32
 	$self->{iv}  = $iv if $self->{make_random_iv}; 
be19e32
-    } else {
be19e32
-	$self->{iv} = $self->_get_random_bytes($self->blocksize) if $self->{make_random_iv};
be19e32
     }
be19e32
 
be19e32
     length $self->{salt} == 8                  or croak "Salt must be exactly 8 bytes long";
be19e32
@@ -929,6 +928,7 @@ Crypt::CBC - Encrypt Data with Cipher Block Chaining Mode
be19e32
   $key    = Crypt::CBC->random_bytes(8);  # assuming a 8-byte block cipher
be19e32
   $iv     = Crypt::CBC->random_bytes(8);
be19e32
   $cipher = Crypt::CBC->new(-pbkdf       => 'none',
be19e32
+                            -header      => 'none',
be19e32
                             -key         => $key,
be19e32
                             -iv          => $iv);
be19e32
 
be19e32
-- 
be19e32
2.35.1
be19e32