From f2264981caf8fd54b46a7af66b9ee3a6f35a1713 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Fri, 16 May 1997 20:40:21 +0200
Subject: [PATCH] *** empty log message ***

Rev: lib/modules/Crypto/des3.pike:1.3
---
 lib/modules/Crypto/des3.pike | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/lib/modules/Crypto/des3.pike b/lib/modules/Crypto/des3.pike
index a62481ea10..e1d72af227 100644
--- a/lib/modules/Crypto/des3.pike
+++ b/lib/modules/Crypto/des3.pike
@@ -16,21 +16,31 @@ int query_key_size() { return 16; }
 
 int query_block_size() { return 8; }
 
+private array(string) split_key(string key)
+{
+  string k1 = key[..7];
+  string k2 = key[8..15];
+  string k3 = (strlen(key) > 16) ? key[16..] : k1;
+  return ({ k1, k2, k3 });
+}
+
 /* An exception will be raised if key is weak */
 object set_encrypt_key(string key)
 {
-  pipe :: set_encrypt_key(key[..7], key[8..], key[..7]);
+  array(string) keys = split_key(key);
+  pipe :: set_encrypt_key( @ keys);
   /* Switch mode of middle crypto */
-  d[1]->set_decrypt_key(key[8..]);
+  d[1]->set_decrypt_key(keys[1]);
   return this_object();
 }
 
 /* An exception will be raised if key is weak */
 object set_decrypt_key(string key)
 {
-  pipe :: set_decrypt_key(key[..7], key[8..], key[..7]);
+  array(string) keys = split_key(key);
+  pipe :: set_decrypt_key( @ keys);
   /* Switch mode of middle crypto */
-  d[1]->set_encrypt_key(key[8..]);
+  d[1]->set_encrypt_key(keys[1]);
   return this_object();
 }
 
-- 
GitLab