Loading...
--- Libc/Libc-391/gen/crypt.c
+++ Libc/Libc-763.11/gen/crypt.c
@@ -131,11 +131,12 @@
#endif
#ifndef BUILDING_VARIANT
STATIC void init_des(), init_perm(), permute();
+#ifdef DEBUG
+#include <stdio.h>
+STATIC void prtab();
+#endif
#endif /* BUILDING_VARIANT */
__private_extern__ int __crypt_des_cipher(), __crypt_des_setkey();
-#ifdef DEBUG
-STATIC prtab();
-#endif
/* ==================================== */
@@ -342,6 +343,11 @@
#endif /* BUILDING_VARIANT */
#endif /* LARGEDATA */
+#ifndef BUILDING_VARIANT
+__private_extern__ int __crypt_des_setkey_called = 0;
+#else /* BUILDING_VARIANT */
+__private_extern__ int __crypt_des_setkey_called;
+#endif /* BUILDING_VARIANT */
/* ===== (mostly) Standard DES Tables ==================== */
@@ -639,6 +645,7 @@
PERM6464(K,K0,K1,(unsigned char *)key,ptabp);
STORE(K&~0x03030303L, K0&~0x03030303L, K1, *(C_block *)key);
}
+ __crypt_des_setkey_called = 1;
return (0);
}
@@ -983,6 +990,12 @@
register int i, j, k;
C_block cblock;
+ /* Prevent encrypt from crashing if setkey was never called.
+ * This does not make a good cypher */
+ if (!__crypt_des_setkey_called) {
+ cblock.b32.i0 = cblock.b32.i1 = 0;
+ __crypt_des_setkey((char *)cblock.b);
+ }
for (i = 0; i < 8; i++) {
k = 0;
for (j = 0; j < 8; j++) {
@@ -1011,7 +1024,7 @@
#ifndef BUILDING_VARIANT
#ifdef DEBUG
-STATIC
+STATIC void
prtab(s, t, num_rows)
char *s;
unsigned char *t;