Ruby  1.9.3p551(2014-11-13revision48407)
Data Structures | Macros | Functions | Variables
crypt.c File Reference
#include "ruby/missing.h"
#include <limits.h>
#include <stdio.h>

Go to the source code of this file.

Data Structures

union  C_block
 

Macros

#define _PASSWORD_EFMT1   '_'
 
#define MUST_ALIGN
 
#define LONG_IS_32_BITS
 
#define STATIC   static
 
#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)   long 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)   (*(long *)((unsigned char *)(t) + (i)*(sizeof(long)/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)
 

Functions

int des_setkey ()
 
int des_cipher ()
 
STATIC void init_des ()
 
STATIC void init_perm ()
 
STATIC void permute ()
 
 ZERO (D, D0, D1)
 
 OR (D, D0, D1,*tp)
 
 while (--chars_in > 0)
 
 STORE (D, D0, D1,*out)
 
 for (i=0;i< 8;i++)
 
 if (des_setkey((char *) keyblock.b))
 
 for (i=salt_size;--i >=0;)
 
 if (des_cipher((char *)&constdatablock,(char *)&rsltblock, salt, num_iter))
 
 TO_SIX_BIT (salt, L0)
 
 LOAD (L, L0, L1, B)
 
 LOADREG (R, R0, R1, L, L0, L1)
 
 STORE (L, L0, L1, B)
 
 PERM3264 (L, L0, L1, B.b,(C_block *) IE3264)
 
 PERM3264 (R, R0, R1, B.b+4,(C_block *) IE3264)
 
 if (num_iter >=0)
 
 while (--num_iter >=0)
 
 PERM6464 (L, L0, L1, B.b,(C_block *) CF6464)
 
 return (0)
 
 return (des_setkey((char *) keyblock.b))
 
 if (des_cipher((char *)&cblock,(char *)&cblock, 0L,(flag?-1:1)))
 

Variables

STATIC void unsigned char * cp
 
C_blockout = B.b[0]
 
register C_blockp = (1<<CHUNKBITS)
 
int chars_in
 
register C_blocktp
 
register int t
 
 do
 
static unsigned char IP []
 
static unsigned char ExpandTr []
 
static unsigned char PC1 []
 
static unsigned char Rotates []
 
static unsigned char PC2 []
 
static unsigned char S [8][64]
 
static unsigned char P32Tr []
 
static unsigned char CIFP []
 
static unsigned char itoa64 []
 
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 long SPE [2][8][64]
 
static C_block CF6464 [64/CHUNKBITS][1<< CHUNKBITS]
 
static C_block constdatablock
 
static char cryptresult [1+4+4+11+1]
 
char *register const char * key
 
register const char * setting
 
register long i
 
long salt = 0
 
int num_iter
 
int salt_size
 
C_block keyblock
 
C_block rsltblock
 
 encp = salt_size
 
int const char * in
 
register C_blockkp
 
register int ks_inc = -(int)sizeof(*kp)
 
register int loop_count
 
C_block B
 
 L0 = salt
 
B b [0] = in[0]
 
R0R1 = (R1 >> 1) & 0x55555555L
 
 L1 = R0 | R1
 
 else
 
STATIC void C_block perm [64/CHUNKBITS][1<< CHUNKBITS]
 
int chars_out
 
int register char * block
 
int flag
 
C_block cblock
 

Macro Definition Documentation

#define _PASSWORD_EFMT1   '_'

Definition at line 47 of file crypt.c.

Referenced by if().

#define CHUNKBITS   (1<<LGCHUNKBITS)

Definition at line 299 of file crypt.c.

#define CRUNCH (   p0,
  p1,
  q0,
  q1 
)
Value:
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);
#define SALT
Definition: crypt.c:660
struct C_block::@43 b32
static void VALUE * p1
Definition: array.c:1848
long i0
Definition: crypt.c:243
#define DOXOR(x, y, i)
C_block B
Definition: crypt.c:651
long i1
Definition: crypt.c:244
register C_block * kp
Definition: crypt.c:643
Definition: crypt.c:238
register int ks_inc
Definition: crypt.c:650

Referenced by while().

#define DCL_BLOCK (   d,
  d0,
  d1 
)    long d0, d1

Definition at line 276 of file crypt.c.

#define DOXOR (   x,
  y,
  i 
)    k=B.b[(i)]; (x)^=SPTAB(SPE[0][(i)],k); (y)^=SPTAB(SPE[1][(i)],k);
#define KS_SIZE   16

Referenced by while().

#define LGCHUNKBITS   2

Definition at line 298 of file crypt.c.

#define LOAD (   d,
  d0,
  d1,
  bl 
)    ((d0) = (bl).b32.i0, (d1) = (bl).b32.i1)

Definition at line 272 of file crypt.c.

#define LOADREG (   d,
  d0,
  d1,
  s,
  s0,
  s1 
)    ((d0) = (s0), (d1) = (s1))

Definition at line 273 of file crypt.c.

#define LONG_IS_32_BITS

Definition at line 88 of file crypt.c.

#define MUST_ALIGN

Definition at line 74 of file crypt.c.

#define OR (   d,
  d0,
  d1,
  bl 
)    ((d0) |= (bl).b32.i0, (d1) |= (bl).b32.i1)

Definition at line 274 of file crypt.c.

#define PERM3264 (   d,
  d0,
  d1,
  cpp,
  p 
)    { C_block tblk; permute((cpp),&tblk,(p),4); LOAD ((d),(d0),(d1),tblk); }

Definition at line 302 of file crypt.c.

#define PERM6464 (   d,
  d0,
  d1,
  cpp,
  p 
)    { C_block tblk; permute((cpp),&tblk,(p),8); LOAD ((d),(d0),(d1),tblk); }

Definition at line 300 of file crypt.c.

#define SALT   salt

Definition at line 660 of file crypt.c.

#define SPTAB (   t,
  i 
)    (*(long *)((unsigned char *)(t) + (i)*(sizeof(long)/4)))
#define STATIC   static

Definition at line 115 of file crypt.c.

#define STORE (   s,
  s0,
  s1,
  bl 
)    ((bl).b32.i0 = (s0), (bl).b32.i1 = (s1))

Definition at line 275 of file crypt.c.

#define TO_SIX_BIT (   rslt,
  src 
)
Value:
{ \
C_block cvt; \
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; \
}
VALUE src
Definition: tcltklib.c:7940

Definition at line 259 of file crypt.c.

Referenced by init_des().

#define ZERO (   d,
  d0,
  d1 
)    ((d0) = 0, (d1) = 0)

Definition at line 271 of file crypt.c.

Function Documentation

int des_cipher ( )

Referenced by if().

int des_setkey ( )

Referenced by if().

for ( )

Definition at line 511 of file crypt.c.

References C_block::b, i, and t.

for ( i  = salt_size; --i >= 0;)

Definition at line 558 of file crypt.c.

References i, and t.

if ( des_setkey((char *) keyblock.b )

Definition at line 516 of file crypt.c.

References _PASSWORD_EFMT1, C_block::b, des_cipher(), des_setkey(), i, NULL, and t.

if ( des_cipher((char *)&constdatablock,(char *)&rsltblock,salt, num_iter )

Definition at line 565 of file crypt.c.

if ( num_iter >=  0)

Definition at line 681 of file crypt.c.

References int.

if ( des_cipher((char *)&cblock,(char *)&cblock, 0L,(flag?-1:1))  )

Definition at line 963 of file crypt.c.

References C_block::b, and i.

STATIC void init_des ( )

Definition at line 759 of file crypt.c.

References i, init_perm(), perm, and TO_SIX_BIT.

STATIC void init_perm ( )

Referenced by init_des().

LOAD ( ,
L0  ,
L1  ,
B   
)
LOADREG ( R  ,
R0  ,
R1  ,
,
L0  ,
L1   
)
OR ( D  ,
D0  ,
D1  ,
tp 
)
PERM3264 ( ,
L0  ,
L1  ,
B.  b,
(C_block *)  IE3264 
)
PERM3264 ( R  ,
R0  ,
R1  ,
B.b 4,
(C_block *)  IE3264 
)
PERM6464 ( ,
L0  ,
L1  ,
B.  b,
(C_block *)  CF6464 
)
STATIC void permute ( )
return ( )
return ( des_setkey((char *) keyblock.b )
STORE ( D  ,
D0  ,
D1  ,
out 
)
STORE ( ,
L0  ,
L1  ,
B   
)
TO_SIX_BIT ( salt  ,
L0   
)
while ( --  chars_in,
 
)
while ( --num_iter >=  0)

Definition at line 693 of file crypt.c.

References CRUNCH, KS_SIZE, L0, L1, R0, and R1.

ZERO ( D  ,
D0  ,
D1   
)

Variable Documentation

unsigned char a64toi[128]
static

Definition at line 471 of file crypt.c.

Definition at line 651 of file crypt.c.

B b[7] = in[0]

Definition at line 664 of file crypt.c.

int register char* block
C_block cblock
Initial value:
{
register int i, j, k
ssize_t i
Definition: bigdecimal.c:5519

Definition at line 951 of file crypt.c.

C_block CF6464[64/CHUNKBITS][1<< CHUNKBITS]
static

Definition at line 486 of file crypt.c.

int chars_in

Definition at line 310 of file crypt.c.

int chars_out

Definition at line 906 of file crypt.c.

unsigned char CIFP[]
static
Initial value:
= {
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 452 of file crypt.c.

C_block constdatablock
static

Definition at line 492 of file crypt.c.

STATIC void unsigned char* cp
char cryptresult[1+4+4+11+1]
static

Definition at line 493 of file crypt.c.

do
Initial value:
{
t = *cp++
int t
Definition: ripper.c:14285
STATIC void unsigned char * cp
Definition: crypt.c:307

Definition at line 317 of file crypt.c.

else
Initial value:
{
int num_iter
Definition: crypt.c:508

Definition at line 687 of file crypt.c.

encp = salt_size

Definition at line 564 of file crypt.c.

Referenced by parser_tokadd_string().

unsigned char ExpandTr[]
static
Initial value:
= {
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 342 of file crypt.c.

int flag

Definition at line 950 of file crypt.c.

register long i
Initial value:
{
register char *encp
encp
Definition: crypt.c:564

Definition at line 503 of file crypt.c.

C_block IE3264[32/CHUNKBITS][1<< CHUNKBITS]
static

Definition at line 480 of file crypt.c.

int const char* in
unsigned char IP[]
static
Initial value:
= {
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 329 of file crypt.c.

unsigned char itoa64[]
static
Initial value:
=
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

Definition at line 464 of file crypt.c.

int register const char * key

Definition at line 501 of file crypt.c.

C_block keyblock
Initial value:
{
register int i, j, k
ssize_t i
Definition: bigdecimal.c:5519

Definition at line 509 of file crypt.c.

kp
Initial value:
{
register long L0, L1, R0, R1, k
L0
Definition: crypt.c:653
R0 & R1
Definition: crypt.c:675
L1
Definition: crypt.c:676
#define R0(v, w, x, y, z, i)
Definition: sha1.c:64

Definition at line 643 of file crypt.c.

ks_inc = -(int)sizeof(*kp)

Definition at line 650 of file crypt.c.

L0 &L1 & L0 = salt

Definition at line 653 of file crypt.c.

Referenced by while().

L1 = R0 | R1

Definition at line 676 of file crypt.c.

Referenced by while().

register int loop_count

Definition at line 650 of file crypt.c.

int num_iter

Definition at line 508 of file crypt.c.

char * out = B.b[0]
unsigned char p[64] = (1<<CHUNKBITS)

Definition at line 309 of file crypt.c.

unsigned char P32Tr[]
static
Initial value:
= {
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 441 of file crypt.c.

unsigned char PC1[]
static
Initial value:
= {
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 353 of file crypt.c.

C_block PC1ROT[64/CHUNKBITS][1<< CHUNKBITS]
static

Definition at line 474 of file crypt.c.

unsigned char PC2[]
static
Initial value:
= {
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 370 of file crypt.c.

C_block PC2ROT[2][64/CHUNKBITS][1<< CHUNKBITS]
static

Definition at line 477 of file crypt.c.

R0& R1 = (R1 >> 1) & 0x55555555L

Definition at line 675 of file crypt.c.

Referenced by while().

unsigned char Rotates[]
static
Initial value:
= {
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1,
}

Definition at line 365 of file crypt.c.

C_block rsltblock

Definition at line 509 of file crypt.c.

unsigned char S[8][64]
static

Definition at line 382 of file crypt.c.

Referenced by ruby_dtoa().

long salt = 0

Definition at line 507 of file crypt.c.

Referenced by ossl_cipher_pkcs5_keyivgen().

int salt_size

Definition at line 508 of file crypt.c.

register const char* setting

Definition at line 502 of file crypt.c.

long SPE[2][8][64]
static

Definition at line 483 of file crypt.c.

register int t

Definition at line 314 of file crypt.c.

tp
Initial value:
{
register DCL_BLOCK(D,D0,D1)
#define DCL_BLOCK(d, d0, d1)
Definition: crypt.c:276
#define D
Definition: util.c:193

Definition at line 311 of file crypt.c.

Referenced by date_strftime_with_tmx(), ole_invoke2(), rb_str_rstrip_bang(), and rb_strftime_with_timespec().