summaryrefslogtreecommitdiff
path: root/missing/crypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'missing/crypt.c')
-rw-r--r--missing/crypt.c52
1 files changed, 37 insertions, 15 deletions
diff --git a/missing/crypt.c b/missing/crypt.c
index 486df5050b..d5a9281f77 100644
--- a/missing/crypt.c
+++ b/missing/crypt.c
@@ -107,13 +107,15 @@ static char sccsid[] = "@(#)crypt.c 8.1 (Berkeley) 6/4/93";
#define LARGEDATA
#endif
+int des_setkey(), des_cipher();
+
/* compile with "-DSTATIC=int" when profiling */
#ifndef STATIC
#define STATIC static
#endif
-STATIC init_des(), init_perm(), permute();
+STATIC void init_des(), init_perm(), permute();
#ifdef DEBUG
-STATIC prtab();
+STATIC void prtab();
#endif
/* ==================================== */
@@ -255,10 +257,10 @@ typedef union {
*/
#define TO_SIX_BIT(rslt, src) { \
C_block cvt; \
- cvt.b[0] = src; src >>= 6; \
- cvt.b[1] = src; src >>= 6; \
- cvt.b[2] = src; src >>= 6; \
- cvt.b[3] = src; \
+ cvt.b[0] = (unsigned char)src; src >>= 6; \
+ cvt.b[1] = (unsigned char)src; src >>= 6; \
+ cvt.b[2] = (unsigned char)src; src >>= 6; \
+ cvt.b[3] = (unsigned char)src; \
rslt = (cvt.b32.i0 & 0x3f3f3f3fL) << 2; \
}
@@ -299,7 +301,7 @@ typedef union {
#define PERM3264(d,d0,d1,cpp,p) \
{ C_block tblk; permute(cpp,&tblk,p,4); LOAD (d,d0,d1,tblk); }
-STATIC
+STATIC void
permute(cp, out, p, chars_in)
unsigned char *cp;
C_block *out;
@@ -377,46 +379,62 @@ static unsigned char PC2[] = { /* permuted choice table 2 */
};
static unsigned char S[8][64] = { /* 48->32 bit substitution tables */
+ {
/* S[1] */
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
+ },
+ {
/* S[2] */
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,
+ },
+ {
/* S[3] */
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,
+ },
+ {
/* S[4] */
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
+ },
+ {
/* S[5] */
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,
+ },
+ {
/* S[6] */
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,
+ },
+ {
/* S[7] */
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,
+ },
+ {
/* S[8] */
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11,
+ },
};
static unsigned char P32Tr[] = { /* 32-bit permutation function */
@@ -580,6 +598,7 @@ static C_block KS[KS_SIZE];
/*
* Set up the key schedule from the key.
*/
+int
des_setkey(key)
register const char *key;
{
@@ -614,6 +633,7 @@ des_setkey(key)
* NOTE: the performance of this routine is critically dependent on your
* compiler and machine architecture.
*/
+int
des_cipher(in, out, salt, num_iter)
const char *in;
char *out;
@@ -660,13 +680,13 @@ des_cipher(in, out, salt, num_iter)
if (num_iter >= 0)
{ /* encryption */
kp = &KS[0];
- ks_inc = sizeof(*kp);
+ ks_inc = (int)sizeof(*kp);
}
else
{ /* decryption */
num_iter = -num_iter;
kp = &KS[KS_SIZE-1];
- ks_inc = -sizeof(*kp);
+ ks_inc = -(int)sizeof(*kp);
}
while (--num_iter >= 0) {
@@ -734,7 +754,7 @@ des_cipher(in, out, salt, num_iter)
* Initialize various tables. This need only be done once. It could even be
* done at compile time, if the compiler were capable of that sort of thing.
*/
-STATIC
+STATIC void
init_des()
{
register int i, j;
@@ -764,7 +784,7 @@ init_des()
k = (k|07) - (k&07);
k++;
}
- perm[i] = k;
+ perm[i] = (unsigned char)k;
}
#ifdef DEBUG
prtab("pc1tab", perm, 8);
@@ -811,7 +831,7 @@ init_des()
k = (k|07) - (k&07);
k++;
}
- perm[i*8+j] = k;
+ perm[i*8+j] = (unsigned char)k;
}
}
#ifdef DEBUG
@@ -857,7 +877,7 @@ init_des()
for (i = 0; i < 32; i++)
tmp32[i] = 0;
for (i = 0; i < 4; i++)
- tmp32[4 * tableno + i] = (k >> i) & 01;
+ tmp32[4 * tableno + i] = (unsigned char)(k >> i) & 01;
k = 0;
for (i = 24; --i >= 0; )
k = (k<<1) | tmp32[perm[i]-1];
@@ -878,7 +898,7 @@ init_des()
*
* "perm" must be all-zeroes on entry to this routine.
*/
-STATIC
+STATIC void
init_perm(perm, p, chars_in, chars_out)
C_block perm[64/CHUNKBITS][1<<CHUNKBITS];
unsigned char p[64];
@@ -902,6 +922,7 @@ init_perm(perm, p, chars_in, chars_out)
/*
* "setkey" routine (for backwards compatibility)
*/
+int
setkey(key)
register const char *key;
{
@@ -922,6 +943,7 @@ setkey(key)
/*
* "encrypt" routine (for backwards compatibility)
*/
+int
encrypt(block, flag)
register char *block;
int flag;
@@ -950,7 +972,7 @@ encrypt(block, flag)
}
#ifdef DEBUG
-STATIC
+STATIC void
prtab(s, t, num_rows)
char *s;
unsigned char *t;