diff --git a/gui/Scyther/Misc.py b/gui/Scyther/Misc.py index 494e17e..340e33c 100644 --- a/gui/Scyther/Misc.py +++ b/gui/Scyther/Misc.py @@ -64,7 +64,7 @@ def sorted(li): return result -# ensurePath: does what os.makedirs should do. +# ensurePath: wraps os.makedirs def ensurePath(pt): """ Make sure the path exists: if not, create the directories one by one @@ -75,27 +75,9 @@ def ensurePath(pt): It ensures this by doing the procedure for "dog", then "dog/cat", etc... """ - ptn = os.path.normpath(pt) - - # First we see what needs to exist overall - todo = [ptn] - tail = "x" - while len(tail) > 0: - (head,tail) = os.path.split(ptn) - if len(head) > 0: - todo.append(head) - ptn = head - else: - break - - # Reverse list: path prefixes first - todo.reverse() - - # Create bottom-up - for pt in todo: - if not os.path.isdir(pt): - # Note that os.path.exists(pt) may still hold. In this case the next command will cause an error. - os.mkdir(pt) + if not os.path.isdir(pt): + # Note that os.path.exists(pt) may still hold. In this case the next command will cause an error. + os.makedirs(pt) # path diff --git a/gui/Scyther/Scyther.py b/gui/Scyther/Scyther.py index 24f8d3c..c8bd384 100755 --- a/gui/Scyther/Scyther.py +++ b/gui/Scyther/Scyther.py @@ -263,16 +263,17 @@ class Scyther(object): uid = m.hexdigest() - # Split the uid to make (256?) subdirectories + # Split the uid to make 256 subdirectories with 256 subdirectories... prefixlen = 2 uid1 = uid[:prefixlen] - uid2 = uid[prefixlen:] + uid2 = uid[prefixlen:prefixlen+2] + uid3 = uid[prefixlen+2:] # Possibly we could also decide to store input and arguments in the cache to analyze things later - path = "Cache/%s/" % (uid1) - name1 = "%s.out" % (uid2) - name2 = "%s.err" % (uid2) + path = "Cache/%s/%s/" % (uid1,uid2) + name1 = "%s.out" % (uid3) + name2 = "%s.err" % (uid3) fname1 = path + name1 fname2 = path + name2 diff --git a/gui/test-mpa.py b/gui/test-mpa.py index b940174..22c31c9 100755 --- a/gui/test-mpa.py +++ b/gui/test-mpa.py @@ -455,7 +455,9 @@ def findAllMPA(protocolset,options=[],mpaoptions=[]): """ global FOUND - global OPTS + global OPTS, ARGS + global PROTNAMETOFILE + global ALLCLAIMS FOUND = [] @@ -490,6 +492,29 @@ def findAllMPA(protocolset,options=[],mpaoptions=[]): print " %s" % (p) print + # output of all claims (only if latex required) + + if OPTS.latex: + clset = set() + for claim in ALLCLAIMS: + prot = str(claim.protocol) + file = PROTNAMETOFILE[prot] + clid = claim.id + descr = claim.roledescribe() + + tup = (file,prot,clid,descr) + clset.add(tup) + + fp = open("gen-%s-claims.txt" % (OPTS.latex),"w") + + fp.write("%% OPTS: %s\n" % OPTS) + fp.write("%% ARGS: %s\n" % ARGS) + + for (file,prot,clid,descr) in sorted(clset): + fp.write("%s; %s; %s; %s\n" % (file,prot,clid,descr)) + + fp.close() + # Latex output of protocols with correct claims if OPTS.latex: pmapclaims = {} @@ -499,6 +524,10 @@ def findAllMPA(protocolset,options=[],mpaoptions=[]): pmapclaims[protocol].add(claimid) fp = open("gen-%s-correctclaims.tex" % (OPTS.latex),"w") + + fp.write("%% OPTS: %s\n" % OPTS) + fp.write("%% ARGS: %s\n" % ARGS) + fp.write("\\begin{tabular}{ll}\n") fp.write("Protocol & Claims \\\\\n") for protocol in sorted(pmapclaims.keys()): @@ -559,8 +588,12 @@ def findAllMPA(protocolset,options=[],mpaoptions=[]): TODO : Check whether current tests stop after finding *one* MPA attack or whether they find *all*. """ - if OPTS.latex: + if OPTS.latex and not OPTS.pickle: fp = open("gen-%s-mpaattacks.tex" % (OPTS.latex),"w") + + fp.write("%% OPTS: %s\n" % OPTS) + fp.write("%% ARGS: %s\n" % ARGS) + fp.write("\\begin{tabular}{lll}\n") fp.write("Protocol & Claim & MPA attacks \\\\ \n") @@ -606,8 +639,11 @@ def findAllMPA(protocolset,options=[],mpaoptions=[]): print "We scanned %i protocols with options [%s]." % (len(protocolset),options) print "We found %i correct claims." % (len(correct)) print "We then scanned combinations of at most %i protocols with options [%s]." % (OPTS.maxprotocols,alloptions) - print "We found %i MPA attacks." % (len(FOUND)) - print "The attacks involve the claims of %i protocols." % (len(mpaprots)) + if OPTS.pickle: + print "However, just precomputing now, hence we are not drawing any conclusions." + else: + print "We found %i MPA attacks." % (len(FOUND)) + print "The attacks involve the claims of %i protocols." % (len(mpaprots)) print "-" * 70 print @@ -754,7 +790,8 @@ def fullScan(l, options = [], mpaoptions = []): else: lres = exploreTree(0, choices, l, options = options, mpaoptions = mpaoptions) if len(lres) > 1: - showDiff(lres) + if not OPTS.pickle: + showDiff(lres) allprots = set() attprots = set() @@ -766,23 +803,24 @@ def fullScan(l, options = [], mpaoptions = []): for prot in INVOLVED: invprots.add(str(prot)) - print "The bottom line: we found %i protocols with multi-protocol attacks from a set of %i protocols." % (len(attprots),len(allprots)) - print + if not OPTS.pickle: + print "The bottom line: we found %i protocols with multi-protocol attacks from a set of %i protocols." % (len(attprots),len(allprots)) + print - print "Multi-protocol attacks were found on:" - for prot in sorted(list(allprots & attprots)): - print " %s" % (prot) - print + print "Multi-protocol attacks were found on:" + for prot in sorted(list(allprots & attprots)): + print " %s" % (prot) + print - print "No multi-protocol attacks were found on these protocols, but they caused MPA attacks:" - for prot in sorted(list((allprots - attprots) & invprots)): - print " %s" % (prot) - print + print "No multi-protocol attacks were found on these protocols, but they caused MPA attacks:" + for prot in sorted(list((allprots - attprots) & invprots)): + print " %s" % (prot) + print - print "These protocols were not involved in any MPA attacks:" - for prot in sorted(list((allprots - attprots) - invprots)): - print " %s\t[%s]" % (prot,PROTNAMETOFILE[prot]) - print + print "These protocols were not involved in any MPA attacks:" + for prot in sorted(list((allprots - attprots) - invprots)): + print " %s\t[%s]" % (prot,PROTNAMETOFILE[prot]) + print