/[gzz]/manuscripts/Sigs/poss.py
ViewVC logotype

Diff of /manuscripts/Sigs/poss.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by tjl, Sun May 18 06:40:00 2003 UTC revision 1.2 by tjl, Sun May 18 06:57:58 2003 UTC
# Line 1  Line 1 
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,
# Line 35  def unfract(s): Line 37  def unfract(s):
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))

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26