Cryptography Reference
In-Depth Information
56 /* ---------------------------------------------- */
57 /* recursive tree search
58
input: key - key field
59
len - key length
60
knb-#ofknown bytes (starting with key[0])
61
print result if path through is found
62 */
63 static void tree_search(len, knb)
64
{
65
int val, k, off, blen, knb0, knb1, knb2;
66
long n, bits, bits0, cnt, cwd;
67
++tcnt;
68
if(knb == len+1) {print_result(len); return;}
/*
through */
69
knb0 = knb; while(knb0 >= len) knb0 -= len;
70
knb1 = knb-1; while(knb1 < 0) knb1 += len; while(knb1 >= len)
knb1 -= len;
71
knb2 = knb-2; while(knb2 < 0) knb2 += len;
72
for(val = 0; val < 256; ++ val)
/* test all values for
key byte */
73
{
74
if(knb < len) key[knb] = (val+'A') & 0xff; else val = 256;
75
if(!knb) {tree_search(len, 1); continue;}
76
for(n=knb; n < N; n += len)
/* test val for
all periods */
77
{
78
if(n < 4) continue;
/* skip header + 2
bytes */
79
bits = (n-HEADER) << 3;
/* compute bit
offset */
80
bits0 = 0; blen = 9; cnt = 256;
81
for(k = 0; k < 6; ++k)
82
{
83
if(bitoff[k] < bits)
Figure 3.15: ( continued )
Search WWH ::




Custom Search