diff --git a/src/tmltranslator/SecurityPattern.java b/src/tmltranslator/SecurityPattern.java index a1ef9e9fbac6191f1e72a514f464d834124abd39..17b0260944e7383f8c1e4a85868de29b44751587 100644 --- a/src/tmltranslator/SecurityPattern.java +++ b/src/tmltranslator/SecurityPattern.java @@ -1,10 +1,14 @@ package tmltranslator; +import avatartranslator.*; public class SecurityPattern { public String name; public int keySize; public int MACSize=0; +public String originTask; +public AvatarState state1; +public AvatarState state2; public SecurityPattern(String _name, String _keySize, String _MACSize){ this.name=_name; diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java index ce013dea27488147523558fcb2cff48e23206acd..99467d89454d1fb6c1e03584547fc22eeaf81f8d 100644 --- a/src/tmltranslator/toavatar/TML2Avatar.java +++ b/src/tmltranslator/toavatar/TML2Avatar.java @@ -81,6 +81,8 @@ public class TML2Avatar { HashMap<String, AvatarAttributeState> signalAuthOriginMap = new HashMap<String, AvatarAttributeState>(); HashMap<String, AvatarAttributeState> signalAuthDestMap = new HashMap<String, AvatarAttributeState>(); + ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>(); + List<AvatarSignal> signals = new ArrayList<AvatarSignal>(); private final static Integer channelPublic = 0; private final static Integer channelPrivate = 1; @@ -183,7 +185,7 @@ public class TML2Avatar { a=channel.getOriginTasks().get(0); destinations.addAll(channel.getDestinationTasks()); } - HwCPU node1 = (HwCPU) tmlmap.getHwNodeOf(a); + HwExecutionNode node1 = (HwExecutionNode) tmlmap.getHwNodeOf(a); for (TMLTask t: destinations){ List<HwBus> buses = new ArrayList<HwBus>(); HwNode node2 = tmlmap.getHwNodeOf(t); @@ -643,13 +645,48 @@ public class TML2Avatar { } else if (ae instanceof TMLActivityElementWithAction){ + //Might be encrypt or decrypt AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); tran = new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); - //For now, get rid of the action. It won't translate anywya + //For now, get rid of the action. It won't translate anyway //tran.addAction(((TMLActivityElementWithAction) ae).getAction()); - as.addNext(tran); - elementList.add(as); - elementList.add(tran); + if (ae.securityPattern!=null && ae.getName().contains("encrypt")){ + secPatterns.add(ae.securityPattern); + block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null)); + tran.addAction(ae.securityPattern.name+"_encrypted= sencrypt("+ae.securityPattern.name+", key)"); + System.out.println("Found security pattern "+ae.securityPattern.name); + ae.securityPattern.originTask=block.getName(); + ae.securityPattern.state1=as; + AvatarAttributeState authOrigin = new AvatarAttributeState(ae.securityPattern.name+"1",ae.getReferenceObject(),block.getAvatarAttributeWithName(ae.securityPattern.name), as); + signalAuthOriginMap.put(ae.securityPattern.name, authOrigin); + as.addNext(tran); + elementList.add(as); + elementList.add(tran); + } + else if (ae.securityPattern!=null && ae.getName().contains("decrypt")){ + block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null)); + tran.addAction(ae.securityPattern.name+"= sdecrypt("+ae.securityPattern.name+"_encrypted,key)"); + ae.securityPattern.state2=as; + System.out.println("Found security pattern decrypt "+ae.securityPattern.name); + + elementList.add(as); + elementList.add(tran); + AvatarState dummy = new AvatarState(ae.getName()+"_dummy", ae.getReferenceObject()); + tran.addNext(dummy); + tran = new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); + dummy.addNext(tran); + elementList.add(dummy); + elementList.add(tran); + AvatarAttributeState authDest = new AvatarAttributeState(ae.securityPattern.name+"2",ae.getReferenceObject(),block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); + signalAuthDestMap.put(ae.securityPattern.name, authDest); + } + else { + as.addNext(tran); + elementList.add(as); + elementList.add(tran); + } } else if (ae instanceof TMLActivityElementWithIntervalAction){ AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); @@ -677,9 +714,19 @@ public class TML2Avatar { } else { sig=signalMap.get(block.getName()+"__IN__"+ch.getName()); - } + } AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + + if (ae.securityPattern!=null){ + System.out.println("has security pattern" + ae.securityPattern.name); + as.addValue(ae.securityPattern.name+"_encrypted"); + AvatarAttribute data= new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null); + block.addAttribute(data); + } + else { as.addValue(ch.getName()+"__chData"); + } + tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); elementList.add(signalState); signalState.addNext(signalTran); @@ -705,6 +752,10 @@ public class TML2Avatar { } } else { + //Write Channel + if (ae.securityPattern!=null){ + System.out.println("has security pattern "+ae.securityPattern.name); + } if (!signalMap.containsKey(block.getName()+"__OUT__"+ch.getName())){ sig = new AvatarSignal(block.getName()+"__OUT__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject()); signals.add(sig); @@ -735,7 +786,17 @@ public class TML2Avatar { signalAuthOriginMap.put(ch.getName(), authOrigin); } AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + + if (ae.securityPattern!=null){ + System.out.println("has security pattern" + ae.securityPattern.name); + as.addValue(ae.securityPattern.name+"_encrypted"); + AvatarAttribute data= new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null); + block.addAttribute(data); + } + else { as.addValue(ch.getName()+"__chData"); + } + tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); elementList.add(signalState); signalState.addNext(signalTran); @@ -966,6 +1027,12 @@ public class TML2Avatar { //Add temp variable for unsendable signals AvatarAttribute tmp = new AvatarAttribute("tmp", AvatarType.INTEGER, block, null); block.addAttribute(tmp); + AvatarAttribute key = new AvatarAttribute("key", AvatarType.INTEGER, block, null); + block.addAttribute(key); + /* tmp = new AvatarAttribute("aliceandbob", AvatarType.INTEGER, block, null); + block.addAttribute(tmp); + tmp = new AvatarAttribute("aliceandbob_encrypted", AvatarType.INTEGER, block, null); + block.addAttribute(tmp);*/ AvatarAttribute loop_index = new AvatarAttribute("loop_index", AvatarType.INTEGER, block, null); block.addAttribute(loop_index); for (TMLAttribute attr: task.getAttributes()){ @@ -1107,13 +1174,25 @@ public class TML2Avatar { } asm.setStartState((AvatarStartState) elementList.get(0)); } + for (SecurityPattern secPattern: secPatterns){ + System.out.println("secpattern "+ secPattern.name); + AvatarAttribute sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null); + AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null); + LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>(); + block.addAttribute(sec); + block.addAttribute(enc); + attrs.add(sec); + avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ "securitypattern", null, attrs)); + } avspec.addBlock(block); } + checkConnections(); checkChannels(); //Add authenticity pragmas for (String s: signalAuthOriginMap.keySet()){ + System.out.println("authe " + s); if (signalAuthDestMap.containsKey(s)){ AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity(s, signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s)); avspec.addPragma(pragma); @@ -1290,6 +1369,8 @@ public class TML2Avatar { } //Check if we matched up all signals //System.out.println(avspec); + + return avspec; } diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java index a8cbee042228bd2688ea5cf00ad4b33eb641691e..1fa0a8d947fada1f259d665fc44a42ee2ffb1eca 100755 --- a/src/ui/GTMLModeling.java +++ b/src/ui/GTMLModeling.java @@ -1474,7 +1474,7 @@ public class GTMLModeling { listE.addCor(tmlexecii, tgc); } else if (tgc instanceof TMLADEncrypt) { - tmlexeci = new TMLExecI("execi", tgc); + tmlexeci = new TMLExecI("encrypt", tgc); tmlexeci.setAction("123"); activity.addElement(tmlexeci); SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt)tgc).securityContext, ((TMLADEncrypt)tgc).keySize, ((TMLADEncrypt)tgc).MACSize); @@ -1608,6 +1608,10 @@ public class GTMLModeling { tmlreadchannel = new TMLReadChannel("read channel", tgc); tmlreadchannel.setNbOfSamples(modifyString(((TMLADReadChannel)tgc).getSamplesValue())); tmlreadchannel.addChannel(channel); + //security pattern + if (securityPatterns.get(((TMLADReadChannel)tgc).securityContext)!=null){ + tmlreadchannel.securityPattern= securityPatterns.get(((TMLADReadChannel)tgc).securityContext); + } activity.addElement(tmlreadchannel); ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); listE.addCor(tmlreadchannel, tgc); @@ -1908,6 +1912,10 @@ public class GTMLModeling { channel = tmlm.getChannelByName(getFromTable(tmltask, channels[i])); tmlwritechannel.addChannel(channel); } + //add sec pattern + if (securityPatterns.get(((TMLADWriteChannel)tgc).securityContext)!=null){ + tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).securityContext); + } activity.addElement(tmlwritechannel); ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); listE.addCor(tmlwritechannel, tgc); diff --git a/src/ui/tmlad/TMLADDecrypt.java b/src/ui/tmlad/TMLADDecrypt.java index 07dbb9ea52253b23939694dd229fb749e8be4b23..f78feae02781c4bff2fa5bfb0ff164851c81e3fc 100755 --- a/src/ui/tmlad/TMLADDecrypt.java +++ b/src/ui/tmlad/TMLADDecrypt.java @@ -84,7 +84,7 @@ public class TMLADDecrypt extends TGCWithoutInternalComponent implements Embedde editable = true; removable = true; - name = "encrypt"; + name = "decrypt"; myImageIcon = IconManager.imgic214; } @@ -197,7 +197,7 @@ public boolean editOndoubleClick(JFrame frame) { } public int getType() { - return TGComponentManager.TMLAD_ENCRYPT; + return TGComponentManager.TMLAD_DECRYPT; } public int getDefaultConnector() {