diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java index f4119dcb17b453990c736abac19f76551fc4ba03..0053bc1dd849167e8926ecb0735bc1ac5d59e212 100644 --- a/src/main/java/avatartranslator/AvatarBlock.java +++ b/src/main/java/avatartranslator/AvatarBlock.java @@ -133,12 +133,11 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne } public AvatarSignal getSignalByName(String _name) { - for(AvatarSignal sig: signals) { - System.out.println("finding " +sig.getName() + " " + _name); - if (sig.getName().compareTo(_name) == 0) { - return sig; - } - } + for(AvatarSignal sig: signals) { + if (sig.getName().compareTo(_name) == 0) { + return sig; + } + } if (father != null) { return father.getSignalByName(_name); diff --git a/src/main/java/dseengine/DSEConfiguration.java b/src/main/java/dseengine/DSEConfiguration.java index dab16ba7eb69356cfba5395db6e73bba5288e043..045662e0b184fd282e4723183d2619ac2cb5775e 100755 --- a/src/main/java/dseengine/DSEConfiguration.java +++ b/src/main/java/dseengine/DSEConfiguration.java @@ -1392,10 +1392,10 @@ public class DSEConfiguration implements Runnable { TMLArchiPanel newArch = drawMapping(tmla, "securedMapping"+(cpt-1)); GTMLModeling gtml =new GTMLModeling(newArch, true); tmla = gtml.translateToTMLMapping(); - tmla.tmlap = tmlap; - tmlcdp = (TMLComponentDesignPanel) mainGUI.tabs.get(0); - tmla.setTMLDesignPanel(tmlcdp); - System.out.println("tmlcdp " + tmlcdp); +// tmla.tmlap = tmlap; + // tmlcdp = (TMLComponentDesignPanel) mainGUI.tabs.get(0); + // tmla.setTMLDesignPanel(tmlcdp); + // System.out.println("tmlcdp " + tmlcdp); // //Repeat for secured mapping TMLMapping<TGComponent> secMapping = mainGUI.gtm.autoSecure(mainGUI, "mapping" +(cpt-1),tmla, newArch, encComp, overhead, decComp,true,false,false); diff --git a/src/main/java/tmltranslator/TMLActivity.java b/src/main/java/tmltranslator/TMLActivity.java index 19228fb812314dad1e3e3ec610fa21c62cf4acfc..e1fa1378e72668a0417a43339089d70b198d473d 100755 --- a/src/main/java/tmltranslator/TMLActivity.java +++ b/src/main/java/tmltranslator/TMLActivity.java @@ -155,6 +155,13 @@ public class TMLActivity extends TMLElement { return null; } + public void replaceElement(TMLActivityElement _oldE, TMLActivityElement _newE) { + _newE.setNexts(_oldE.getNexts()); + replaceAllNext(_oldE, _newE); + elements.add(_newE); + elements.remove(_oldE); + } + public void removeAllRandomSequences(TMLTask _task) { int idRandomSequence = 0; TMLRandomSequence tmlrs = findTMLRandomSequence(); diff --git a/src/main/java/tmltranslator/TMLActivityElementChannel.java b/src/main/java/tmltranslator/TMLActivityElementChannel.java index d9bc2be18d7620f670c4b93c92efe35fc9fafe8c..e7a93f9bbc2f3d37e831bf91a619d6efbd48a1db 100755 --- a/src/main/java/tmltranslator/TMLActivityElementChannel.java +++ b/src/main/java/tmltranslator/TMLActivityElementChannel.java @@ -53,10 +53,12 @@ import java.util.ArrayList; public class TMLActivityElementChannel extends TMLActivityElement { protected ArrayList<TMLChannel> channels; protected String nbOfSamples; + private boolean isAttacker; public TMLActivityElementChannel(String _name, Object _referenceObject) { super(_name, _referenceObject); channels = new ArrayList<TMLChannel>(); + isAttacker=false; } public void addChannel(TMLChannel _channel) { @@ -71,6 +73,14 @@ public class TMLActivityElementChannel extends TMLActivityElement { return channels.get(_index); } + public boolean isAttacker(){ + return isAttacker; + } + + public void setAttacker(boolean attacker){ + isAttacker=attacker; + } + public void setNbOfSamples(String _nbOfSamples) { nbOfSamples = _nbOfSamples; } diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java index 6577db688eefa58b072d452c5e9b2e66a58b109b..e7f7f71717e9e2aa20dca1c95d4dda774bb2e432 100755 --- a/src/main/java/tmltranslator/TMLMapping.java +++ b/src/main/java/tmltranslator/TMLMapping.java @@ -47,7 +47,7 @@ import myutil.*; import tmltranslator.toproverif.TML2ProVerif; import ui.TMLArchiPanel; import ui.TMLComponentDesignPanel; -import ui.util.CorrespondanceElement; +import ui.CorrespondanceTGElement; import java.util.*; @@ -71,7 +71,7 @@ public class TMLMapping<E> { private List<HwCommunicationNode> oncommnodes; private List<TMLElement> mappedcommelts; - public CorrespondanceElement<E> listE; + private CorrespondanceTGElement listE; // Security public boolean firewall = false; @@ -90,9 +90,9 @@ public class TMLMapping<E> { - // REFERENCES TO BE REMOVED!!!! - private TMLComponentDesignPanel tmldp; - public TMLArchiPanel tmlap; + // REFERENCES TO BE REMOVED!!!! :( + //private TMLComponentDesignPanel tmldp; + //public TMLArchiPanel tmlap; public TMLMapping(TMLModeling<E> _tmlm, TMLArchitecture _tmla, boolean reset) { @@ -149,6 +149,15 @@ public class TMLMapping<E> { return null; } + public CorrespondanceTGElement getCorrespondanceList(){ + return listE; + } + + public void setCorrespondanceList(CorrespondanceTGElement cl){ + listE=cl; + } + + public void addCustomValue(String custom) { customValues.add(custom); } @@ -1492,12 +1501,78 @@ public class TMLMapping<E> { } } - public void setTMLDesignPanel(TMLComponentDesignPanel _tmldp){ - tmldp = _tmldp; - } - - public TMLComponentDesignPanel getTMLCDesignPanel(){ - return tmldp; + public boolean channelAllowed(TMLChannel chan){ + TMLTask orig = chan.getOriginTask(); + TMLTask dest = chan.getDestinationTask(); + List<HwNode> path = getPath(orig, dest); + for (HwNode node:path){ + if (node instanceof HwBridge){ + for (String rule:((HwBridge) node).firewallRules){ + String t1 = rule.split("->")[0]; + String t2 = rule.split("->")[1]; + if (t1.equals(orig.getName().replaceAll("__","::")) || t1.equals("*")){ + if (t2.equals(dest.getName().replaceAll("__","::")) || t2.equals("*")){ + return false; + } + } + } + } + } + return true; + } + + + public List<HwNode> getPath(TMLTask t1, TMLTask t2){ + HwNode node1 = getHwNodeOf(t1); + HwNode node2 = getHwNodeOf(t2); + List<HwNode> path = new ArrayList<HwNode>(); + if (node1==node2){ + return path; + } + if (node1!=node2){ + //Navigate architecture for node + List<HwLink> links = getTMLArchitecture().getHwLinks(); + // HwNode last = node1; + List<HwNode> found = new ArrayList<HwNode>(); + List<HwNode> done = new ArrayList<HwNode>(); + Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>(); + for (HwLink link: links){ + if (link.hwnode == node1){ + found.add(link.bus); + List<HwNode> tmp = new ArrayList<HwNode>(); + tmp.add(link.bus); + pathMap.put(link.bus, tmp); + } + } + outerloop: + while (found.size()>0){ + HwNode curr = found.remove(0); + for (HwLink link: links){ + if (curr == link.bus){ + if (link.hwnode == node2){ + path = pathMap.get(curr); + break outerloop; + } + if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){ + found.add(link.hwnode); + List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); + tmp.add(link.hwnode); + pathMap.put(link.hwnode, tmp); + } + } + else if (curr == link.hwnode){ + if (!done.contains(link.bus) && !found.contains(link.bus)){ + found.add(link.bus); + List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); + tmp.add(link.bus); + pathMap.put(link.bus, tmp); + } + } + } + done.add(curr); + } + } + return path; } diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java index 9307d14f8d3fc05d39d50ec65f481dc9d312f4e3..26fb4ed6695db61e5a773452e6225998acd7ba26 100755 --- a/src/main/java/tmltranslator/TMLModeling.java +++ b/src/main/java/tmltranslator/TMLModeling.java @@ -52,6 +52,7 @@ import proverifspec.ProVerifQueryResult; import ui.TAttribute; import ui.tmlcompd.TMLCPrimitiveComponent; import ui.tmlcompd.TMLCPrimitivePort; +import ui.TGComponent; import java.util.*; @@ -682,6 +683,17 @@ public class TMLModeling<E> { public List<TMLTask> getTasks() { return tasks; } + + public List<TMLTask> getAttackerTasks(){ + List<TMLTask> attackers = new ArrayList<TMLTask>(); + for (TMLTask task: tasks){ + if (task.isAttacker()){ + attackers.add(task); + } + } + return attackers; + } + public List<String[]> getPragmas(){ return pragmas; } @@ -812,6 +824,10 @@ public class TMLModeling<E> { } } } + public TGComponent getTGComponent(){ + return (TGComponent) getTasks().get(0).getReferenceObject(); + } + public void backtraceAuthenticity(HashMap<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults, String mappingName) { // System.out.println("Backtracing Authenticity"); diff --git a/src/main/java/tmltranslator/toavatar/TML2Avatar.java b/src/main/java/tmltranslator/toavatar/TML2Avatar.java index 0e54f143d2a9ba1117da7cb033151cd1ef6a976d..0653a1a880a9843fe4cc5e1b15b257af3b98a04f 100644 --- a/src/main/java/tmltranslator/toavatar/TML2Avatar.java +++ b/src/main/java/tmltranslator/toavatar/TML2Avatar.java @@ -1360,12 +1360,8 @@ public class TML2Avatar { //TODO: Make state names readable //TODO: Put back numeric guards //TODO: Calcuate for temp variable + this.avspec = new AvatarSpecification("spec", tmlmap.getTMLModeling().getTGComponent().getTDiagramPanel().tp); - this.avspec = new AvatarSpecification("spec", tmlmap.getTMLCDesignPanel()); - if (tmlmap.getTMLCDesignPanel()==null){ - //System.out.println("Failed to generate specification"); - // return avspec; - } attrsToCheck.clear(); //tmlmodel.removeForksAndJoins(); //Only set the loop limit if it's a number diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java index 94cd22a6387f7d7b54436bc0d902904097eb8b05..b99b2e4caa41e6201db71fb946d1b1b5fd9686a4 100755 --- a/src/main/java/ui/GTMLModeling.java +++ b/src/main/java/ui/GTMLModeling.java @@ -63,6 +63,7 @@ import ui.tmlcd.TMLTaskOperator; import ui.tmlcompd.TMLCPath; import ui.tmlcompd.TMLCPrimitiveComponent; import ui.tmlcompd.TMLCPrimitivePort; +import ui.tmlcompd.*; import ui.tmlcompd.TMLCRecordComponent; import ui.tmldd.*; import ui.tmlsd.TGConnectorMessageTMLSD; @@ -71,7 +72,7 @@ import ui.tmlsd.TMLSDStorageInstance; import ui.tmlsd.TMLSDTransferInstance; import java.util.*; - +import java.awt.Point; /** * Class GTMLModeling @@ -153,6 +154,124 @@ public class GTMLModeling { putPrefixName = _b; } + public void processAttacker(){ + //System.out.println("processing..."); + //System.out.println(tmlm.getAttackerTasks()); + if (tmlm==null){ + return; + } + List<TMLTask> attackers = tmlm.getAttackerTasks(); + for (TMLTask attacker: attackers){ + //System.out.println(attacker.getName()); + TMLCPrimitiveComponent atcomp = tmlcdp.getPrimitiveComponentByName(attacker.getName().split("__")[1]); + //System.out.println("comp " + attacker.getName().split("__")[1]); + if (atcomp !=null){ + //Find activity diagram + TMLActivityDiagramPanel tadp = tmlcdp.getTMLActivityDiagramPanel(attacker.getName().split("__")[1]); + List<TGComponent> list = tadp.getComponentList(); + //System.out.println("list " + list); + for (TGComponent tgc: list){ + if (tgc instanceof TMLADWriteChannel){ + TMLADWriteChannel wr = (TMLADWriteChannel) tgc; + if (wr.isAttacker()){ + //System.out.println("channel " + wr.getChannelName()); + String channelToAdd = wr.getChannelName(); + + + //Find ports to attach + List<TMLCPrimitivePort> ports = tmlcdp.tmlctdp.getPortsByName(channelToAdd); + //System.out.println("orts " + ports); + if (ports.size()!=2){ + //throw error + //System.out.println("ERROR"); + continue; + } + + //Remove Port Connector + tmlcdp.tmlctdp.removeOneConnector(ports.get(0).getTGConnectingPointAtIndex(0)); + + + //Add write port to attacker component + TMLCChannelOutPort originPort = new TMLCChannelOutPort(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, atcomp, tmlcdp.tmlctdp); + originPort.commName=channelToAdd; + tmlcdp.tmlctdp.addComponent(originPort, atcomp.getX(), atcomp.getY(),true,true); + + //Add fork/join to Component Diagram + TMLCJoin join = new TMLCJoin(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp); + tmlcdp.tmlctdp.addComponent(join, atcomp.getX(), atcomp.getY(),false,true); + + //Add 3 connectors, from each port to the join + TMLCPortConnector conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, originPort.getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(1), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + if (!ports.get(0).isOrigin()){ + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(0), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(6), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + } + else { + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(6), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(0), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + } + + } + } + else if (tgc instanceof TMLADReadChannel){ + TMLADReadChannel rd = (TMLADReadChannel) tgc; + if (rd.isAttacker()){ + //System.out.println("channel " + rd.getChannelName()); + String channelToAdd = rd.getChannelName(); + + + //Find ports to attach + List<TMLCPrimitivePort> ports = tmlcdp.tmlctdp.getPortsByName(channelToAdd); + //System.out.println("orts " + ports); + if (ports.size()!=2){ + //throw error + //System.out.println("ERROR"); + continue; + } + + //Remove Port Connector + tmlcdp.tmlctdp.removeOneConnector(ports.get(0).getTGConnectingPointAtIndex(0)); + + + //Add write port to attacker component + TMLCChannelOutPort destPort = new TMLCChannelOutPort(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, atcomp, tmlcdp.tmlctdp); + destPort.commName=channelToAdd; + destPort.isOrigin=false; + tmlcdp.tmlctdp.addComponent(destPort, atcomp.getX(), atcomp.getY(),true,true); + + //Add fork/join to Component Diagram + TMLCFork fork = new TMLCFork(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp); + tmlcdp.tmlctdp.addComponent(fork, atcomp.getX(), atcomp.getY(),false,true); + + //Add 3 connectors, from each port to the join + TMLCPortConnector conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, destPort.getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(1), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + if (ports.get(0).isOrigin()){ + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(0), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(6), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + } + else { + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(6), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(0), new Vector<Point>()); + tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true); + } + + } + } + } + } + } + + } + public TMLModeling<TGComponent> translateToTMLModeling(boolean onlyTakenIntoAccount, boolean _resetID) { tmlm = new TMLModeling<>(_resetID); checkingErrors = new LinkedList<CheckingError> (); @@ -253,6 +372,9 @@ public class GTMLModeling { } addTMLComponents(); + //Adapt for attacker + System.out.println("Processing attacker"); + processAttacker(); TraceManager.addDev("Adding channels"); addTMLCChannels(); TraceManager.addDev("Adding events"); @@ -1818,9 +1940,12 @@ public class GTMLModeling { listE.addCor(tmlrsequence, tgc); } else if (tgc instanceof TMLADReadChannel) { - if (!tmltask.isAttacker()){ // Get the channel + TMLADReadChannel rd = (TMLADReadChannel) tgc; channel = tmlm.getChannelByName(getFromTable(tmltask, ((TMLADReadChannel)tgc).getChannelName())); + /*if (rd.isAttacker()){ + channel = tmlm.getChannelByName(getAttackerChannel(((TMLADReadChannel)tgc).getChannelName())); + }*/ if (channel == null) { if (Conversion.containsStringInList(removedChannels, ((TMLADReadChannel)tgc).getChannelName())) { UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "A call to " + ((TMLADReadChannel)tgc).getChannelName() + " has been removed because the corresponding channel is not taken into account"); @@ -1836,13 +1961,14 @@ public class GTMLModeling { ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.UNKNOWN); checkingErrors.add(ce); } + } else { 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); + if (securityPatterns.get(((TMLADReadChannel)tgc).getSecurityContext())!=null){ + tmlreadchannel.securityPattern= securityPatterns.get(((TMLADReadChannel)tgc).getSecurityContext()); //NbOfSamples will increase due to extra overhead from MAC int cur=1; try { @@ -1860,24 +1986,19 @@ public class GTMLModeling { cur = cur+ add; tmlreadchannel.setNbOfSamples(Integer.toString(cur)); } - else if (!((TMLADReadChannel)tgc).securityContext.isEmpty()){ + else if (!((TMLADReadChannel)tgc).getSecurityContext().isEmpty()){ //Throw error for missing security pattern - UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADReadChannel)tgc).securityContext + " not found"); + UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADReadChannel)tgc).getSecurityContext() + " not found"); ce.setTDiagramPanel(tadp); ce.setTGComponent(tgc); checkingErrors.add(ce); } + /*if (tmltask.isAttacker()){ + tmlreadchannel.setAttacker(true); + }*/ activity.addElement(tmlreadchannel); ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); listE.addCor(tmlreadchannel, tgc); - } - } else { - tmlexecc = new TMLExecC("execc", tgc); - tmlexecc.setValue("100"); - tmlexecc.setAction("100"); - activity.addElement(tmlexecc); - ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); - listE.addCor(tmlexecc, tgc); } } else if (tgc instanceof TMLADSendEvent) { event = tmlm.getEventByName(getFromTable(tmltask, ((TMLADSendEvent)tgc).getEventName())); @@ -2127,7 +2248,7 @@ public class GTMLModeling { } else if (tgc instanceof TMLADWriteChannel) { // Get channels - if (!tmltask.isAttacker()){ + TMLADWriteChannel wr = (TMLADWriteChannel) tgc; channels = ((TMLADWriteChannel)tgc).getChannelsByName(); boolean error = false; for(int i=0; i<channels.length; i++) { @@ -2149,7 +2270,8 @@ public class GTMLModeling { checkingErrors.add(ce); } error = true; - } + + } } if (!error) { tmlwritechannel = new TMLWriteChannel("write channel", tgc); @@ -2158,9 +2280,13 @@ public class GTMLModeling { channel = tmlm.getChannelByName(getFromTable(tmltask, channels[i])); tmlwritechannel.addChannel(channel); } + //if (wr.isAttacker()){ + //channel = tmlm.getChannelByName(getAttackerChannel(channels[0])); + //tmlwritechannel.addChannel(channel); + //} //add sec pattern - if (securityPatterns.get(((TMLADWriteChannel)tgc).securityContext)!=null){ - tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).securityContext); + if (securityPatterns.get(((TMLADWriteChannel)tgc).getSecurityContext())!=null){ + tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).getSecurityContext()); int cur = Integer.valueOf(modifyString(((TMLADWriteChannel)tgc).getSamplesValue())); int add = Integer.valueOf(tmlwritechannel.securityPattern.overhead); if (!tmlwritechannel.securityPattern.nonce.equals("")){ @@ -2172,30 +2298,21 @@ public class GTMLModeling { cur = cur+ add; tmlwritechannel.setNbOfSamples(Integer.toString(cur)); } - else if (!((TMLADWriteChannel)tgc).securityContext.isEmpty()){ + else if (!((TMLADWriteChannel)tgc).getSecurityContext().isEmpty()){ //Throw error for missing security pattern - UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADWriteChannel)tgc).securityContext + " not found"); + UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADWriteChannel)tgc).getSecurityContext() + " not found"); ce.setTDiagramPanel(tadp); ce.setTGComponent(tgc); checkingErrors.add(ce); } + /* if (tmltask.isAttacker()){ + tmlwritechannel.setAttacker(true); + }*/ activity.addElement(tmlwritechannel); ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); listE.addCor(tmlwritechannel, tgc); } - } else { - System.out.println("removing write channel"); - tmlexecc = new TMLExecC("execc", tgc); - tmlexecc.setValue("100"); - tmlexecc.setAction("100"); - activity.addElement(tmlexecc); - ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); - listE.addCor(tmlexecc, tgc); - } - } - - - + } } // Interconnection between elements @@ -2369,7 +2486,6 @@ public class GTMLModeling { tmlm = new TMLModeling<>(true); archi = new TMLArchitecture(); //filled by makeArchitecture map = new TMLMapping<>(tmlm, archi, false); - map.tmlap = tmlap; checkingErrors = new LinkedList<CheckingError> (); warnings = new LinkedList<CheckingError> (); //listE = new CorrespondanceTGElement(); @@ -2382,7 +2498,8 @@ public class GTMLModeling { } //TraceManager.addDev("Making mapping"); makeMapping(); //fills map - map.listE = listE; + processAttackerScenario(); + map.setCorrespondanceList(listE); // map.securityPatterns.addAll(securityPatterns.keySet()); //TraceManager.addDev("Making TMLCPLib"); makeTMLCPLib(); @@ -2395,13 +2512,34 @@ public class GTMLModeling { } autoMapKeys();*/ removeActionsWithRecords(); - map.setTMLDesignPanel(this.tmlcdp); if (map.firewall){ tmlap.getMainGUI().gtm.drawFirewall(map); } return map; // the data structure map is returned to CheckSyntaxTMLMapping in GTURTLEModeling } + public void processAttackerScenario(){ + //Scan tasks and activity diagrams for attacker read/write channels + for (TMLTask task: tmlm.getTasks()){ + System.out.println(task + " " + task.isAttacker()); + if (task.isAttacker()){ + TMLActivity act=task.getActivityDiagram(); + for (TMLActivityElement elem: act.getElements()){ + if (elem instanceof TMLActivityElementChannel){ + TMLActivityElementChannel elemChannel = (TMLActivityElementChannel) elem; + if (elemChannel.isAttacker()){ + TMLChannel chan = elemChannel.getChannel(0); + if (!map.channelAllowed(chan)){ + //Remove read/writechannel + TMLExecI exec= new TMLExecI("100",elem.getReferenceObject()); + act.replaceElement(elem, exec); + } + } + } + } + } + } + } public TMLCP translateToTMLCPDataStructure( String _cpName ) { @@ -3595,6 +3733,15 @@ public class GTMLModeling { table.put(s1, s2); } + public String getAttackerChannel(String s){ + for (String channelName: table.keySet()){ + if (channelName.split("/")[1].equals(s)){ + return table.get(channelName); + } + } + return ""; + } + public String getFromTable(TMLTask task, String s) { //TraceManager.addDev("TABLE GET: Getting from task=" + task.getName() + " element=" + s); diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index ce9792f900900919cec52a788793999e6ce319bf..02140d94dd873c250f5ae58ddaf4b76e0e77f763 100755 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -734,13 +734,18 @@ public class GTURTLEModeling { } public TMLMapping<TGComponent> drawFirewall(TMLMapping<TGComponent> map){ System.out.println("DRAWING FIREWALL"); - TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel(); + TGComponent comp= map.getTMLModeling().getTGComponent(); + TMLComponentDesignPanel tmlcdp = (TMLComponentDesignPanel) comp.getTDiagramPanel().tp; + // TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel(); TMLModeling<TGComponent> tmlm = map.getTMLModeling(); + TMLArchitecture archi = map.getArch(); + TURTLEPanel tmlap = map.getCorrespondanceList().getTG(archi.getFirstCPU()).getTDiagramPanel().tp; TMLActivityDiagramPanel firewallADP = null; TMLComponentTaskDiagramPanel tcdp = tmlcdp.tmlctdp; if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){ MainGUI gui = tmlcdp.getMainGUI(); - int arch = mgui.tabs.indexOf(map.tmlap); + + int arch = mgui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch,"firewallArch"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1); int ind = gui.tabs.indexOf(tmlcdp); @@ -813,8 +818,8 @@ public class GTURTLEModeling { outChans.put(chan,rd); toAdd.add(rd); toAdd.add(wr); - map.listE.addCor(rd, (TGComponent) rd.getReferenceObject()); - map.listE.addCor(wr, (TGComponent) wr.getReferenceObject()); + map.getCorrespondanceList().addCor(rd, (TGComponent) rd.getReferenceObject()); + map.getCorrespondanceList().addCor(wr, (TGComponent) wr.getReferenceObject()); } tmlm.removeAllChannels(); for (TMLChannel c:toAdd){ @@ -930,7 +935,7 @@ public class GTURTLEModeling { TMLStartState start = new TMLStartState("start", adStart); act.setFirst(start); - map.listE.addCor(start,adStart); + map.getCorrespondanceList().addCor(start,adStart); //Add infinite loop @@ -946,7 +951,7 @@ public class GTURTLEModeling { TMLChoice choice = new TMLChoice("chooseChannel", adChoice); act.addElement(choice); loop.addNext(choice); - map.listE.addCor(choice,adChoice); + map.getCorrespondanceList().addCor(choice,adChoice); @@ -1000,7 +1005,7 @@ public class GTURTLEModeling { } //Redo all reference objects - map.listE.useDIPLOIDs(); + map.getCorrespondanceList().useDIPLOIDs(); return map; } @@ -1059,12 +1064,15 @@ public class GTURTLEModeling { return; } //Clone diagrams - - int arch = gui.tabs.indexOf(tmap.tmlap); + TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; + int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch,"hsm"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1); - TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel(); + TGComponent tgcomp= tmap.getTMLModeling().getTGComponent(); + TMLComponentDesignPanel tmlcdp= (TMLComponentDesignPanel) tgcomp.getTDiagramPanel().tp; + +// TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel(); int ind = gui.tabs.indexOf(tmlcdp); String tabName = gui.getTitleAt(tmlcdp); gui.cloneRenameTab(ind, name); @@ -1137,7 +1145,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (writeChannel.securityContext.equals("")){ + if (writeChannel.getSecurityContext().equals("")){ String nonceName=""; int type=-1; if (nonSecChans.contains(compName+"__"+writeChannel.getChannelName()+"_chData")){ @@ -1165,7 +1173,7 @@ public class GTURTLEModeling { fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); if (fromStart!=null){ channelInstances.add(tg); - SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.securityContext); + SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.getSecurityContext()); int type=-1; if (sp.type.equals("Symmetric Encryption")){ type=HSMChannel.SENC; @@ -1180,7 +1188,7 @@ public class GTURTLEModeling { type=HSMChannel.NONCE; } HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type); - ch.securityContext=writeChannel.securityContext; + ch.securityContext=writeChannel.getSecurityContext(); compChannels.put(writeChannel.getChannelName(),ch); //chanNames.add(writeChannel.getChannelName()+compName); } @@ -1188,7 +1196,7 @@ public class GTURTLEModeling { } if (tg instanceof TMLADReadChannel){ TMLADReadChannel readChannel = (TMLADReadChannel) tg; - if (readChannel.securityContext.equals("")){ + if (readChannel.getSecurityContext().equals("")){ fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); if (fromStart!=null){ if(nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") || nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){ @@ -1207,7 +1215,7 @@ public class GTURTLEModeling { if (fromStart!=null){ channelInstances.add(tg); HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC); - ch.securityContext=readChannel.securityContext; + ch.securityContext=readChannel.getSecurityContext(); compChannels.put(readChannel.getChannelName(),ch); } } @@ -1279,7 +1287,7 @@ public class GTURTLEModeling { TMLADWriteChannel writeChannel = (TMLADWriteChannel) chan; chanName=writeChannel.getChannelName(); HSMChannel ch = hsmChannels.get(chanName); - writeChannel.securityContext = ch.securityContext; + writeChannel.setSecurityContext(ch.securityContext); xpos = chan.getX(); ypos = chan.getY(); fromStart = tad.findTGConnectorEndingAt(chan.getTGConnectingPointAtIndex(0)); @@ -1305,7 +1313,7 @@ public class GTURTLEModeling { //Add write channel operator wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); wr.setChannelName("data_"+chanName+"_"+compName); - wr.securityContext = ch.securityContext; + wr.setSecurityContext(ch.securityContext); tad.addComponent(wr, xpos, ypos+yShift, false,true); @@ -1327,7 +1335,7 @@ public class GTURTLEModeling { yShift+=60; TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); rd.setChannelName("retData_"+chanName+"_"+compName); - rd.securityContext = ch.securityContext; + rd.setSecurityContext(ch.securityContext); tad.addComponent(rd, xpos, ypos+yShift, false,true); fromStart.setP2(rd.getTGConnectingPointAtIndex(0)); @@ -1362,7 +1370,7 @@ public class GTURTLEModeling { TMLADReadChannel readChannel = (TMLADReadChannel) chan; chanName=readChannel.getChannelName(); HSMChannel ch= hsmChannels.get(chanName); - readChannel.securityContext = ch.securityContext; + readChannel.setSecurityContext(ch.securityContext); xpos = chan.getX()+10; ypos = chan.getY(); fromStart = tad.findTGConnectorStartingAt(chan.getTGConnectingPointAtIndex(1)); @@ -1404,7 +1412,7 @@ public class GTURTLEModeling { //Add write channel operator TMLADWriteChannel wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); wr.setChannelName("data_"+chanName+"_"+compName); - wr.securityContext = ch.securityContext; + wr.setSecurityContext(ch.securityContext); tad.addComponent(wr, xpos, ypos+yShift, false,true); @@ -1419,7 +1427,7 @@ public class GTURTLEModeling { yShift+=60; TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); rd.setChannelName("retData_"+chanName+"_"+compName); - rd.securityContext = ch.securityContext; + rd.setSecurityContext(ch.securityContext); tad.addComponent(rd, xpos, ypos+yShift, false,true); fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); @@ -1509,7 +1517,7 @@ public class GTURTLEModeling { } TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task); - rd.securityContext = ch.securityContext; + rd.setSecurityContext(ch.securityContext); tad.addComponent(rd, xc,300,false,true); //Connect choice and readchannel fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); @@ -1520,7 +1528,7 @@ public class GTURTLEModeling { TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task); tad.addComponent(wr, xc, 600,false,true); - wr.securityContext = ch.securityContext; + wr.setSecurityContext(ch.securityContext); if (hsmChannels.get(chan).secType==HSMChannel.DEC){ @@ -1590,7 +1598,7 @@ public class GTURTLEModeling { HSMChannel ch = hsmChannels.get(chan); TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task); - rd.securityContext = ch.securityContext; + rd.setSecurityContext(ch.securityContext); tad.addComponent(rd, xc,300,false,true); //Connect choice and readchannel @@ -1603,7 +1611,7 @@ public class GTURTLEModeling { TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task); tad.addComponent(wr, xc, 600,false,true); - wr.securityContext = ch.securityContext; + wr.setSecurityContext(ch.securityContext); if (hsmChannels.get(chan).secType==HSMChannel.DEC){ @@ -1739,7 +1747,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADReadChannel){ TMLADReadChannel readChannel = (TMLADReadChannel) tg; - if (readChannel.getChannelName().equals(chan) && readChannel.securityContext.equals("")){ + if (readChannel.getChannelName().equals(chan) && readChannel.getSecurityContext().equals("")){ fromStart = tad.findTGConnectorStartingAt(tg.getTGConnectingPointAtIndex(1)); if (fromStart!=null){ channelInstances.add(tg); @@ -1749,7 +1757,7 @@ public class GTURTLEModeling { } for (TGComponent chI: channelInstances){ TMLADReadChannel readChannel = (TMLADReadChannel) chI; - readChannel.securityContext=ch.securityContext; + readChannel.setSecurityContext(ch.securityContext); xpos = chI.getX(); ypos = chI.getY()+10; fromStart = tad.findTGConnectorStartingAt(chI.getTGConnectingPointAtIndex(1)); @@ -1794,7 +1802,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (writeChannel.getChannelName().equals(chan) && writeChannel.securityContext.equals("")){ + if (writeChannel.getChannelName().equals(chan) && writeChannel.getSecurityContext().equals("")){ fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); if (fromStart!=null){ channelInstances.add(tg); @@ -1804,7 +1812,7 @@ public class GTURTLEModeling { } for (TGComponent chI: channelInstances){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) chI; - writeChannel.securityContext=ch.securityContext; + writeChannel.setSecurityContext(ch.securityContext); xpos = chI.getX(); ypos = chI.getY()-10; fromStart = tad.findTGConnectorEndingAt(chI.getTGConnectingPointAtIndex(0)); @@ -1927,13 +1935,16 @@ public class GTURTLEModeling { } + + public TMLMapping<TGComponent> autoSecure(MainGUI gui, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){ //TODO add more options // if (tmap==null){ return null; } - int arch = gui.tabs.indexOf(tmap.tmlap); + TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; + int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch,"enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1); @@ -1952,7 +1963,8 @@ public class GTURTLEModeling { if (tmap==null){ return null; } - int arch = gui.tabs.indexOf(tmap.tmlap); + TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; + int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch,"enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1); return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,true,false,false); @@ -1962,7 +1974,8 @@ public class GTURTLEModeling { if (tmap==null){ return null; } - int arch = gui.tabs.indexOf(tmap.tmlap); + TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; + int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch,"enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1); return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,autoConf,autoWeakAuth, autoStrongAuth); @@ -2056,8 +2069,9 @@ public class GTURTLEModeling { } //Create clone of Component Diagram + Activity diagrams to secure - - TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel(); + TGComponent tgcomp= map.getTMLModeling().getTGComponent(); + TMLComponentDesignPanel tmlcdp= (TMLComponentDesignPanel) tgcomp.getTDiagramPanel().tp; +// TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel(); int ind = gui.tabs.indexOf(tmlcdp); if (ind==-1){ TraceManager.addDev("No Component Design Panel"); @@ -2066,7 +2080,7 @@ public class GTURTLEModeling { String tabName = gui.getTitleAt(tmlcdp); gui.cloneRenameTab(ind, name); TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1); - map.setTMLDesignPanel(t); + TMLComponentTaskDiagramPanel tcdp = t.tmlctdp; //Create clone of architecture panel and map tasks to it newarch.renameMapping(tabName, tabName+"_"+name); @@ -2100,7 +2114,7 @@ public class GTURTLEModeling { for (TGComponent tg:tad.getComponentList()){ if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (writeChannel.securityContext.equals("")){ + if (writeChannel.getSecurityContext().equals("")){ TMLChannel chan = tmlmodel.getChannelByName(tabName+"__"+writeChannel.getChannelName()); //System.out.println("channel " + chan); @@ -2209,7 +2223,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){ + if (writeChannel.getChannelName().equals(channel) && writeChannel.getSecurityContext().equals("")){ if (fromStart!=null){ channelInstances.add(tg); @@ -2237,7 +2251,7 @@ public class GTURTLEModeling { else { rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); } - rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]; + rd.setSecurityContext("nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); tad.addComponent(rd, xpos, ypos+yShift, false,true); fromStart.setP2(rd.getTGConnectingPointAtIndex(0)); fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); @@ -2271,9 +2285,9 @@ public class GTURTLEModeling { if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel wChannel = (TMLADWriteChannel) tg; TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName()); - if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){ + if (channel.equals(wChannel.getChannelName()) && wChannel.getSecurityContext().equals("")){ TraceManager.addDev("Securing write channel " + wChannel.getChannelName()); - wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName(); + wChannel.setSecurityContext("autoEncrypt_"+wChannel.getChannelName()); } } @@ -2295,7 +2309,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){ + if (writeChannel.getChannelName().equals(channel) && writeChannel.getSecurityContext().equals("")){ xpos = tg.getX(); ypos = tg.getY(); fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); @@ -2327,7 +2341,7 @@ public class GTURTLEModeling { else { rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); } - rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]; + rd.setSecurityContext("nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); tad.addComponent(rd, xpos, ypos+yShift, false,true); fromStart.setP2(rd.getTGConnectingPointAtIndex(0)); fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); @@ -2364,9 +2378,9 @@ public class GTURTLEModeling { if (tg instanceof TMLADWriteChannel){ TMLADWriteChannel wChannel = (TMLADWriteChannel) tg; TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName()); - if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){ + if (channel.equals(wChannel.getChannelName()) && wChannel.getSecurityContext().equals("")){ TraceManager.addDev("Securing write channel " + wChannel.getChannelName()); - wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName(); + wChannel.setSecurityContext("autoEncrypt_"+wChannel.getChannelName()); tad.repaint(); } } @@ -2388,7 +2402,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADReadChannel){ TMLADReadChannel readChannel = (TMLADReadChannel) tg; - if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){ + if (readChannel.getChannelName().equals(channel) && readChannel.getSecurityContext().equals("")){ fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); if (fromStart!=null){ channelInstances.add(tg); @@ -2410,7 +2424,7 @@ public class GTURTLEModeling { TMLADReadChannel readChannel = (TMLADReadChannel) comp; TraceManager.addDev("Securing read channel " + readChannel.getChannelName()); - readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName(); + readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName()); tad.repaint(); TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); @@ -2439,7 +2453,7 @@ public class GTURTLEModeling { wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); } //send the nonce along the channel - wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]; + wr.setSecurityContext("nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); tad.addComponent(wr,xpos,ypos+yShift,false,true); wr.makeValue(); TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>()); @@ -2475,9 +2489,9 @@ public class GTURTLEModeling { if (tg instanceof TMLADReadChannel){ readChannel = (TMLADReadChannel) tg; TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName()); - if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){ + if (channel.equals(readChannel.getChannelName()) && readChannel.getSecurityContext().equals("")){ TraceManager.addDev("Securing read channel " + readChannel.getChannelName()); - readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName(); + readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName()); } } @@ -2505,7 +2519,7 @@ public class GTURTLEModeling { for (TGComponent tg: tad.getComponentList()){ if (tg instanceof TMLADReadChannel){ readChannel = (TMLADReadChannel) tg; - if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){ + if (readChannel.getChannelName().equals(channel) && readChannel.getSecurityContext().equals("")){ fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0)); if (fromStart!=null){ channelInstances.add(tg); @@ -2546,7 +2560,7 @@ public class GTURTLEModeling { wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); } //send the nonce along the channel - wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]; + wr.setSecurityContext("nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]); tad.addComponent(wr,xpos,ypos+yShift,false,true); wr.makeValue(); TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>()); @@ -2568,7 +2582,7 @@ public class GTURTLEModeling { //Now add the decrypt operator yShift=40; TraceManager.addDev("Securing read channel " + readChannel.getChannelName()); - readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName(); + readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName()); tad.repaint(); //Add decryption operator if it does not already exist xpos = readChannel.getX(); @@ -2588,9 +2602,9 @@ public class GTURTLEModeling { if (tg instanceof TMLADReadChannel){ readChannel = (TMLADReadChannel) tg; TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName()); - if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){ + if (channel.equals(readChannel.getChannelName()) && readChannel.getSecurityContext().equals("")){ TraceManager.addDev("Securing read channel " + readChannel.getChannelName()); - readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName(); + readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName()); } } @@ -2627,6 +2641,8 @@ public class GTURTLEModeling { map.setTMLModeling(newmodel); return map; } + + public boolean securePath(TMLMapping<TGComponent> map, TMLTask t1, TMLTask t2){ //Check if a path between two tasks is secure boolean secure=true; @@ -2772,7 +2788,7 @@ public class GTURTLEModeling { else { System.out.println("Can't map key to memory for " + sp.name + " on task " + t.getName()); UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot map key in memory for " + sp.name + " on task " + t.getName()); - ce.setTDiagramPanel(tmap.tmlap.tmlap); + ce.setTDiagramPanel(tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel()); ce.setTGComponent(null); checkingErrors.add(ce); } @@ -2813,7 +2829,7 @@ public class GTURTLEModeling { else if (tmlm!=null){ //Generate default mapping tmap = tmlm.getDefaultMapping(); - tmap.setTMLDesignPanel((TMLComponentDesignPanel)mgui.getCurrentTURTLEPanel()); + t2a=new TML2Avatar(tmap,false,true); avatarspec = t2a.generateAvatarSpec(loopLimit); } diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index 54cb74a400525e6cd35b5a394a1f26ef4d9aa95c..fe7f83a8485c0dc0d8bb649348d563edf8db4094 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -3601,9 +3601,29 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe if (!(tp instanceof TMLComponentDesignPanel)) { return null;} TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp; String name = getCurrentTDiagramPanel().getName(); + System.out.println("Name " + name); return tmlcomp.getAllOutChannels(name); } + + public String[] getAllCompOutChannels() { //this routine can be called only from a TMLComponentDesignPanel + List<String> chans = new ArrayList<String>(); + TURTLEPanel tp = getCurrentTURTLEPanel(); + if (tp == null) { return null;} + if (!(tp instanceof TMLComponentDesignPanel)) { return null;} + TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp; + return tmlcomp.getCompOutChannels(); + } + + public String[] getAllCompInChannels() { //this routine can be called only from a TMLComponentDesignPanel + TURTLEPanel tp = getCurrentTURTLEPanel(); + if (tp == null) { return null;} + if (!(tp instanceof TMLComponentDesignPanel)) { return null;} + TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp; + return tmlcomp.getCompInChannels(); + } + + public String[] getAllInChannels() { //this routine can be called only from a TMLComponentDesignPanel TURTLEPanel tp = getCurrentTURTLEPanel(); if (tp == null) {return null;} diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java index e3bae696c2d6f08d4f91c3d3f571ea18bdd4f82c..6243f0997d1d861c684930dec30c32831dd7f4d3 100755 --- a/src/main/java/ui/TDiagramPanel.java +++ b/src/main/java/ui/TDiagramPanel.java @@ -2147,6 +2147,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { actionOnRemove(t); tgcon.getTGConnectingPointP1().setFree(true); tgcon.getTGConnectingPointP2().setFree(true); + System.out.println("removing..."); TraceManager.addDev("Removed one connector!"); for(int k=0; k<tgcon.getNbConnectingPoint(); k++) removeOneConnector(tgcon.tgconnectingPointAtIndex(k)); diff --git a/src/main/java/ui/TMLComponentDesignPanel.java b/src/main/java/ui/TMLComponentDesignPanel.java index dc16ff5937c9c3d17f1775dc95049d5a9d01cb44..28b63c05cdd61ce955eb91a0c32c8e3bd7763c9a 100755 --- a/src/main/java/ui/TMLComponentDesignPanel.java +++ b/src/main/java/ui/TMLComponentDesignPanel.java @@ -94,6 +94,8 @@ public class TMLComponentDesignPanel extends TURTLEPanel { tabbedPane.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT ); } + + public TMLActivityDiagramPanel getTMLActivityDiagramPanel(String _name) { TMLActivityDiagramPanel tmladp; for(int i=1; i<panels.size(); i++) { @@ -193,6 +195,14 @@ public class TMLComponentDesignPanel extends TURTLEPanel { return tmlctdp.getPrimitiveComponentByName(_name); } + public String[] getCompOutChannels(){ + return tmlctdp.getCompOutChannels(); + } + + public String[] getCompInChannels(){ + return tmlctdp.getCompInChannels(); + } + public java.util.List<String> getAllTMLCommunicationNames(String _name) { return tmlctdp.getAllTMLCommunicationNames(_name); } diff --git a/src/main/java/ui/tmlad/TMLADReadChannel.java b/src/main/java/ui/tmlad/TMLADReadChannel.java index 3bedd32867fdcafbfe1b594c9f86659c221ca2c3..c3d37e110701516b909406a98abb031b424931d7 100755 --- a/src/main/java/ui/tmlad/TMLADReadChannel.java +++ b/src/main/java/ui/tmlad/TMLADReadChannel.java @@ -79,7 +79,9 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che protected String channelName = "ch"; protected String nbOfSamples= "1"; - public String securityContext =""; + protected String securityContext =""; + protected boolean isAttacker=false; + protected int stateOfError = 0; // Not yet checked public final static int NOT_VERIFIED = 0; @@ -169,8 +171,12 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che g.drawLine(x, y+height, x+width, y+height); g.drawLine(x, y, x+linebreak, y+height/2); g.drawLine(x, y+height, x+linebreak, y+height/2); - - g.drawString("chl", x+(width-w) / 2, y+textY0); + if (isAttacker){ + g.drawString("attack", x+(width-w) / 2, y+textY0); + } + else { + g.drawString("chl", x+(width-w) / 2, y+textY0); + } g.drawString(value, x + linebreak + textX0, y + textY1); if (!securityContext.equals("")){ @@ -258,25 +264,32 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che public boolean editOndoubleClick(JFrame frame) { - String [] labels = new String[3]; - String [] values = new String[3]; + String [] labels = new String[4]; + String [] values = new String[4]; labels[0] = "Channel name"; values[0] = channelName; - labels[1] = "Nb of samples"; + labels[1] = "Nb of samples"; values[1] = nbOfSamples; labels[2] = "Security Pattern"; - values[2] = securityContext; + values[2] = securityContext; + labels[3] = "Attacker?"; + values[3] = isAttacker ? "Yes" : "No"; ArrayList<String []> help = new ArrayList<String []>(); - String[] allInChannels = tdp.getMGUI().getAllInChannels(); - help.add(allInChannels); - help.add(null); - help.add(tdp.getMGUI().getCurrentCryptoConfig()); - + String[] allInChannels = tdp.getMGUI().getAllInChannels(); + System.out.println("isAttacker "+ isAttacker); + if (isAttacker){ + allInChannels = tdp.getMGUI().getAllCompInChannels(); + } + help.add(allInChannels); + help.add(null); + help.add(tdp.getMGUI().getCurrentCryptoConfig()); + String[] choice = new String[]{"Yes", "No"}; + help.add(choice); // JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples); - JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help); + JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 4, labels, values, help); //jdms.setSize(600, 300); GraphicLib.centerOnParent(jdms, 600, 300); jdms.setVisible( true ); // blocked until dialog has been closed @@ -284,7 +297,8 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che if (jdms.hasBeenSet() && (jdms.hasValidString(0))) { channelName = jdms.getString(0); nbOfSamples = jdms.getString(1); - securityContext = jdms.getString(2); + securityContext = jdms.getString(2); + isAttacker=jdms.getString(3).equals("Yes"); makeValue(); return true; } @@ -316,6 +330,8 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che sb.append(getSamplesValue()); sb.append("\" secPattern=\""); sb.append(securityContext); + sb.append("\" isAttacker=\""); + sb.append(isAttacker ? "Yes": "No"); sb.append("\" />\n"); sb.append("</extraparam>\n"); return new String(sb); @@ -347,6 +363,7 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che channelName = elt.getAttribute("channelName"); nbOfSamples = elt.getAttribute("nbOfSamples"); securityContext = elt.getAttribute("secPattern"); + isAttacker = elt.getAttribute("isAttacker").equals("Yes"); } } } @@ -360,6 +377,18 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che } + public String getSecurityContext(){ + return securityContext; + } + + public void setSecurityContext(String sc){ + securityContext=sc; + } + + public boolean isAttacker(){ + return isAttacker; + } + public int getType() { return TGComponentManager.TMLAD_READ_CHANNEL; } diff --git a/src/main/java/ui/tmlad/TMLADWriteChannel.java b/src/main/java/ui/tmlad/TMLADWriteChannel.java index 6bd275a8387cb2ce7d1244e7bdd48a043c108d18..a15f95ec63e7fb7d3d6a224397d45d65f8684b83 100755 --- a/src/main/java/ui/tmlad/TMLADWriteChannel.java +++ b/src/main/java/ui/tmlad/TMLADWriteChannel.java @@ -83,7 +83,9 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch protected String channelName = "ch"; protected String nbOfSamples= "1"; - public String securityContext = ""; + protected String securityContext = ""; + protected boolean isAttacker = false; + protected int stateOfError = 0; // Not yet checked public final static int NOT_VERIFIED = 0; @@ -168,8 +170,12 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch g.drawLine(x, y, x, y+height); g.drawLine(x+width-linebreak, y, x+width, y+height/2); g.drawLine(x+width-linebreak, y+height, x+width, y+height/2); - - g.drawString("chl", x+(width-w) / 2, y); + if (isAttacker){ + g.drawString("attack", x+(width-w) / 2, y); + } + else { + g.drawString("chl", x+(width-w) / 2, y); + } g.drawString(value, x + (width - w) / 2 , y + textY); if (!securityContext.equals("")){ g.drawString("sec:"+securityContext, x+3*width/4, y+height+textY); @@ -271,23 +277,30 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch } public boolean editOndoubleClick(JFrame frame) { - String [] labels = new String[3]; - String [] values = new String[3]; + String [] labels = new String[4]; + String [] values = new String[4]; labels[0] = "Channel name"; values[0] = channelName; labels[1] = "Nb of samples"; values[1] = nbOfSamples; labels[2] = "Security Pattern"; values[2] = securityContext; - + labels[3] = "Attacker?"; + values[3] = isAttacker ? "Yes" : "No"; ArrayList<String []> help = new ArrayList<String []>(); String[] allOutChannels = tdp.getMGUI().getAllOutChannels(); + System.out.println("isAttacker "+ isAttacker); + if (isAttacker){ + allOutChannels =tdp.getMGUI().getAllCompOutChannels(); + } + String[] choice = new String[]{"Yes", "No"}; help.add(allOutChannels); help.add(null); help.add(tdp.getMGUI().getCurrentCryptoConfig()); + help.add(choice); //JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples); - JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help); + JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 4, labels, values, help); //jdms.setSize(600, 300); GraphicLib.centerOnParent(jdms, 600, 300); jdms.setVisible( true ); // blocked until dialog has been closed @@ -295,8 +308,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch if (jdms.hasBeenSet() && (jdms.hasValidString(0))) { channelName = jdms.getString(0); nbOfSamples = jdms.getString(1); - securityContext = jdms.getString(2); - + securityContext = jdms.getString(2); + isAttacker=jdms.getString(3).equals("Yes"); makeValue(); return true; } @@ -313,6 +326,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch sb.append(getSamplesValue()); sb.append("\" secPattern=\""); sb.append(securityContext); + sb.append("\" isAttacker=\""); + sb.append(isAttacker ? "Yes": "No"); sb.append("\" />\n"); sb.append("</extraparam>\n"); return new String(sb); @@ -344,6 +359,7 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch channelName = elt.getAttribute("channelName"); nbOfSamples = elt.getAttribute("nbOfSamples"); securityContext = elt.getAttribute("secPattern"); + isAttacker = elt.getAttribute("isAttacker").equals("Yes"); } } } @@ -375,6 +391,20 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch nbOfSamples=sp; makeValue(); } + + public String getSecurityContext(){ + return securityContext; + } + + public void setSecurityContext(String sc){ + securityContext=sc; + } + + + public boolean isAttacker(){ + return isAttacker; + } + public void setStateAction(int _stateAction) { stateOfError = _stateAction; } diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java index 5694e357c1e93fd23cfdae2d0a2920f65eaf8a5c..2ad6c2408ebea30c19867518afe0efbd90d76046 100755 --- a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java +++ b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java @@ -201,7 +201,7 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp iconIsDrawn = false; } if (isAttacker){ - g.drawImage(IconManager.imgic8.getImage(), x + width - iconSize - textX, y + 2*textX, null); + g.drawImage(IconManager.imgic7008.getImage(), x + width - iconSize - textX, y + 2*textX, null); } // Attributes @@ -497,6 +497,9 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp //TraceManager.addDev("Loading extra params of " + value); //value = ""; StringBuffer sb = new StringBuffer("<extraparam>\n"); + sb.append("<Data isAttacker=\""); + sb.append(isAttacker() ? "Yes": "No"); + sb.append("\" />\n"); for(int i=0; i<myAttributes.size(); i++) { //TraceManager.addDev("Attribute:" + i); a = myAttributes.get (i); @@ -541,6 +544,9 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp //TraceManager.addDev(n2); if (n2.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) n2; + if (elt.getTagName().equals("Data")) { + isAttacker = elt.getAttribute("isAttacker").equals("Yes"); + } if (elt.getTagName().equals("Attribute")) { //TraceManager.addDev("Analyzing attribute"); access = Integer.decode(elt.getAttribute("access")).intValue(); diff --git a/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java b/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java index cf009a9a305ef17efeccfca9bf4797c66940c1a1..5e367a054b60a5ccc8ca606e2eb82eca4d4744da 100755 --- a/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java +++ b/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java @@ -145,6 +145,29 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi return true; } + public List<TMLCPrimitivePort> getPortsByName(String name){ + List<TMLCPrimitivePort> ports = new ArrayList<TMLCPrimitivePort>(); + for (TGComponent tgc : componentList){ + + if (tgc instanceof TMLCPrimitiveComponent){ + TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc; + List<TMLCPrimitivePort> cps = comp.getAllChannelsOriginPorts(); + for (TMLCPrimitivePort port : cps){ + if (port.commName.equals(name)){ + ports.add(port); + } + } + cps = comp.getAllChannelsDestinationPorts(); + for (TMLCPrimitivePort port : cps){ + if (port.commName.equals(name)){ + ports.add(port); + } + } + } + } + return ports; + } + public boolean actionOnValueChanged(TGComponent tgc) { //System.out.println("Action on value changed on component:" + tgc); if (tgc instanceof TMLCPrimitiveComponent) { @@ -445,6 +468,8 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi return al; } + + public void getAllPortsConnectedTo( List<TGComponent> ll, TMLCPrimitivePort _port) { List<TGComponent> components = getMGUI().getAllTMLComponents(); Iterator<TGComponent> iterator = components.listIterator(); @@ -618,6 +643,55 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi } } + public String[] getCompOutChannels(){ + List<String> chls = new ArrayList<String>(); + TGComponent tgc; + Iterator<TGComponent> iterator = componentList.listIterator(); + // List<String> list = new ArrayList<String>(); + TMLCPrimitiveComponent tmp; + + while(iterator.hasNext()) { + tgc = iterator.next(); + if (tgc instanceof TMLCPrimitiveComponent) { + TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc; + List<TMLCPrimitivePort> ll = comp.getAllChannelsOriginPorts(); + Iterator<TMLCPrimitivePort> ite = ll.listIterator(); + while(ite.hasNext()) { + TMLCPrimitivePort port = ite.next(); + chls.add(port.getPortName()); + } + } + } + String[] chlArray = new String[chls.size()]; + chlArray = chls.toArray(chlArray); + return chlArray; + } + + public String[] getCompInChannels(){ + List<String> chls = new ArrayList<String>(); + TGComponent tgc; + Iterator<TGComponent> iterator = componentList.listIterator(); + // List<String> list = new ArrayList<String>(); + TMLCPrimitiveComponent tmp; + + while(iterator.hasNext()) { + tgc = iterator.next(); + if (tgc instanceof TMLCPrimitiveComponent) { + TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc; + List<TMLCPrimitivePort> ll = comp.getAllChannelsDestinationPorts(); + Iterator<TMLCPrimitivePort> ite = ll.listIterator(); + while(ite.hasNext()) { + TMLCPrimitivePort port = ite.next(); + chls.add(port.getPortName()); + } + } + } + String[] chlArray = new String[chls.size()]; + chlArray = chls.toArray(chlArray); + return chlArray; + } + + public TMLCPrimitiveComponent getPrimitiveComponentByName(String _name) { TGComponent tgc; Iterator<TGComponent> iterator = componentList.listIterator(); diff --git a/src/main/java/ui/util/IconManager.java b/src/main/java/ui/util/IconManager.java index 1c3f9a88e14c5af8b28ba983572c305a981f98e6..2af58c41e42580c510d0e746ee91215d07711c73 100755 --- a/src/main/java/ui/util/IconManager.java +++ b/src/main/java/ui/util/IconManager.java @@ -158,6 +158,8 @@ public class IconManager { public static ImageIcon imgic7002, imgic7003, imgic7004, imgic7005, imgic7006; //Show traces public static ImageIcon imgic7007; + //Attacker Scenarios + public static ImageIcon imgic7008; // Delegate ports image removed, by Solange //public static ImageIcon imgic2102; @@ -605,6 +607,10 @@ public class IconManager { private static String icon7006 = "imply.gif"; //Show traces private static String icon7007 = "toolbarButtonGraphics/general/showTrace.gif"; + + //Attacker Scenarios + private static String icon7008 = "attacker.gif"; + public IconManager() { @@ -1026,6 +1032,7 @@ public class IconManager { imgic7005 = getIcon(icon7005); imgic7006 = getIcon(icon7006); imgic7007 = getIcon(icon7007); + imgic7008 = getIcon(icon7008); } } // Class