1 |
|
from __future__ import nested_scopes |
2 |
from fractions import fraction |
from fractions import fraction |
3 |
import math |
import math |
4 |
|
from math import log, log10, ceil |
5 |
|
|
6 |
def lamport(h, b): |
def lamport(h, b): |
7 |
return (1, b, b*h, 2*b*h, h, 2*b*h, 0, b*h) |
return (1, b, b*h, 2*b*h, h, 2*b, 0, b) |
8 |
|
|
9 |
def merkle_winternitz(h, b, n): |
def merkle_winternitz(h, b, n): |
10 |
return (1, b, fraction(b*h+h*n, n), h, h, |
return (1, b, fraction(b*h+h*n, n), h, h, |
37 |
return s |
return s |
38 |
return s[0] / (0.0 + s[1]) |
return s[0] / (0.0 + s[1]) |
39 |
|
|
40 |
|
def log2(x): |
41 |
|
return log(x) / log(2) |
42 |
|
|
43 |
def printscheme(S): |
def printscheme(S): |
44 |
S = [unfract(s) for s in S] |
S = [unfract(s) for s in S] |
45 |
print math.log(S[0]) / math.log(2), S[1], \ |
print log(S[0]) / log(2), S[1], \ |
46 |
S[2]/8, S[3] / 8 , \ |
S[2]/8, S[3] / 8 , \ |
47 |
S[4:] |
S[4], \ |
48 |
|
log(S[5])/log(10), \ |
49 |
|
log(S[6])/log(10), \ |
50 |
|
log(S[7])/log(10) |
51 |
|
|
52 |
schemes = [] |
schemes = [] |
53 |
|
|
54 |
if 0: |
if 1: |
55 |
for t in range(1, 40): |
for t in range(1, 40): |
56 |
n = math.ceil(160.0 / t ) |
n = ceil(160.0 / t ) |
57 |
print "\n N = ",t, " n = ", n |
#print "\n N = ",t, " n = ", n |
58 |
|
|
59 |
print "MW:" |
#print "MW:" |
60 |
|
for mn in range(1,17): |
61 |
|
s = (key_boosting(t, |
62 |
|
merkle_hashtree(n, |
63 |
|
merkle_winternitz(160, 160, mn)))) |
64 |
|
schemes.append( ( |
65 |
|
"KB%(t)sM%(n)sMW(160,160,%(mn)s)" % locals(), |
66 |
|
s |
67 |
|
)) |
68 |
|
#printscheme(s) |
69 |
|
#print "Lamport:" |
70 |
s = (key_boosting(t, |
s = (key_boosting(t, |
71 |
merkle_hashtree(n, |
merkle_hashtree(n, |
|
merkle_winternitz(160, 160, 2)))) |
|
|
printscheme(s) |
|
|
print "Lamport:" |
|
|
printscheme(key_boosting(t, |
|
|
merkle_hashtree(n, |
|
72 |
lamport(160, 160)))) |
lamport(160, 160)))) |
73 |
|
schemes.append( ( |
74 |
|
"KB%(t)sM%(n)sL(160,160)" % locals(), |
75 |
|
s |
76 |
|
)) |
77 |
|
#printscheme(s) |
78 |
|
|
79 |
|
for criteria in ( |
80 |
|
(1, 0), |
81 |
|
(1, 10), |
82 |
|
(1, 100), |
83 |
|
(1, 1000)): |
84 |
|
m = None |
85 |
|
mv = 0 |
86 |
|
def critf(s): |
87 |
|
return criteria[0] * log2(s[1][2]) + \ |
88 |
|
criteria[1] * log10(sum(s[1][5:])) |
89 |
|
for s in schemes: |
90 |
|
if m == None or critf(s)<mv: |
91 |
|
m = s |
92 |
|
mv = critf(s) |
93 |
|
print "For ", criteria, m[0] |
94 |
|
printscheme(m[1]) |
95 |
|
|
96 |
if 1: |
if 0: |
97 |
|
printscheme(lamport(160,160)) |
98 |
for n in range(1, 17): |
for n in range(1, 17): |
99 |
print "\n = ",n |
print "\nn = ",n |
100 |
printscheme(merkle_winternitz(160,160,n)) |
printscheme(merkle_winternitz(160,160,n)) |