- Started a new Ifparser.
This commit is contained in:
@@ -7,6 +7,7 @@ from pyparsing import Literal, alphas, nums, Word, oneOf, Or, Group, \
|
||||
restOfLine, Forward, Optional, delimitedList, alphanums,\
|
||||
OneOrMore
|
||||
import Term
|
||||
import If
|
||||
|
||||
typedversion = False
|
||||
|
||||
@@ -28,13 +29,13 @@ def ruleParser ():
|
||||
# ------------------------------------------------------
|
||||
|
||||
# Tokens
|
||||
lbr = Literal("(").suppress()
|
||||
rbr = Literal(")").suppress()
|
||||
comma = Literal(",").suppress()
|
||||
hash = Literal("#").suppress()
|
||||
equ = Literal("=").suppress()
|
||||
implies = Literal("=>").suppress()
|
||||
dot = Literal(".").suppress()
|
||||
lbr = Literal("(")
|
||||
rbr = Literal(")")
|
||||
comma = Literal(",")
|
||||
hash = Literal("#")
|
||||
equ = Literal("=")
|
||||
implies = Literal("=>")
|
||||
dot = Literal(".")
|
||||
eol = Literal("\n").suppress()
|
||||
|
||||
# Basic constructors
|
||||
@@ -46,25 +47,25 @@ def ruleParser ():
|
||||
TypeInfo = oneOf ("mr nonce pk sk fu table")
|
||||
TypeInfo.setParseAction(lambda s,l,t: [ "typeinfo", Term.TermConstant(t[0]) ])
|
||||
Constant = Word(alphas,Alfabet)
|
||||
Constant.setParseAction(lambda s,l,t: [ "constant", Term.TermConstant(t[0]) ])
|
||||
Constant.setParseAction(lambda s,l,t: [ Term.TermConstant(t[0]) ])
|
||||
|
||||
# Time
|
||||
nTime = Group(Number)
|
||||
nTime.setParseAction(lambda s,l,t: ["n", t[0] ])
|
||||
nTime = Number
|
||||
xTime = Literal("xTime")
|
||||
xTime.setParseAction(lambda s,l,t: ["x", t[0] ])
|
||||
sTime = Literal("s").suppress() + lbr + Group(Number) + rbr
|
||||
sTime.setParseAction(lambda s,l,t: ["s", t[0] ])
|
||||
Time = Or([nTime,xTime,sTime])
|
||||
Time.setParseAction(lambda s,l,t: ["time", t[0],t[1] ])
|
||||
|
||||
# Const
|
||||
Const = Forward()
|
||||
Const << Or ([ Constant, Literal("c") + lbr + Constant + comma + Time + rbr, Literal("c(ni,ni)") ])
|
||||
ConstC = Literal("c") + lbr + Constant + comma + Time + rbr
|
||||
ConstF = Literal("c(ni,ni)")
|
||||
Const << Or ([ Constant, ConstC, ConstF ])
|
||||
|
||||
Const.setParseAction(lambda s,l,t: [ If.Constant("".join(t)) ])
|
||||
|
||||
# Two versions
|
||||
Variable = Word("x",Alfabet)
|
||||
Variable.setParseAction(lambda s,l,t: [ "v", Term.TermVariable(t[0],None) ])
|
||||
Variable.setParseAction(lambda s,l,t: [ Term.TermVariable(t[0]+"V",None) ])
|
||||
if typedversion:
|
||||
Variable = TypeInfo + lbr + Variable + rbr
|
||||
|
||||
@@ -99,6 +100,7 @@ def ruleParser ():
|
||||
varterm = Variable + optprime
|
||||
Invertible = Or( [pkterm, KeyTableApp, varterm])
|
||||
PublicCypher = Literal("crypt") + lbr + Invertible + comma + Message + rbr
|
||||
PublicCypher.setParseAction(lambda s,l,t: [ Term.TermEncrypt(t[2],t[1]) ])
|
||||
XOR = Literal("rcrypt") + lbr + Message + comma + Message + rbr
|
||||
SymmetricCypher = Literal("scrypt") + lbr + Message + comma + Message + rbr
|
||||
futerm = Or([ Literal("fu") + lbr + Const + rbr, Variable ])
|
||||
@@ -106,6 +108,7 @@ def ruleParser ():
|
||||
|
||||
# Message composition
|
||||
Concatenation = Literal("c") + lbr + Message + comma + Message + rbr
|
||||
Concatenation.setParseAction(lambda s,l,t: [ Term.TermTuple(t[1],t[2]) ])
|
||||
Composed = Or([ Concatenation, SymmetricCypher, XOR,
|
||||
PublicCypher, Function, KeyTable, KeyTableApp ])
|
||||
Message << Or ([Composed, Atomic])
|
||||
@@ -136,6 +139,7 @@ def ruleParser ():
|
||||
|
||||
# Principal fact
|
||||
Principal = Literal("w") + lbr + Step + comma + Agent + comma + Agent + comma + MsgList + comma + MsgList + comma + Boolean + comma + Session + rbr
|
||||
Principal.setParseAction(lambda s,l,t: [ "Principal", t])
|
||||
|
||||
# Message fact
|
||||
MessageFact = Literal("m") + lbr + Step + comma + Agent + comma + Agent + comma + Agent + comma + Message + comma + Session + rbr
|
||||
@@ -167,7 +171,7 @@ def ruleParser ():
|
||||
mr1 = Literal("h") + lbr + Literal("s") + lbr + Literal("xTime") + rbr + rbr + dot + MFPrincipal
|
||||
mr2 = implies
|
||||
mr3 = Literal("h") + lbr + Literal("xTime") + rbr + dot + MFPrincipal + Optional(dot + delimitedList(GoalFact, "."))
|
||||
MessageRule = mr1 + mr2 + mr3 ## DEVIANT : BNF requires newlines
|
||||
MessageRule = Group(mr1) + mr2 + Group(mr3) ## DEVIANT : BNF requires newlines
|
||||
InitialState = Literal("h") + lbr + Literal("xTime") + rbr + dot + State ## DEVIANT : BNF requires newlines
|
||||
|
||||
# Intruder
|
||||
@@ -200,13 +204,14 @@ def ifParser():
|
||||
labeledrule = Group(label) + Group(ruleParser())
|
||||
|
||||
def labeledruleAction(s,l,t):
|
||||
print "-----------------"
|
||||
print "- Detected rule -"
|
||||
print "-----------------"
|
||||
if t[0][3] == "Protocol_Rules":
|
||||
print "-----------------"
|
||||
print "- Detected rule -"
|
||||
print "-----------------"
|
||||
|
||||
print t[0]
|
||||
print t[1]
|
||||
print
|
||||
print t[0]
|
||||
print t[1]
|
||||
print
|
||||
|
||||
labeledrule.setParseAction(labeledruleAction)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user