diff --git a/src/proverifspec/ProVerifOutputAnalyzer.java b/src/proverifspec/ProVerifOutputAnalyzer.java index 2fa47657d5aa20306bf72207f8a5dc4f128e1a4b..1d0025cde8a9f5bbcfad2c3f2ea69a8c6a5b53fb 100644 --- a/src/proverifspec/ProVerifOutputAnalyzer.java +++ b/src/proverifspec/ProVerifOutputAnalyzer.java @@ -263,7 +263,6 @@ public class ProVerifOutputAnalyzer { public LinkedList<String> getSatisfiedAuthenticity() { return satisfiedAuthenticity; } - public LinkedList<String> getSatisfiedWeakAuthenticity() { return satisfiedWeakAuthenticity; } diff --git a/src/tmltranslator/TMLChannel.java b/src/tmltranslator/TMLChannel.java index fd0cb9548029448b7b1ca4f678f05e3de528c78c..917896b39122ad6696faad01ac5cb8a765b7160d 100755 --- a/src/tmltranslator/TMLChannel.java +++ b/src/tmltranslator/TMLChannel.java @@ -48,7 +48,7 @@ package tmltranslator; import myutil.*; import java.util.*; - +import ui.tmlcompd.TMLCPrimitivePort; public class TMLChannel extends TMLCommunicationElement { @@ -60,7 +60,9 @@ public class TMLChannel extends TMLCommunicationElement { private int size; private int type; private int max; - + public TMLCPrimitivePort port; + public TMLCPrimitivePort port2; + public ArrayList<TMLCPrimitivePort> ports; // Used on for 1 -> 1 channel protected TMLTask originTask, destinationTask; protected TMLPort originPort, destinationPort; // Not used by the simulator @@ -82,6 +84,7 @@ public class TMLChannel extends TMLCommunicationElement { destinationTasks = new ArrayList<TMLTask>(); originPorts = new ArrayList<TMLPort>(); destinationPorts = new ArrayList<TMLPort>(); + ports = new ArrayList<TMLCPrimitivePort>(); } diff --git a/src/tmltranslator/TMLEvent.java b/src/tmltranslator/TMLEvent.java index 3e344ab97197f13fbff159b9d97375e0fdb74851..85aa4d49baf8ecf781d1e5c1a56c13e156ef393e 100755 --- a/src/tmltranslator/TMLEvent.java +++ b/src/tmltranslator/TMLEvent.java @@ -46,7 +46,7 @@ package tmltranslator; import java.util.*; - +import ui.tmlcompd.TMLCPrimitivePort; public class TMLEvent extends TMLCommunicationElement { protected Vector params; // List of various types of parameters @@ -56,6 +56,8 @@ public class TMLEvent extends TMLCommunicationElement { protected TMLTask origin, destination; public static int confStatus; public static boolean checkConf; + public TMLCPrimitivePort port; + public TMLCPrimitivePort port2; /*public TMLEvent(String name, Object reference) { super(name, reference); params = new Vector(); diff --git a/src/tmltranslator/TMLModeling.java b/src/tmltranslator/TMLModeling.java index 8fa0d7071a4b297a7bdac68cc2fb1a577206431c..8b25648f94bf6d7c7972be7fa7dde22748f33892 100755 --- a/src/tmltranslator/TMLModeling.java +++ b/src/tmltranslator/TMLModeling.java @@ -47,6 +47,9 @@ package tmltranslator; import java.util.*; import myutil.*; +import ui.tmlcompd.*; +import avatartranslator.*; +import proverifspec.*; //import compiler.expression.*; @@ -596,7 +599,94 @@ public class TMLModeling { } return list; } - + public void backtrace(ProVerifOutputAnalyzer pvoa, String mappingName){ + LinkedList<AvatarAttribute> secretAttributes = pvoa.getSecretTerms (); + LinkedList<AvatarAttribute> nonSecretAttributes = pvoa.getNonSecretTerms (); + for (AvatarAttribute attr: secretAttributes){ + System.out.println("Attribute " + attr.getName()); + TMLChannel channel = getChannelByName(attr.getName().replaceAll("__chData","")); + if (channel!=null){ + System.out.println("write to chan " + channel.getName()); + for (TMLCPrimitivePort port:channel.ports){ + port.checkStatus = 2; + port.mappingName= mappingName; + } + } + TMLRequest req = getRequestByName(attr.getName().replaceAll("__reqData","")); + if (req !=null){ + System.out.println("write to req " + req.getName()); + for (TMLCPrimitivePort port: req.ports){ + port.checkStatus=2; + port.mappingName= mappingName; + } + } + TMLEvent ev = getEventByName(attr.getName().replaceAll("__eventData","")); + if (ev !=null){ + System.out.println("write to event " + ev.getName()); + ev.port.checkStatus=2; + ev.port.mappingName= mappingName; + } + } + for (AvatarAttribute attr: nonSecretAttributes){ + TMLChannel channel = getChannelByName(attr.getName().replaceAll("__chData","")); + if (channel!=null){ + System.out.println("write to ch " + channel.getName()); + for (TMLCPrimitivePort port:channel.ports){ + port.checkStatus = 3; + port.mappingName= mappingName; + } + } + TMLRequest req = getRequestByName(attr.getName().replaceAll("__reqData","")); + if (req !=null){ + System.out.println("write to req " + req.getName()); + for (TMLCPrimitivePort port: req.ports){ + port.checkStatus=3; + port.mappingName= mappingName; + } + } + TMLEvent ev = getEventByName(attr.getName().replaceAll("__eventData","")); + if (ev !=null){ + System.out.println("write to event " + ev.getName()); + ev.port.checkStatus=3; + ev.port2.checkStatus=3; + ev.port.mappingName= mappingName; + } + } + System.out.println("backtracing finished"); + return; + } + public void clearBacktracing(){ + for (TMLChannel channel: getChannels()){ + System.out.println("Channel " + channel.getName()); + for (TMLCPrimitivePort port:channel.ports){ + if (port.checkStatus>1){ + port.checkStatus=1; + port.mappingName="???"; + } + } + } + for (TMLRequest req: getRequests()){ + for (TMLCPrimitivePort port:req.ports){ + if (port.checkStatus>1){ + port.checkStatus=1; + port.mappingName="???"; + } + } + } + for (TMLEvent evt: getEvents()){ + if (evt.port!=null && evt.port2!=null){ + if (evt.port.checkStatus>1){ + evt.port.checkStatus=1; + evt.port.mappingName="???"; + } + if (evt.port2.checkStatus>1){ + evt.port2.checkStatus=1; + evt.port2.mappingName="???"; + } + } + } + return; + } public ArrayList<TMLEvent> getEvents(TMLTask t) { TMLEvent evt; ArrayList<TMLEvent> list = new ArrayList<TMLEvent>(); diff --git a/src/tmltranslator/TMLRequest.java b/src/tmltranslator/TMLRequest.java index a951d8cfac1e3eb6b989b39e55cdf6409fa3c98e..d36524359dbb68b7e7eebc4c85e99a8c5f8db0c0 100755 --- a/src/tmltranslator/TMLRequest.java +++ b/src/tmltranslator/TMLRequest.java @@ -46,7 +46,7 @@ package tmltranslator; import java.util.*; - +import ui.tmlcompd.TMLCPrimitivePort; public class TMLRequest extends TMLCommunicationElement { protected Vector params; // List of various types of parameters @@ -55,11 +55,13 @@ public class TMLRequest extends TMLCommunicationElement { protected ArrayList<String> paramNames; public static int confStatus; public static boolean checkConf; + public ArrayList<TMLCPrimitivePort> ports; public TMLRequest(String name, Object reference) { super(name, reference); params = new Vector(); originTasks = new ArrayList<TMLTask>(); paramNames = new ArrayList<String>(); + ports = new ArrayList<TMLCPrimitivePort>(); } public int getNbOfParams() { diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java index 2d8561319059766506759e1d599b1726f0c4dbd4..3b5c76b76e95bf4eae423d4e6d28867a8c391bef 100644 --- a/src/tmltranslator/toavatar/TML2Avatar.java +++ b/src/tmltranslator/toavatar/TML2Avatar.java @@ -77,12 +77,13 @@ public class TML2Avatar { private final static Integer channelPrivate = 1; private final static Integer channelUnreachable = 2; AvatarSpecification avspec; - + ArrayList<String> attrsToCheck; List<String> allStates; public TML2Avatar(TMLMapping tmlmap) { this.tmlmap = tmlmap; this.tmlmodel = tmlmap.getTMLModeling(); allStates = new ArrayList<String>(); + attrsToCheck=new ArrayList<String>(); } public void checkConnections(){ @@ -355,6 +356,22 @@ public class TML2Avatar { else { sig=signalMap.get(block.getName()+"__OUT__"+req.getName()); } + if (req.checkConf){ + LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>(); + if (!attrsToCheck.contains(req.getName()+"__reqData")){ + attrs.add(new AvatarAttribute(req.getName()+"__reqData", AvatarType.INTEGER, block, null)); + attrsToCheck.add(req.getName()+"__reqData"); + } + for (int i=0; i<sr.getNbOfParams(); i++){ + if (block.getAvatarAttributeWithName(sr.getParam(i))!=null && !attrsToCheck.contains(sr.getParam(i))){ + attrs.add(block.getAvatarAttributeWithName(sr.getParam(i))); + attrsToCheck.add(sr.getParam(i)); + } + } + if (attrs.size()>0){ + avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+req.getName()+"__reqData", req.getReferenceObject(), attrs)); + } + } AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); for (int i=0; i<sr.getNbOfParams(); i++){ if (block.getAvatarAttributeWithName(sr.getParam(i))==null){ @@ -369,7 +386,9 @@ public class TML2Avatar { //Create new value to send.... AvatarAttribute requestData= new AvatarAttribute(req.getName()+"__reqData", AvatarType.INTEGER, block, null); as.addValue(req.getName()+"__reqData"); - block.addAttribute(requestData); + if (block.getAvatarAttributeWithName(req.getName()+"__reqData")==null){ + block.addAttribute(requestData); + } tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); elementList.add(as); as.addNext(tran); @@ -499,15 +518,33 @@ public class TML2Avatar { if (block.getAvatarAttributeWithName(aee.getParam(i))==null){ //Throw Error System.out.println("Missing Attribute " + aee.getParam(i)); - as.addValue("tmp"); } else { as.addValue(aee.getParam(i)); } } + if (evt.checkConf){ + LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>(); + if (!attrsToCheck.contains(evt.getName()+"__eventData")){ + attrs.add(new AvatarAttribute(evt.getName()+"__eventData", AvatarType.INTEGER, block, null)); + attrsToCheck.add(evt.getName()+"__eventData"); + } + for (int i=0; i<aee.getNbOfParams(); i++){ + if (block.getAvatarAttributeWithName(aee.getParam(i))!=null && !attrsToCheck.contains(aee.getParam(i))){ + attrs.add(block.getAvatarAttributeWithName(aee.getParam(i))); + attrsToCheck.add(aee.getParam(i)); + } + } + if (attrs.size()>0){ + avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+evt.getName()+"__eventData", evt.getReferenceObject(), attrs)); + } + + } AvatarAttribute eventData= new AvatarAttribute(evt.getName()+"__eventData", AvatarType.INTEGER, block, null); as.addValue(evt.getName()+"__eventData"); - block.addAttribute(eventData); + if (block.getAvatarAttributeWithName(evt.getName()+"__eventData")==null){ + block.addAttribute(eventData); + } tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); elementList.add(as); as.addNext(tran); @@ -537,7 +574,9 @@ public class TML2Avatar { } AvatarAttribute eventData= new AvatarAttribute(evt.getName()+"__eventData", AvatarType.INTEGER, block, null); as.addValue(evt.getName()+"__eventData"); - block.addAttribute(eventData); + if (block.getAvatarAttributeWithName(evt.getName()+"__eventData")==null){ + block.addAttribute(eventData); + } tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); elementList.add(as); as.addNext(tran); @@ -582,7 +621,9 @@ public class TML2Avatar { signalMap.put(block.getName()+"__IN__"+ch.getName(), sig); block.addSignal(sig); AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null); - block.addAttribute(channelData); + if (block.getAvatarAttributeWithName(ch.getName()+"__chData")==null){ + block.addAttribute(channelData); + } } else { sig=signalMap.get(block.getName()+"__IN__"+ch.getName()); @@ -595,19 +636,22 @@ public class TML2Avatar { block.addSignal(sig); signalMap.put(block.getName()+"__OUT__"+ch.getName(), sig); AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null); - LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>(); - block.addAttribute(channelData); - attrs.add(channelData); - if (ch.checkConf){ - System.out.println("channel " + ch.getName()); - System.out.println("block " + block.getName()); - avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ch.getName()+"__chData", ch.getReferenceObject(), attrs)); + if (block.getAvatarAttributeWithName(ch.getName()+"__chData")==null){ + block.addAttribute(channelData); } } else { sig=signalMap.get(block.getName()+"__OUT__"+ch.getName()); } } + if (ch.checkConf){ + LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>(); + if (!attrsToCheck.contains(ch.getName()+"__chData")){ + attrs.add(new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null)); + attrsToCheck.add(ch.getName()+"__chData"); + avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ch.getName()+"__chData", ch.getReferenceObject(), attrs)); + } + } AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); as.addValue(ch.getName()+"__chData"); tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject()); @@ -784,6 +828,7 @@ public class TML2Avatar { System.out.println("Failed to generate specification"); return avspec; } + attrsToCheck.clear(); ArrayList<TMLTask> tasks = tmlmap.getTMLModeling().getTasks(); for (TMLTask task:tasks){ AvatarBlock block = new AvatarBlock(task.getName(), avspec, task.getReferenceObject()); @@ -1056,7 +1101,7 @@ public class TML2Avatar { } } //Check if we matched up all signals - System.out.println(avspec); + //System.out.println(avspec); return avspec; } diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java index fdcec189289ece138a3870498ddbee0a0299c02b..f8e660831eea60e5bc285e1718aa2c0b0c853971 100755 --- a/src/ui/GTMLModeling.java +++ b/src/ui/GTMLModeling.java @@ -717,9 +717,11 @@ public class GTMLModeling { addToTable(makeName(port2, port2.getFather().getValue()) + "/" + name2, name); channel = new TMLChannel(name, port1); - channel.checkConf= port1.checkConf; + channel.checkConf= port1.checkConf || port2.checkConf; channel.setSize(port1.getSize()); channel.setMax(port1.getMax()); + channel.ports.add(port1); + channel.ports.add(port2); if (port1.isBlocking() && port2.isBlocking()) { channel.setType(TMLChannel.BRBW); } else if (!port1.isBlocking() && port2.isBlocking()) { @@ -813,7 +815,13 @@ public class GTMLModeling { // Channel attributes port = (TMLCPrimitivePort)(portstome.get(0)); channel = new TMLChannel(name, port1); + channel.ports.add(port1); channel.checkConf= port1.checkConf; + for(j=0; j<portstome.size(); j++) { + TMLCPrimitivePort p = (TMLCPrimitivePort)(portstome.get(j)); + channel.checkConf= p.checkConf || channel.checkConf; + channel.ports.add(p); + } channel.setSize(port1.getSize()); channel.setMax(port1.getMax()); if (port1.isBlocking() && port.isBlocking()) { @@ -953,6 +961,7 @@ public class GTMLModeling { } else { event = new TMLEvent(name, port1, -1, port1.isBlocking()); } + event.checkConf= port1.checkConf; for(i=0; i<port1.getNbMaxAttribute(); i++) { tt = port1.getParamAt(i); if ((tt != null) && (tt.getType() != TType.NONE)) { @@ -1094,7 +1103,8 @@ public class GTMLModeling { } request = new TMLRequest(name, port1); - + request.checkConf = port1.checkConf; + request.ports.add(port1); for(i=0; i<port1.getNbMaxAttribute(); i++) { tt = port1.getParamAt(i); if ((tt != null) && (tt.getType() != TType.NONE)) { diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java index a1af6246fe5c0eea4cd3ee810413631e17c2c0b4..b62b72df7105dc5287196c0c5a20429cf14c99c8 100755 --- a/src/ui/MainGUI.java +++ b/src/ui/MainGUI.java @@ -3758,11 +3758,18 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe getCurrentTDiagramPanel().repaint(); } else if (tp instanceof TMLArchiPanel) { + /* for (int i=0; i<tabs.size(); i++){ + tp = (TURTLEPanel)(tabs.elementAt(i)); + if (tp instanceof TMLComponentDesignPanel) { + ((TMLComponentDesignPanel)tp).modelBacktracingProVerif(pvoa); + } + }*/ + System.out.println("BACKTRACE"); + gtm.getTMLMapping().getTMLModeling().clearBacktracing(); + gtm.getTMLMapping().getTMLModeling().backtrace(pvoa, getTabName(tp)); } else if (tp instanceof TMLComponentDesignPanel){ - TMLComponentDesignPanel tap = (TMLComponentDesignPanel) tp; - tap.modelBacktracingProVerif(pvoa); - getCurrentTDiagramPanel().repaint(); + } return; } diff --git a/src/ui/TMLComponentDesignPanel.java b/src/ui/TMLComponentDesignPanel.java index 2bc486ced59834f0a93f810b314f9f9aaf192ec0..d1246123ac1ff89c9ca69c2ed53bd78b41db0b8f 100755 --- a/src/ui/TMLComponentDesignPanel.java +++ b/src/ui/TMLComponentDesignPanel.java @@ -241,12 +241,19 @@ public class TMLComponentDesignPanel extends TURTLEPanel { LinkedList<AvatarAttribute> nonSecretAttributes = pvoa.getNonSecretTerms (); for (AvatarAttribute attr: secretAttributes){ System.out.println("!!!"); - iterator = tmlctdp.getPrimitiveComponentList().listIterator(); + iterator = tmlctdp.componentList.listIterator(); while (iterator.hasNext()){ + tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TMLCPrimitivePort){ - System.out.println("port "+tgc); - ((TMLCPrimitivePort)tgc).checkStatus =2; + System.out.println("NEXT " + tgc); + if (tgc instanceof TMLCPrimitiveComponent){ + ArrayList<TMLCPrimitivePort> ports = ((TMLCPrimitiveComponent) tgc).getAllInternalPrimitivePorts(); + for (TMLCPrimitivePort p:ports){ + if (p.checkStatus>0){ + System.out.println(p.getName()); +// p.checkStatus=3; + } + } } } } diff --git a/src/ui/tmlcompd/TMLCPrimitivePort.java b/src/ui/tmlcompd/TMLCPrimitivePort.java index cd667a7e6f7c38b7037f614c01323fb4b856f217..c76c6e351f0da86556c5870b2cfcfb4aa2e83068 100755 --- a/src/ui/tmlcompd/TMLCPrimitivePort.java +++ b/src/ui/tmlcompd/TMLCPrimitivePort.java @@ -112,7 +112,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent editable = true; removable = true; userResizable = false; - checkConf=false; + checkConf=true; commName = "comm"; //value = "MyName"; makeValue(); @@ -318,7 +318,9 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent g.drawString(lname, x+width - w - 1, y+(int)(si)-2); } }*/ - drawVerification(g); + + drawVerification(g); + g.setFont(fold); drawParticularity(g); @@ -342,12 +344,14 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent default: return; } - g.drawString(mappingName, x, y); - g.drawOval(x+6, y-10, 6, 9); - g.setColor(c1); - g.fillRect(x+4, y-7, 9, 7); - g.setColor(c); - g.drawRect(x+4, y-7, 9, 7); + g.drawString(mappingName, x-15, y-8); + g.drawOval(x-10, y, 6, 9); + g.setColor(c1); + g.fillRect(x-12, y+3, 9, 7); + g.setColor(c); + g.drawRect(x-12, y+3, 9, 7); + + } @@ -449,7 +453,6 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent TMLCPrimitiveComponent tgc = (TMLCPrimitiveComponent)(getFather()); otherTypes = tgc.getAllRecords(); } - JDialogTMLCompositePort jda = new JDialogTMLCompositePort(commName, typep, list[0], list[1], list[2], list[3], list[4], isOrigin, isFinite, isBlocking, ""+maxSamples, ""+widthSamples, isLossy, lossPercentage, maxNbOfLoss, frame, "Port properties", otherTypes, dataFlowType, associatedEvent, isPrex, isPostex, checkConf); jda.setSize(350, 700); GraphicLib.centerOnParent(jda);