#include "c.h"#include <limits.h>#include <unistd.h>
Go to the source code of this file.
Data Structures | |
| union | C_block |
Defines | |
| #define | B64 __int64 |
| #define | STATIC static void |
| #define | _PASSWORD_EFMT1 '_' |
| #define | TO_SIX_BIT(rslt, src) |
| #define | ZERO(d, d0, d1) d0 = 0, d1 = 0 |
| #define | LOAD(d, d0, d1, bl) d0 = (bl).b32.i0, d1 = (bl).b32.i1 |
| #define | LOADREG(d, d0, d1, s, s0, s1) d0 = s0, d1 = s1 |
| #define | OR(d, d0, d1, bl) d0 |= (bl).b32.i0, d1 |= (bl).b32.i1 |
| #define | STORE(s, s0, s1, bl) (bl).b32.i0 = s0, (bl).b32.i1 = s1 |
| #define | DCL_BLOCK(d, d0, d1) int32_t d0, d1 |
| #define | LGCHUNKBITS 2 |
| #define | CHUNKBITS (1<<LGCHUNKBITS) |
| #define | PERM6464(d, d0, d1, cpp, p) { C_block tblk; permute(cpp,&tblk,p,8); LOAD (d,d0,d1,tblk); } |
| #define | PERM3264(d, d0, d1, cpp, p) { C_block tblk; permute(cpp,&tblk,p,4); LOAD (d,d0,d1,tblk); } |
| #define | KS_SIZE 16 |
| #define | SALT salt |
| #define | SPTAB(t, i) (*(int32_t *)((unsigned char *)(t) + (i)*(sizeof(int32_t)/4))) |
| #define | DOXOR(x, y, i) k=B.b[i]; x^=SPTAB(SPE[0][i],k); y^=SPTAB(SPE[1][i],k); |
| #define | CRUNCH(p0, p1, q0, q1) |
Typedefs | |
| typedef int | int32_t |
Functions | |
| static int | des_setkey (const char *key) |
| static int | des_cipher (const char *in, char *out, long salt, int num_iter) |
| STATIC | init_des (void) |
| STATIC | init_perm (C_block[64/CHUNKBITS][1<< CHUNKBITS], unsigned char[64], int, int) |
| STATIC | permute (unsigned char *, C_block *, C_block *, int) |
| char * | __md5crypt (const char *, const char *) |
| char * | __bcrypt (const char *, const char *) |
| char * | crypt (char *key, const char *setting) const |
| static int | des_setkey (char *key) const |
| static int | des_cipher (char *in, char *out, long salt, int num_iter) const |
| STATIC | init_perm (perm, p, int chars_in, int chars_out) |
Variables | |
| static const unsigned char | IP [] |
| static const unsigned char | ExpandTr [] |
| static const unsigned char | PC1 [] |
| static const unsigned char | Rotates [] |
| static const unsigned char | PC2 [] |
| static const unsigned char | S [8][64] |
| static const unsigned char | P32Tr [] |
| static const unsigned char | CIFP [] |
| static const unsigned char | itoa64 [] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
| static unsigned char | a64toi [128] |
| static C_block | PC1ROT [64/CHUNKBITS][1<< CHUNKBITS] |
| static C_block | PC2ROT [2][64/CHUNKBITS][1<< CHUNKBITS] |
| static C_block | IE3264 [32/CHUNKBITS][1<< CHUNKBITS] |
| static int32_t | SPE [2][8][64] |
| static C_block | CF6464 [64/CHUNKBITS][1<< CHUNKBITS] |
| static C_block | constdatablock |
| static char | cryptresult [1+4+4+11+1] |
| static C_block | KS [KS_SIZE] |
| static volatile int | des_ready = 0 |
| #define CRUNCH | ( | p0, | ||
| p1, | ||||
| q0, | ||||
| q1 | ||||
| ) |
k = ((q0) ^ (q1)) & SALT; \
B.b32.i0 = k ^ (q0) ^ kp->b32.i0; \
B.b32.i1 = k ^ (q1) ^ kp->b32.i1; \
kp = (C_block *)((char *)kp+ks_inc); \
\
DOXOR(p0, p1, 0); \
DOXOR(p0, p1, 1); \
DOXOR(p0, p1, 2); \
DOXOR(p0, p1, 3); \
DOXOR(p0, p1, 4); \
DOXOR(p0, p1, 5); \
DOXOR(p0, p1, 6); \
DOXOR(p0, p1, 7);
Referenced by des_cipher().
| #define DCL_BLOCK | ( | d, | ||
| d0, | ||||
| d1 | ||||
| ) | int32_t d0, d1 |
Definition at line 262 of file crypt.c.
Referenced by des_setkey(), and permute().
| #define KS_SIZE 16 |
Definition at line 624 of file crypt.c.
Referenced by des_cipher().
| #define LOAD | ( | d, | ||
| d0, | ||||
| d1, | ||||
| bl | ||||
| ) | d0 = (bl).b32.i0, d1 = (bl).b32.i1 |
Definition at line 258 of file crypt.c.
Referenced by des_cipher().
Definition at line 259 of file crypt.c.
Referenced by des_cipher().
| #define OR | ( | d, | ||
| d0, | ||||
| d1, | ||||
| bl | ||||
| ) | d0 |= (bl).b32.i0, d1 |= (bl).b32.i1 |
| #define PERM3264 | ( | d, | ||
| d0, | ||||
| d1, | ||||
| cpp, | ||||
| p | ||||
| ) | { C_block tblk; permute(cpp,&tblk,p,4); LOAD (d,d0,d1,tblk); } |
Definition at line 288 of file crypt.c.
Referenced by des_cipher().
| #define PERM6464 | ( | d, | ||
| d0, | ||||
| d1, | ||||
| cpp, | ||||
| p | ||||
| ) | { C_block tblk; permute(cpp,&tblk,p,8); LOAD (d,d0,d1,tblk); } |
Definition at line 286 of file crypt.c.
Referenced by des_cipher(), and des_setkey().
| #define SALT salt |
Definition at line 261 of file crypt.c.
Referenced by des_cipher(), des_setkey(), and permute().
| #define TO_SIX_BIT | ( | rslt, | ||
| src | ||||
| ) |
| #define ZERO | ( | d, | ||
| d0, | ||||
| d1 | ||||
| ) | d0 = 0, d1 = 0 |
| char* __bcrypt | ( | const char * | , | |
| const char * | ||||
| ) |
Referenced by crypt().
| char* __md5crypt | ( | const char * | , | |
| const char * | ||||
| ) |
Referenced by crypt().
| char* crypt | ( | char * | key, | |
| const char * | setting | |||
| ) | const |
Definition at line 492 of file crypt.c.
References __bcrypt(), __md5crypt(), _PASSWORD_EFMT1, a64toi, C_block::b, cryptresult, des_cipher(), des_setkey(), i, itoa64, and NULL.
{
char *encp;
int32_t i;
int t;
int32_t salt;
int num_iter,
salt_size;
C_block keyblock,
rsltblock;
#if 0
/* Non-DES encryption schemes hook in here. */
if (setting[0] == _PASSWORD_NONDES)
{
switch (setting[1])
{
case '2':
return (__bcrypt(key, setting));
case '1':
default:
return (__md5crypt(key, setting));
}
}
#endif
for (i = 0; i < 8; i++)
{
if ((t = 2 * (unsigned char) (*key)) != 0)
key++;
keyblock.b[i] = t;
}
if (des_setkey((char *) keyblock.b)) /* also initializes "a64toi" */
return (NULL);
encp = &cryptresult[0];
switch (*setting)
{
case _PASSWORD_EFMT1:
/*
* Involve the rest of the password 8 characters at a time.
*/
while (*key)
{
if (des_cipher((char *) (void *) &keyblock,
(char *) (void *) &keyblock, 0L, 1))
return (NULL);
for (i = 0; i < 8; i++)
{
if ((t = 2 * (unsigned char) (*key)) != 0)
key++;
keyblock.b[i] ^= t;
}
if (des_setkey((char *) keyblock.b))
return (NULL);
}
*encp++ = *setting++;
/* get iteration count */
num_iter = 0;
for (i = 4; --i >= 0;)
{
if ((t = (unsigned char) setting[i]) == '\0')
t = '.';
encp[i] = t;
num_iter = (num_iter << 6) | a64toi[t];
}
setting += 4;
encp += 4;
salt_size = 4;
break;
default:
num_iter = 25;
salt_size = 2;
}
salt = 0;
for (i = salt_size; --i >= 0;)
{
if ((t = (unsigned char) setting[i]) == '\0')
t = '.';
encp[i] = t;
salt = (salt << 6) | a64toi[t];
}
encp += salt_size;
if (des_cipher((char *) (void *) &constdatablock,
(char *) (void *) &rsltblock, salt, num_iter))
return (NULL);
/*
* Encode the 64 cipher bits as 11 ascii characters.
*/
i = ((int32_t) ((rsltblock.b[0] << 8) | rsltblock.b[1]) << 8) |
rsltblock.b[2];
encp[3] = itoa64[i & 0x3f];
i >>= 6;
encp[2] = itoa64[i & 0x3f];
i >>= 6;
encp[1] = itoa64[i & 0x3f];
i >>= 6;
encp[0] = itoa64[i];
encp += 4;
i = ((int32_t) ((rsltblock.b[3] << 8) | rsltblock.b[4]) << 8) |
rsltblock.b[5];
encp[3] = itoa64[i & 0x3f];
i >>= 6;
encp[2] = itoa64[i & 0x3f];
i >>= 6;
encp[1] = itoa64[i & 0x3f];
i >>= 6;
encp[0] = itoa64[i];
encp += 4;
i = ((int32_t) ((rsltblock.b[6]) << 8) | rsltblock.b[7]) << 2;
encp[2] = itoa64[i & 0x3f];
i >>= 6;
encp[1] = itoa64[i & 0x3f];
i >>= 6;
encp[0] = itoa64[i];
encp[3] = 0;
return (cryptresult);
}
| static int des_cipher | ( | char * | in, | |
| char * | out, | |||
| long | salt, | |||
| int | num_iter | |||
| ) | const [static] |
Definition at line 666 of file crypt.c.
References C_block::b, CRUNCH, KS_SIZE, LOAD, LOADREG, PERM3264, PERM6464, R, STORE, and TO_SIX_BIT.
{
/* variables that we want in registers, most important first */
#if defined(pdp11)
int j;
#endif
int32_t L0,
L1,
R0,
R1,
k;
C_block *kp;
int ks_inc,
loop_count;
C_block B;
L0 = salt;
TO_SIX_BIT(salt, L0); /* convert to 4*(6+2) format */
#if defined(__vax__) || defined(pdp11)
salt = ~salt; /* "x &~ y" is faster than "x & y". */
#define SALT (~salt)
#else
#define SALT salt
#endif
#if defined(MUST_ALIGN)
B.b[0] = in[0];
B.b[1] = in[1];
B.b[2] = in[2];
B.b[3] = in[3];
B.b[4] = in[4];
B.b[5] = in[5];
B.b[6] = in[6];
B.b[7] = in[7];
LOAD(L, L0, L1, B);
#else
LOAD(L, L0, L1, *(C_block *) in);
#endif
LOADREG(R, R0, R1, L, L0, L1);
L0 &= 0x55555555L;
L1 &= 0x55555555L;
L0 = (L0 << 1) | L1; /* L0 is the even-numbered input bits */
R0 &= 0xaaaaaaaaL;
R1 = (R1 >> 1) & 0x55555555L;
L1 = R0 | R1; /* L1 is the odd-numbered input bits */
STORE(L, L0, L1, B);
PERM3264(L, L0, L1, B.b, (C_block *) IE3264); /* even bits */
PERM3264(R, R0, R1, B.b + 4, (C_block *) IE3264); /* odd bits */
if (num_iter >= 0)
{ /* encryption */
kp = &KS[0];
ks_inc = sizeof(*kp);
}
else
{ /* decryption */
num_iter = -num_iter;
kp = &KS[KS_SIZE - 1];
ks_inc = -(long) sizeof(*kp);
}
while (--num_iter >= 0)
{
loop_count = 8;
do
{
#define SPTAB(t, i) \
(*(int32_t *)((unsigned char *)(t) + (i)*(sizeof(int32_t)/4)))
#if defined(gould)
/* use this if B.b[i] is evaluated just once ... */
#define DOXOR(x,y,i) x^=SPTAB(SPE[0][i],B.b[i]); y^=SPTAB(SPE[1][i],B.b[i]);
#else
#if defined(pdp11)
/* use this if your "long" int indexing is slow */
#define DOXOR(x,y,i) j=B.b[i]; x^=SPTAB(SPE[0][i],j); y^=SPTAB(SPE[1][i],j);
#else
/* use this if "k" is allocated to a register ... */
#define DOXOR(x,y,i) k=B.b[i]; x^=SPTAB(SPE[0][i],k); y^=SPTAB(SPE[1][i],k);
#endif
#endif
#define CRUNCH(p0, p1, q0, q1) \
k = ((q0) ^ (q1)) & SALT; \
B.b32.i0 = k ^ (q0) ^ kp->b32.i0; \
B.b32.i1 = k ^ (q1) ^ kp->b32.i1; \
kp = (C_block *)((char *)kp+ks_inc); \
\
DOXOR(p0, p1, 0); \
DOXOR(p0, p1, 1); \
DOXOR(p0, p1, 2); \
DOXOR(p0, p1, 3); \
DOXOR(p0, p1, 4); \
DOXOR(p0, p1, 5); \
DOXOR(p0, p1, 6); \
DOXOR(p0, p1, 7);
CRUNCH(L0, L1, R0, R1);
CRUNCH(R0, R1, L0, L1);
} while (--loop_count != 0);
kp = (C_block *) ((char *) kp - (ks_inc * KS_SIZE));
/* swap L and R */
L0 ^= R0;
L1 ^= R1;
R0 ^= L0;
R1 ^= L1;
L0 ^= R0;
L1 ^= R1;
}
/* store the encrypted (or decrypted) result */
L0 = ((L0 >> 3) & 0x0f0f0f0fL) | ((L1 << 1) & 0xf0f0f0f0L);
L1 = ((R0 >> 3) & 0x0f0f0f0fL) | ((R1 << 1) & 0xf0f0f0f0L);
STORE(L, L0, L1, B);
PERM6464(L, L0, L1, B.b, (C_block *) CF6464);
#if defined(MUST_ALIGN)
STORE(L, L0, L1, B);
out[0] = B.b[0];
out[1] = B.b[1];
out[2] = B.b[2];
out[3] = B.b[3];
out[4] = B.b[4];
out[5] = B.b[5];
out[6] = B.b[6];
out[7] = B.b[7];
#else
STORE(L, L0, L1, *(C_block *) out);
#endif
return (0);
}
| static int des_cipher | ( | const char * | in, | |
| char * | out, | |||
| long | salt, | |||
| int | num_iter | |||
| ) | [static] |
| static int des_setkey | ( | char * | key | ) | const [static] |
Definition at line 633 of file crypt.c.
References DCL_BLOCK, des_ready, i, init_des(), K, PERM6464, Rotates, and STORE.
{
DCL_BLOCK(K, K0, K1);
C_block *ptabp;
int i;
if (!des_ready)
init_des();
PERM6464(K, K0, K1, (unsigned char *) key, (C_block *) PC1ROT);
key = (char *) &KS[0];
STORE(K & ~0x03030303L, K0 & ~0x03030303L, K1, *(C_block *) key);
for (i = 1; i < 16; i++)
{
key += sizeof(C_block);
STORE(K, K0, K1, *(C_block *) key);
ptabp = (C_block *) PC2ROT[Rotates[i] - 1];
PERM6464(K, K0, K1, (unsigned char *) key, ptabp);
STORE(K & ~0x03030303L, K0 & ~0x03030303L, K1, *(C_block *) key);
}
return (0);
}
| static int des_setkey | ( | const char * | key | ) | [static] |
| STATIC init_des | ( | void | ) |
Definition at line 810 of file crypt.c.
References a64toi, CIFP, des_ready, ExpandTr, i, init_perm, IP, itoa64, P32Tr, PC1, PC2, Rotates, S, SPE, and TO_SIX_BIT.
Referenced by des_setkey().
{
int i,
j;
int32_t k;
int tableno;
static unsigned char perm[64],
tmp32[32]; /* "static" for speed */
/* static volatile long init_start = 0; not used */
/*
* 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;
k += Rotates[0] - 1;
if ((k % 28) < Rotates[0])
k -= 28;
k = PC1[k];
if (k > 0)
{
k--;
k = (k | 07) - (k & 07);
k++;
}
perm[i] = k;
}
#ifdef DEBUG
prtab("pc1tab", perm, 8);
#endif
init_perm(PC1ROT, perm, 8, 8);
/*
* PC2ROT - PC2 inverse, then Rotate (once or twice), then PC2.
*/
for (j = 0; j < 2; j++)
{
unsigned char pc2inv[64];
for (i = 0; i < 64; i++)
perm[i] = pc2inv[i] = 0;
for (i = 0; i < 64; i++)
{
if ((k = PC2[i]) == 0)
continue;
pc2inv[k - 1] = i + 1;
}
for (i = 0; i < 64; i++)
{
if ((k = PC2[i]) == 0)
continue;
k += j;
if ((k % 28) <= j)
k -= 28;
perm[i] = pc2inv[k];
}
#ifdef DEBUG
prtab("pc2tab", perm, 8);
#endif
init_perm(PC2ROT[j], perm, 8, 8);
}
/*
* Bit reverse, then initial permutation, then expansion.
*/
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
k = (j < 2) ? 0 : IP[ExpandTr[i * 6 + j - 2] - 1];
if (k > 32)
k -= 32;
else if (k > 0)
k--;
if (k > 0)
{
k--;
k = (k | 07) - (k & 07);
k++;
}
perm[i * 8 + j] = k;
}
}
#ifdef DEBUG
prtab("ietab", perm, 8);
#endif
init_perm(IE3264, perm, 4, 8);
/*
* Compression, then final permutation, then bit reverse.
*/
for (i = 0; i < 64; i++)
{
k = IP[CIFP[i] - 1];
if (k > 0)
{
k--;
k = (k | 07) - (k & 07);
k++;
}
perm[k - 1] = i + 1;
}
#ifdef DEBUG
prtab("cftab", perm, 8);
#endif
init_perm(CF6464, perm, 8, 8);
/*
* SPE table
*/
for (i = 0; i < 48; i++)
perm[i] = P32Tr[ExpandTr[i] - 1];
for (tableno = 0; tableno < 8; tableno++)
{
for (j = 0; j < 64; j++)
{
k = (((j >> 0) & 01) << 5) |
(((j >> 1) & 01) << 3) |
(((j >> 2) & 01) << 2) |
(((j >> 3) & 01) << 1) |
(((j >> 4) & 01) << 0) |
(((j >> 5) & 01) << 4);
k = S[tableno][k];
k = (((k >> 3) & 01) << 0) |
(((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;
for (i = 24; --i >= 0;)
k = (k << 1) | tmp32[perm[i] - 1];
TO_SIX_BIT(SPE[0][tableno][j], k);
k = 0;
for (i = 24; --i >= 0;)
k = (k << 1) | tmp32[perm[i + 24] - 1];
TO_SIX_BIT(SPE[1][tableno][j], k);
}
}
des_ready = 1;
}
| STATIC init_perm | ( | perm | , | |
| p | , | |||
| int | chars_in, | |||
| int | chars_out | |||
| ) |
Definition at line 975 of file crypt.c.
References i.
{
int i,
j,
k,
l;
for (k = 0; k < chars_out * 8; k++)
{ /* each output bit position */
l = p[k] - 1; /* where this bit comes from */
if (l < 0)
continue; /* output bit is always 0 */
i = l >> LGCHUNKBITS; /* which chunk this bit comes from */
l = 1 << (l & (CHUNKBITS - 1)); /* mask for this bit */
for (j = 0; j < (1 << CHUNKBITS); j++)
{ /* each chunk value */
if ((j & l) != 0)
perm[i][j].b[k >> 3] |= 1 << (k & 07);
}
}
}
| STATIC init_perm | ( | C_block | [64/CHUNKBITS][1<< CHUNKBITS], | |
| unsigned | char[64], | |||
| int | , | |||
| int | ||||
| ) |
unsigned char a64toi[128] [static] |
Definition at line 459 of file crypt.c.
Referenced by crypt(), and init_des().
const unsigned char CIFP[] [static] |
{
1, 2, 3, 4, 17, 18, 19, 20,
5, 6, 7, 8, 21, 22, 23, 24,
9, 10, 11, 12, 25, 26, 27, 28,
13, 14, 15, 16, 29, 30, 31, 32,
33, 34, 35, 36, 49, 50, 51, 52,
37, 38, 39, 40, 53, 54, 55, 56,
41, 42, 43, 44, 57, 58, 59, 60,
45, 46, 47, 48, 61, 62, 63, 64,
}
Definition at line 440 of file crypt.c.
Referenced by init_des().
C_block constdatablock [static] |
char cryptresult[1+4+4+11+1] [static] |
volatile int des_ready = 0 [static] |
Definition at line 627 of file crypt.c.
Referenced by des_setkey(), and init_des().
const unsigned char ExpandTr[] [static] |
{
32, 1, 2, 3, 4, 5,
4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13,
12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21,
20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29,
28, 29, 30, 31, 32, 1,
}
Definition at line 346 of file crypt.c.
Referenced by init_des().
const unsigned char IP[] [static] |
{
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7,
}
Definition at line 333 of file crypt.c.
Referenced by init_des().
const unsigned char itoa64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" [static] |
Definition at line 452 of file crypt.c.
Referenced by crypt(), and init_des().
const unsigned char P32Tr[] [static] |
{
16, 7, 20, 21,
29, 12, 28, 17,
1, 15, 23, 26,
5, 18, 31, 10,
2, 8, 24, 14,
32, 27, 3, 9,
19, 13, 30, 6,
22, 11, 4, 25,
}
Definition at line 429 of file crypt.c.
Referenced by init_des().
const unsigned char PC1[] [static] |
{
57, 49, 41, 33, 25, 17, 9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4,
}
Definition at line 357 of file crypt.c.
Referenced by init_des().
const unsigned char PC2[] [static] |
{
9, 18, 14, 17, 11, 24, 1, 5,
22, 25, 3, 28, 15, 6, 21, 10,
35, 38, 23, 19, 12, 4, 26, 8,
43, 54, 16, 7, 27, 20, 13, 2,
0, 0, 41, 52, 31, 37, 47, 55,
0, 0, 30, 40, 51, 45, 33, 48,
0, 0, 44, 49, 39, 56, 34, 53,
0, 0, 46, 42, 50, 36, 29, 32,
}
Definition at line 374 of file crypt.c.
Referenced by init_des().
const unsigned char Rotates[] [static] |
{
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1,
}
Definition at line 369 of file crypt.c.
Referenced by des_setkey(), and init_des().
const unsigned char S[8][64] [static] |
Definition at line 386 of file crypt.c.
Referenced by init_des().
Definition at line 471 of file crypt.c.
Referenced by init_des().
1.7.1