12 |
fraction(b*(2L**n-1)+n, n), |
fraction(b*(2L**n-1)+n, n), |
13 |
fraction(b*(2L**n-1)+n, n)) |
fraction(b*(2L**n-1)+n, n)) |
14 |
|
|
15 |
|
def bleichenbacher_maurer(h, n): |
16 |
|
return (1, log(51)/log(2) * n, |
17 |
|
3*(n+1)*h, h, h, |
18 |
|
9*n+2, 0, 9*n+2) |
19 |
|
|
20 |
def merkle_hashtree(n, S): |
def merkle_hashtree(n, S): |
21 |
return (2L**n * S[0], S[1], |
return (2L**n * S[0], S[1], |
22 |
S[2] + S[3] + n * S[4], |
S[2] + S[3] + n * S[4], |
47 |
|
|
48 |
def printscheme(S): |
def printscheme(S): |
49 |
S = [unfract(s) for s in S] |
S = [unfract(s) for s in S] |
50 |
|
#print S |
51 |
print log(S[0]) / log(2), S[1], \ |
print log(S[0]) / log(2), S[1], \ |
52 |
S[2]/8, S[3] / 8 , \ |
S[2]/8, S[3] / 8 , \ |
53 |
S[4], \ |
S[4], \ |
54 |
log(S[5])/log(10), \ |
log(S[5]+1)/log(10), \ |
55 |
log(S[6])/log(10), \ |
log(S[6]+1)/log(10), \ |
56 |
log(S[7])/log(10) |
log(S[7]+1)/log(10) |
57 |
|
|
58 |
schemes = [] |
schemes = [] |
59 |
|
|
72 |
s |
s |
73 |
)) |
)) |
74 |
#printscheme(s) |
#printscheme(s) |
75 |
|
s = (key_boosting(t, |
76 |
|
merkle_hashtree(n, |
77 |
|
bleichenbacher_maurer(160, 29)))) |
78 |
|
schemes.append( ( |
79 |
|
"KB%(t)sM%(n)sBM(160,29)" % locals(), |
80 |
|
s |
81 |
|
)) |
82 |
|
|
83 |
#print "Lamport:" |
#print "Lamport:" |
84 |
s = (key_boosting(t, |
s = (key_boosting(t, |
85 |
merkle_hashtree(n, |
merkle_hashtree(n, |
90 |
)) |
)) |
91 |
#printscheme(s) |
#printscheme(s) |
92 |
|
|
93 |
for criteria in ( |
for criteria in ( |
94 |
(1, 0), |
(1, 0), |
95 |
(1, 10), |
(1, 10), |
96 |
(1, 100), |
(1, 100), |
97 |
(1, 1000)): |
(1, 1000)): |
98 |
m = None |
m = None |
99 |
mv = 0 |
mv = 0 |
100 |
def critf(s): |
def critf(s): |
101 |
return criteria[0] * log2(s[1][2]) + \ |
return criteria[0] * log2(s[1][2]) + \ |
102 |
criteria[1] * log10(sum(s[1][5:])) |
criteria[1] * log10(sum(s[1][5:])) |
103 |
for s in schemes: |
for s in schemes: |
104 |
if m == None or critf(s)<mv: |
if m == None or critf(s)<mv: |
105 |
m = s |
m = s |
106 |
mv = critf(s) |
mv = critf(s) |
107 |
print "For ", criteria, m[0] |
print "For ", criteria, m[0] |
108 |
printscheme(m[1]) |
printscheme(m[1]) |
109 |
|
|
110 |
if 0: |
if 0: |
111 |
printscheme(lamport(160,160)) |
printscheme(lamport(160,160)) |
112 |
for n in range(1, 17): |
for n in range(1, 17): |
113 |
print "\nn = ",n |
print "\nn = ",n |
114 |
printscheme(merkle_winternitz(160,160,n)) |
printscheme(merkle_winternitz(160,160,n)) |
115 |
|
for n in range(26, 32): |
116 |
|
print "\nn = ",n |
117 |
|
printscheme(bleichenbacher_maurer(160,n)) |