Ruby 2.0.0p353(2013-11-22revision43784)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

Data Structures | Macros | Functions | Variables
crypt.c File Reference
`#include "ruby/missing.h"`
`#include <limits.h>`
`#include <stdio.h>`
Include dependency graph for crypt.c:

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_block * | out = B.b[0]
register C_block * | p = (1<<CHUNKBITS)
int | chars_in
register C_block * | tp
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_block * | kp
register int | ks_inc = -(int)sizeof(*kp)
register int | loop_count
C_block | B
| L0 = salt
B | b [0] = in[0]
R0 & | R1 = (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);
SALT
#define SALT
Definition: crypt.c:660
C_block::i0
long i0
Definition: crypt.c:243
DOXOR
#define DOXOR(x, y, i)
C_block::b32
struct C_block::@113 b32
B
C_block B
Definition: crypt.c:651
C_block::i1
long i1
Definition: crypt.c:244
kp
register C_block * kp
Definition: crypt.c:643
C_block
Definition: crypt.c:238
ks_inc
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; \
}
src
VALUE src
Definition: tcltklib.c:7953

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 | ( | L | ,
|  | L0 | ,
|  | L1 | ,
|  | B |
| ) |  |

LOADREG | ( | R | ,
|  | R0 | ,
|  | R1 | ,
|  | L | ,
|  | L0 | ,
|  | L1 |
| ) |  |

OR | ( | D | ,
|  | D0 | ,
|  | D1 | ,
|  | * | tp
| ) |  |

PERM3264 | ( | L | ,
|  | L0 | ,
|  | L1 | ,
|  | B. | b,
|  | (C_block *) | IE3264
| ) |  |

PERM3264 | ( | R | ,
|  | R0 | ,
|  | R1 | ,
|  | B.b+ | 4,
|  | (C_block *) | IE3264
| ) |  |

PERM6464 | ( | L | ,
|  | L0 | ,
|  | L1 | ,
|  | B. | b,
|  | (C_block *) | CF6464
| ) |  |

STATIC void permute | ( |  | ) |

return | ( | 0 |  | ) |

return | ( | des_setkey((char *) keyblock.b) |  | ) |

STORE | ( | D | ,
|  | D0 | ,
|  | D1 | ,
|  | * | out
| ) |  |

STORE | ( | L | ,
|  | L0 | ,
|  | L1 | ,
|  | B |
| ) |  |

TO_SIX_BIT | ( | salt | ,
|  | L0 |
| ) |  |

while | ( | -- | chars_in,
|  | 0 |
| ) |  |

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.

C_block B

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

Definition at line 949 of file crypt.c.

Referenced by define_final(), define_final0(), eval_string_with_cref(), iseq_build_from_ary_body(), iseq_compile_each(), iseq_data_to_ary(), iseq_set_sequence(), new_insn_send(), proc_new(), rb_funcall_with_block(), rb_iseq_parameters(), rb_method_call_with_block(), rb_mod_refine(), rb_proc_call_with_block(), rb_proc_s_new(), rb_yield_refine_block(), SHA1_Transform(), vm_invoke_block(), and yield_under().

C_block cblock

Initial value:
{
register int i, j, k
i
ssize_t i
Definition: bigdecimal.c:5655

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

Definition at line 307 of file crypt.c.

Referenced by BSD__ultoa(), BSD_vfprintf(), code_page_installed(), enc_set_filesystem_encoding(), filecp(), fole_s_set_code_page(), main(), ole_init_cp(), ole_vstr2wc(), options(), rb_file_expand_path_internal(), rb_locale_charmap(), ruby__sfvextra(), set_ole_codepage(), str_gsub(), strio_ungetbyte(), VpAddAbs(), and VpSubAbs().

char cryptresult[1+4+4+11+1]
| static

Definition at line 493 of file crypt.c.

do

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

Definition at line 317 of file crypt.c.

else

Initial value:
{
num_iter = -num_iter
num_iter
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
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

Definition at line 639 of file crypt.c.

Referenced by ossl_cipher_update(), ossl_dh_initialize(), ossl_dsa_initialize(), ossl_pkcs12_initialize(), ossl_pkcs7_add_data(), ossl_pkcs7_initialize(), ossl_pkcs7_s_encrypt(), ossl_pkcs7_s_read_smime(), ossl_pkcs7_s_sign(), ossl_pkcs7_s_write_smime(), ossl_pkcs7_verify(), ossl_rsa_initialize(), ossl_ssl_session_initialize(), ossl_x509_initialize(), ossl_x509crl_initialize(), and ossl_x509req_initialize().

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
i
ssize_t i
Definition: bigdecimal.c:5655

Definition at line 509 of file crypt.c.

kp

Initial value:
{
register long L0, L1, R0, R1, k
L0
L0
Definition: crypt.c:653
R1
R0 & R1
Definition: crypt.c:675
L1
L1
Definition: crypt.c:676
R0
#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]

Definition at line 308 of file crypt.c.

Referenced by console_dev(), fetch_token(), gc_profile_report(), open_ifs_socket(), ossl_dh_export(), ossl_dh_to_text(), ossl_dsa_export(), ossl_dsa_to_text(), ossl_pkcs7_add_data(), ossl_pkcs7_decrypt(), ossl_pkcs7_s_read_smime(), ossl_pkcs7_s_write_smime(), ossl_pkcs7_to_pem(), ossl_pkcs7_verify(), ossl_rsa_export(), ossl_rsa_to_text(), ossl_spki_print(), ossl_ssl_session_to_pem(), ossl_ssl_session_to_text(), ossl_x509_get_signature_algorithm(), ossl_x509_to_pem(), ossl_x509_to_text(), ossl_x509attr_get_oid(), ossl_x509crl_get_signature_algorithm(), ossl_x509crl_to_der(), ossl_x509crl_to_pem(), ossl_x509crl_to_text(), ossl_x509ext_get_oid(), ossl_x509ext_get_value(), ossl_x509name_to_s(), ossl_x509req_get_signature_algorithm(), ossl_x509req_to_pem(), ossl_x509req_to_text(), rb_ary_times(), rb_f_printf(), rb_obj_display(), and report_bug().

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.

STATIC void C_block perm[64/CHUNKBITS][1<< CHUNKBITS]

Definition at line 904 of file crypt.c.

Referenced by check_exec_redirect(), init_des(), rb_io_open(), rb_io_s_sysopen(), rb_open_file(), rb_scan_open_args(), rb_sysopen(), rb_tmp_class_path(), and run_exec_open().

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)
DCL_BLOCK
#define DCL_BLOCK(d, d0, d1)
Definition: crypt.c:276
D
#define D
Definition: util.c:195

Definition at line 311 of file crypt.c.

Referenced by date_strftime_with_tmx(), ole_invoke2(), rb_str_rstrip_bang(), rb_strftime_with_timespec(), rb_tracepoint_disable(), rb_tracepoint_enable(), rb_tracepoint_enabled_p(), tp_alloc(), tp_call_trace(), tp_mark(), tpptr(), tracepoint_disable_m(), tracepoint_enable_m(), tracepoint_inspect(), and tracepoint_new().