Loading...
--- Libc/Libc-1725.40.4/gen/crypt.c
+++ Libc/Libc-320/gen/crypt.c
@@ -2,6 +2,8 @@
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
+ *
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
@@ -56,13 +58,9 @@
* SUCH DAMAGE.
*/
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wstrict-prototypes"
-
-#include <sys/cdefs.h>
+
#include <unistd.h>
#include <limits.h>
-#include <sys/types.h>
#include <pwd.h>
#include <stdlib.h>
@@ -87,7 +85,7 @@
/*
* define "MUST_ALIGN" if your compiler cannot load/store
* long integers at arbitrary (e.g. odd) memory locations.
- * (Either that or never pass unaligned addresses to __crypt_des_cipher!)
+ * (Either that or never pass unaligned addresses to des_cipher!)
*/
#if !defined(vax)
#define MUST_ALIGN
@@ -103,7 +101,7 @@
* define "LONG_IS_32_BITS" only if sizeof(long)==4.
* This avoids use of bit fields (your compiler may be sloppy with them).
*/
-#if !defined(cray) && (LONG_BIT == 32)
+#if !defined(cray)
#define LONG_IS_32_BITS
#endif
@@ -120,7 +118,7 @@
/*
* define "LARGEDATA" to get faster permutations, by using about 72 kilobytes
- * of lookup tables. This speeds up __crypt_des_setkey() and __crypt_des_cipher(), but has
+ * of lookup tables. This speeds up des_setkey() and des_cipher(), but has
* little effect on crypt().
*/
#if defined(notdef)
@@ -131,14 +129,11 @@
#ifndef STATIC
#define STATIC static
#endif
-#ifndef BUILDING_VARIANT
STATIC void init_des(), init_perm(), permute();
+STATIC int des_cipher(), des_setkey();
#ifdef DEBUG
-#include <stdio.h>
-STATIC void prtab();
-#endif
-#endif /* BUILDING_VARIANT */
-__private_extern__ int __crypt_des_cipher(), __crypt_des_setkey();
+STATIC prtab();
+#endif
/* ==================================== */
@@ -323,7 +318,6 @@
#define PERM3264(d,d0,d1,cpp,p) \
{ C_block tblk; permute(cpp,&tblk,p,4); LOAD (d,d0,d1,tblk); }
-#ifndef BUILDING_VARIANT
STATIC void permute(cp, out, p, chars_in)
unsigned char *cp;
C_block *out;
@@ -342,19 +336,12 @@
} while (--chars_in > 0);
STORE(D,D0,D1,*out);
}
-#endif /* BUILDING_VARIANT */
#endif /* LARGEDATA */
-#ifndef BUILDING_VARIANT
-__private_extern__ int __crypt_des_setkey_called = 0;
-#else /* BUILDING_VARIANT */
-extern int __crypt_des_setkey_called;
-#endif /* BUILDING_VARIANT */
/* ===== (mostly) Standard DES Tables ==================== */
-#ifndef BUILDING_VARIANT
-static const unsigned char IP[] = { /* initial permutation */
+static unsigned char IP[] = { /* initial permutation */
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
@@ -367,7 +354,7 @@
/* The final permutation is the inverse of IP - no table is necessary */
-static const unsigned char ExpandTr[] = { /* expansion operation */
+static unsigned char ExpandTr[] = { /* expansion operation */
32, 1, 2, 3, 4, 5,
4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13,
@@ -378,7 +365,7 @@
28, 29, 30, 31, 32, 1,
};
-static const unsigned char PC1[] = { /* permuted choice table 1 */
+static unsigned char PC1[] = { /* permuted choice table 1 */
57, 49, 41, 33, 25, 17, 9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
@@ -390,12 +377,12 @@
21, 13, 5, 28, 20, 12, 4,
};
-static const unsigned char Rotates[] = { /* PC1 rotation schedule */
+static unsigned char Rotates[] = { /* PC1 rotation schedule */
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1,
};
/* note: each "row" of PC2 is left-padded with bits that make it invertible */
-static const unsigned char PC2[] = { /* permuted choice table 2 */
+static unsigned char PC2[] = { /* permuted choice table 2 */
9, 18, 14, 17, 11, 24, 1, 5,
22, 25, 3, 28, 15, 6, 21, 10,
35, 38, 23, 19, 12, 4, 26, 8,
@@ -458,7 +445,7 @@
},
};
-static const unsigned char P32Tr[] = { /* 32-bit permutation function */
+static unsigned char P32Tr[] = { /* 32-bit permutation function */
16, 7, 20, 21,
29, 12, 28, 17,
1, 15, 23, 26,
@@ -469,7 +456,7 @@
22, 11, 4, 25,
};
-static const unsigned char CIFP[] = { /* compressed/interleaved permutation */
+static unsigned char CIFP[] = { /* compressed/interleaved permutation */
1, 2, 3, 4, 17, 18, 19, 20,
5, 6, 7, 8, 21, 22, 23, 24,
9, 10, 11, 12, 25, 26, 27, 28,
@@ -481,24 +468,14 @@
45, 46, 47, 48, 61, 62, 63, 64,
};
-static const unsigned char itoa64[] = /* 0..63 => ascii-64 */
+static unsigned char itoa64[] = /* 0..63 => ascii-64 */
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/* ===== Tables that are initialized at run time ==================== */
-/* ascii-64 => 0..63 */
-static const unsigned char a64toi[128] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 0, 0, 0, 0, 0,
- 0, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0,
-};
+static unsigned char a64toi[128]; /* ascii-64 => 0..63 */
/* Initial key schedule permutation */
// static C_block PC1ROT[64/CHUNKBITS][1<<CHUNKBITS];
@@ -548,7 +525,7 @@
key++;
keyblock.b[i] = t;
}
- if (__crypt_des_setkey((char *)keyblock.b)) /* also initializes "a64toi" */
+ if (des_setkey((char *)keyblock.b)) /* also initializes "a64toi" */
return (NULL);
encp = &cryptresult[0];
@@ -558,7 +535,7 @@
* Involve the rest of the password 8 characters at a time.
*/
while (*key) {
- if (__crypt_des_cipher((char *)&keyblock,
+ if (des_cipher((char *)&keyblock,
(char *)&keyblock, 0L, 1))
return (NULL);
for (i = 0; i < 8; i++) {
@@ -566,7 +543,7 @@
key++;
keyblock.b[i] ^= t;
}
- if (__crypt_des_setkey((char *)keyblock.b))
+ if (des_setkey((char *)keyblock.b))
return (NULL);
}
@@ -597,7 +574,7 @@
salt = (salt<<6) | a64toi[t];
}
encp += salt_size;
- if (__crypt_des_cipher((char *)&constdatablock, (char *)&rsltblock,
+ if (des_cipher((char *)&constdatablock, (char *)&rsltblock,
salt, num_iter))
return (NULL);
@@ -626,7 +603,7 @@
/*
- * The Key Schedule, filled in by __crypt_des_setkey() or setkey().
+ * The Key Schedule, filled in by des_setkey() or setkey().
*/
#define KS_SIZE 16
static C_block KS[KS_SIZE];
@@ -634,7 +611,7 @@
/*
* Set up the key schedule from the key.
*/
-__private_extern__ int __crypt_des_setkey(key)
+STATIC int des_setkey(key)
register const char *key;
{
register DCL_BLOCK(K, K0, K1);
@@ -657,7 +634,6 @@
PERM6464(K,K0,K1,(unsigned char *)key,ptabp);
STORE(K&~0x03030303L, K0&~0x03030303L, K1, *(C_block *)key);
}
- __crypt_des_setkey_called = 1;
return (0);
}
@@ -669,7 +645,7 @@
* NOTE: the performance of this routine is critically dependent on your
* compiler and machine architecture.
*/
-__private_extern__ int __crypt_des_cipher(in, out, salt, num_iter)
+STATIC int des_cipher(in, out, salt, num_iter)
const char *in;
char *out;
long salt;
@@ -681,8 +657,7 @@
#endif
register long L0, L1, R0, R1, k;
register C_block *kp;
- register int loop_count;
- ssize_t ks_inc;
+ register int ks_inc, loop_count;
C_block B;
L0 = salt;
@@ -795,11 +770,19 @@
register int i, j;
register long k;
register int tableno;
- unsigned char perm[64] = {0};
+ static unsigned char perm[64], tmp32[32]; /* "static" for speed */
+
+ /*
+ * table that converts chars "./0-9A-Za-z"to integers 0-63.
+ */
+ for (i = 0; i < 64; i++)
+ a64toi[itoa64[i]] = i;
/*
* PC1ROT - bit reverse, then PC1, then Rotate, then PC2.
*/
+ for (i = 0; i < 64; i++)
+ perm[i] = 0;
for (i = 0; i < 64; i++) {
if ((k = PC2[i]) == 0)
continue;
@@ -896,7 +879,6 @@
perm[i] = P32Tr[ExpandTr[i]-1];
for (tableno = 0; tableno < 8; tableno++) {
for (j = 0; j < 64; j++) {
- unsigned char tmp32[32] = { 0 };
k = (((j >> 0) &01) << 5)|
(((j >> 1) &01) << 3)|
(((j >> 2) &01) << 2)|
@@ -908,6 +890,8 @@
(((k >> 2)&01) << 1)|
(((k >> 1)&01) << 2)|
(((k >> 0)&01) << 3);
+ for (i = 0; i < 32; i++)
+ tmp32[i] = 0;
for (i = 0; i < 4; i++)
tmp32[4 * tableno + i] = (k >> i) & 01;
k = 0;
@@ -949,16 +933,11 @@
}
}
}
-#endif /* BUILDING_VARIANT */
/*
* "setkey" routine (for backwards compatibility)
*/
-#if __DARWIN_UNIX03
-void setkey(key)
-#else /* !__DARWIN_UNIX03 */
int setkey(key)
-#endif /* __DARWIN_UNIX03 */
register const char *key;
{
register int i, j, k;
@@ -972,33 +951,19 @@
}
keyblock.b[i] = k;
}
-#if __DARWIN_UNIX03
- __crypt_des_setkey((char *)keyblock.b);
-#else /* !__DARWIN_UNIX03 */
- return (__crypt_des_setkey((char *)keyblock.b));
-#endif /* __DARWIN_UNIX03 */
+ return (des_setkey((char *)keyblock.b));
}
/*
* "encrypt" routine (for backwards compatibility)
*/
-#if __DARWIN_UNIX03
-void encrypt(block, flag)
-#else /* !__DARWIN_UNIX03 */
int encrypt(block, flag)
-#endif /* __DARWIN_UNIX03 */
register char *block;
int flag;
{
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++) {
@@ -1007,12 +972,8 @@
}
cblock.b[i] = k;
}
- if (__crypt_des_cipher((char *)&cblock, (char *)&cblock, 0L, (flag ? -1: 1)))
-#if __DARWIN_UNIX03
- return;
-#else /* !__DARWIN_UNIX03 */
+ if (des_cipher((char *)&cblock, (char *)&cblock, 0L, (flag ? -1: 1)))
return (1);
-#endif /* __DARWIN_UNIX03 */
for (i = 7; i >= 0; i--) {
k = cblock.b[i];
for (j = 7; j >= 0; j--) {
@@ -1020,14 +981,11 @@
k >>= 1;
}
}
-#if !__DARWIN_UNIX03
return (0);
-#endif /* !__DARWIN_UNIX03 */
}
-#ifndef BUILDING_VARIANT
#ifdef DEBUG
-STATIC void
+STATIC
prtab(s, t, num_rows)
char *s;
unsigned char *t;
@@ -1045,6 +1003,3 @@
(void)printf("\n");
}
#endif
-#endif /* BUILDING_VARIANT */
-
-#pragma clang diagnostic pop