- Removed command line option for tuple width. Instead, it is now in the
code. - Added protocol test resume by adding percentage start parameter.
This commit is contained in:
parent
9a86e80c96
commit
e34c6a2cd2
@ -26,6 +26,9 @@
|
|||||||
# PARAMETERS
|
# PARAMETERS
|
||||||
# ***********************
|
# ***********************
|
||||||
|
|
||||||
|
# Tuple width (number of concurrent protocols)
|
||||||
|
TupleWidth = "2"
|
||||||
|
|
||||||
# Temporary files
|
# Temporary files
|
||||||
TempFileList = "scyther-blap.tmp"
|
TempFileList = "scyther-blap.tmp"
|
||||||
TempFileTuples = "scyther-blip.tmp"
|
TempFileTuples = "scyther-blip.tmp"
|
||||||
@ -37,7 +40,7 @@ ScytherProgram = "../src/scyther"
|
|||||||
# Scyther parameters
|
# Scyther parameters
|
||||||
ScytherDefaults = "--summary"
|
ScytherDefaults = "--summary"
|
||||||
ScytherMethods = "--match=1 --arachne"
|
ScytherMethods = "--match=1 --arachne"
|
||||||
ScytherBounds = "--timer=10 --max-runs=5 --max-length=25"
|
ScytherBounds = "--timer=30 --max-runs=5 --max-length=20"
|
||||||
|
|
||||||
# Build a large part of the command line (for Scyther) already
|
# Build a large part of the command line (for Scyther) already
|
||||||
ScytherArgs = ScytherDefaults + " " + ScytherMethods + " " + ScytherBounds
|
ScytherArgs = ScytherDefaults + " " + ScytherMethods + " " + ScytherBounds
|
||||||
@ -48,7 +51,8 @@ IncludeProtocols = 'spdl-defaults.inc'
|
|||||||
|
|
||||||
# Some protocols are causing troubles: this is a hard-coded filter to exclude
|
# Some protocols are causing troubles: this is a hard-coded filter to exclude
|
||||||
# the problem children. Unfair, yes. Practical, yes.
|
# the problem children. Unfair, yes. Practical, yes.
|
||||||
SkipList = [ 'gong-nonce.spdl', 'gong-nonce-b.spdl', 'splice-as-hc.spdl', 'kaochow-palm.spdl' ]
|
#SkipList = [ 'gong-nonce.spdl', 'gong-nonce-b.spdl', 'splice-as-hc.spdl', 'kaochow-palm.spdl' ]
|
||||||
|
SkipList = []
|
||||||
|
|
||||||
ClaimToResultMap = {} # maps protocol claims to correctness in singular tests (0,1)
|
ClaimToResultMap = {} # maps protocol claims to correctness in singular tests (0,1)
|
||||||
ProtocolToFileMap = {} # maps protocol names to file names
|
ProtocolToFileMap = {} # maps protocol names to file names
|
||||||
@ -299,13 +303,20 @@ def DescribeContext (filep, protocols, claim):
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Determines:
|
# Determines:
|
||||||
# TupleWidth
|
|
||||||
# ProtocolCount
|
# ProtocolCount
|
||||||
# Protocol[0..count-1]
|
# Protocol[0..count-1]
|
||||||
#
|
#
|
||||||
# Furthermore, TempFileList is created.
|
# Furthermore, TempFileList is created.
|
||||||
|
|
||||||
TupleWidth = sys.argv[1]
|
# Where should we start (if this is a number)
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
StartPercentage = int (sys.argv[1])
|
||||||
|
if StartPercentage < 0 or StartPercentage > 100:
|
||||||
|
print "Illegal range for starting percentage (0-100):", StartPercentage
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
else:
|
||||||
|
StartPercentage = 0
|
||||||
|
|
||||||
# Read stdin into list and count, send to file
|
# Read stdin into list and count, send to file
|
||||||
loop = 1
|
loop = 1
|
||||||
@ -374,57 +385,70 @@ print "Commencing test for", TupleCount, "protocol combinations."
|
|||||||
inp = open(TempFileTuples, 'r')
|
inp = open(TempFileTuples, 'r')
|
||||||
processed = 0
|
processed = 0
|
||||||
newattacks = 0
|
newattacks = 0
|
||||||
|
StartSkip = 0
|
||||||
|
|
||||||
|
# Possibly skip some
|
||||||
|
if StartPercentage > 0:
|
||||||
|
StartSkip = int ((TupleCount * StartPercentage) / 100)
|
||||||
|
print "Resuming. Skipping the first", StartSkip,"tuples."
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check all these protocols
|
||||||
|
#
|
||||||
for tline in inp:
|
for tline in inp:
|
||||||
#
|
if (processed >= StartSkip):
|
||||||
# Get the next tuple
|
#
|
||||||
#
|
# Get the next tuple
|
||||||
protocols = tline.split()
|
#
|
||||||
ShowProgress (processed, TupleCount, " ".join(protocols) + safetxt)
|
protocols = tline.split()
|
||||||
#
|
ShowProgress (processed, TupleCount, " ".join(protocols) + safetxt)
|
||||||
# Process it
|
#
|
||||||
#
|
# Process it
|
||||||
results = ScytherEval ( protocols )
|
#
|
||||||
#
|
results = ScytherEval ( protocols )
|
||||||
# Now we have the results for this combination.
|
#
|
||||||
# Check whether any of these claims is 'newly false'
|
# Now we have the results for this combination.
|
||||||
#
|
# Check whether any of these claims is 'newly false'
|
||||||
for claim,value in results.items():
|
#
|
||||||
if value == 0:
|
for claim,value in results.items():
|
||||||
# Apparently this claim is false now (there is
|
if value == 0:
|
||||||
# an attack)
|
# Apparently this claim is false now (there is
|
||||||
if ClaimToResultMap[claim] == 1:
|
# an attack)
|
||||||
# Wooh! It was correct before
|
if ClaimToResultMap[claim] == 1:
|
||||||
ClearProgress (TupleCount, safetxt)
|
# Wooh! It was correct before
|
||||||
newattacks = newattacks + 1
|
ClearProgress (TupleCount, safetxt)
|
||||||
print "-" * 40
|
newattacks = newattacks + 1
|
||||||
print "New attack [[", newattacks, "]] at", processed, "/", TupleCount, ":", claim, " using",CommandLine( protocols)
|
print "-" * 40
|
||||||
for helper in GetListKeys (ProtocolToFileMap, protocols):
|
print "New attack [[", newattacks, "]] at", processed, "/", TupleCount, ":", claim, " using",CommandLine( protocols)
|
||||||
clprname = claim.split()[0]
|
for helper in GetListKeys (ProtocolToFileMap, protocols):
|
||||||
if helper <> clprname:
|
clprname = claim.split()[0]
|
||||||
if helper not in ProtocolToEffectsMap.keys():
|
if helper <> clprname:
|
||||||
# new
|
if helper not in ProtocolToEffectsMap.keys():
|
||||||
ProtocolToEffectsMap[helper] = [clprname]
|
# new
|
||||||
print "% Detected a new flaw helper:", helper
|
ProtocolToEffectsMap[helper] = [clprname]
|
||||||
else:
|
print "% Detected a new flaw helper:", helper
|
||||||
# already noted as helper, add destruction now
|
else:
|
||||||
if clprname not in ProtocolToEffectsMap[helper]:
|
# already noted as helper, add destruction now
|
||||||
ProtocolToEffectsMap[helper].append(clprname)
|
if clprname not in ProtocolToEffectsMap[helper]:
|
||||||
#
|
ProtocolToEffectsMap[helper].append(clprname)
|
||||||
# TODO
|
#
|
||||||
#
|
# TODO
|
||||||
# Generate output to recreate/draw the
|
#
|
||||||
# attack, and maybe add this to a big
|
# Generate output to recreate/draw the
|
||||||
# error log thingy. Furthermore,
|
# attack, and maybe add this to a big
|
||||||
# explicitly recreate the commandline
|
# error log thingy. Furthermore,
|
||||||
# and the claim that is newly violated
|
# explicitly recreate the commandline
|
||||||
DescribeContext (sys.stdout, protocols, claim)
|
# and the claim that is newly violated
|
||||||
|
DescribeContext (sys.stdout, protocols, claim)
|
||||||
|
|
||||||
# Next!
|
# Next!
|
||||||
processed = processed + 1
|
processed = processed + 1
|
||||||
inp.close()
|
inp.close()
|
||||||
|
|
||||||
ClearProgress (TupleCount, safetxt)
|
ClearProgress (TupleCount, safetxt)
|
||||||
print "Processed", processed,"tuple combinations in total."
|
print "Processed", processed,"tuple combinations in total."
|
||||||
|
if StartSkip > 0:
|
||||||
|
print "In this session, checked the last",(processed - StartSkip),"tuples. "
|
||||||
print "Found", newattacks, "new attacks."
|
print "Found", newattacks, "new attacks."
|
||||||
if newattacks > 0:
|
if newattacks > 0:
|
||||||
print " These were helped by:"
|
print " These were helped by:"
|
||||||
|
Loading…
Reference in New Issue
Block a user