From ed76f2da91d82a6ff13ba3432713f2af7db628f9 Mon Sep 17 00:00:00 2001 From: jerray <jawher.jerray@eurecom.fr> Date: Fri, 9 Feb 2024 13:24:50 +0100 Subject: [PATCH] new presentation for SecurityPattern --- .../java/tmltranslator/SecurityPattern.java | 142 +- .../tmltranslator/TMLActivityElement.java | 10 +- .../TMLActivityElementWithAction.java | 19 + src/main/java/tmltranslator/TMLChannel.java | 7 + src/main/java/tmltranslator/TMLMapping.java | 10 +- .../TMLMappingTextSpecification.java | 4 +- src/main/java/tmltranslator/TMLModeling.java | 676 ++-------- .../java/tmltranslator/TMLSyntaxChecking.java | 2 +- .../tmltranslator/TMLTextSpecification.java | 155 +-- .../SecurityGenerationForTMAP.java | 1163 ++++++++--------- .../toavatar/FullTML2Avatar.java | 388 +++--- .../tmltranslator/toavatarsec/TML2Avatar.java | 850 ++++++------ .../ui/ActivityDiagram2TMLTranslator.java | 38 +- src/main/java/ui/DrawerTMAPModeling.java | 2 +- src/main/java/ui/DrawerTMLModeling.java | 43 +- src/main/java/ui/GTMLModeling.java | 16 +- src/main/java/ui/GTURTLEModeling.java | 22 +- src/main/java/ui/HSMGeneration.java | 8 +- src/main/java/ui/MainGUI.java | 4 +- src/main/java/ui/SecurityGeneration.java | 2 +- .../window/JDialogProverifVerification.java | 4 +- .../tmltranslator/DiplodocusSecurityTest.java | 38 +- .../tmltranslator/TMLComparingMethodTest.java | 6 +- .../keyexchange.tml | 4 +- .../test_diplo_security_models/nonce.tml | 4 +- 25 files changed, 1688 insertions(+), 1929 deletions(-) diff --git a/src/main/java/tmltranslator/SecurityPattern.java b/src/main/java/tmltranslator/SecurityPattern.java index fa09f6f09c..cea922d4eb 100644 --- a/src/main/java/tmltranslator/SecurityPattern.java +++ b/src/main/java/tmltranslator/SecurityPattern.java @@ -48,8 +48,6 @@ import java.util.Objects; public class SecurityPattern { - public final static int ENCRYPTION_PROCESS = 1; - public final static int DECRYPTION_PROCESS = 2; public final static String SYMMETRIC_ENC_PATTERN = "Symmetric Encryption"; public final static String ASYMMETRIC_ENC_PATTERN = "Asymmetric Encryption"; @@ -58,22 +56,19 @@ public class SecurityPattern { public final static String NONCE_PATTERN = "Nonce"; public final static String ADVANCED_PATTERN = "Advanced"; - public String name = ""; - public String type = ""; - public int overhead = 0; - public int size = 0; - public int encTime = 0; - public int decTime = 0; + private String name = ""; + private String type = ""; + private int overhead = 0; + private int size = 0; + private int encTime = 0; + private int decTime = 0; + private AvatarState state1; + private AvatarState state2; - public String originTask; - public AvatarState state1; - public AvatarState state2; - - public String nonce; - public String formula; - public String key; - public String algorithm = ""; - public int process = 0; // encrypt or decrypt + private String nonce; + private String formula; + private String key; + private String algorithm = ""; public SecurityPattern(String _name, String _type, String _overhead, String _size, String _enctime, String _dectime, String _nonce, String _formula, String _key) { @@ -112,20 +107,6 @@ public class SecurityPattern { } catch (NumberFormatException e) {} } - - public SecurityPattern(SecurityPattern secPattern) { - this.name = secPattern.name; - this.type = secPattern.type; - this.nonce = secPattern.nonce; - this.formula = secPattern.formula; - this.key = secPattern.key; - this.overhead = secPattern.overhead; - this.size = secPattern.size; - this.decTime = secPattern.decTime; - this.encTime = secPattern.encTime; - this.originTask = secPattern.originTask; - } - public String toXML() { String s = "<SECURITYPATTERN "; @@ -135,7 +116,6 @@ public class SecurityPattern { s += "\" size=\"" + size; s += "\" encTime=\"" + encTime; s += "\" decTime=\"" + decTime; - s += "\" originTask=\"" + originTask; if (state1 != null) { s += "\" state1=\"" + state1.getName(); } @@ -145,7 +125,6 @@ public class SecurityPattern { s += "\" nonce=\"" + nonce; s += "\" formula=\"" + formula; s += "\" key=\"" + key; - s += "\" process=\"" + process; s += "\" />\n"; return s; @@ -155,6 +134,98 @@ public class SecurityPattern { return name; } + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getOverhead() { + return overhead; + } + + public void setOverhead(int overhead) { + this.overhead = overhead; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getEncTime() { + return encTime; + } + + public void setEncTime(int encTime) { + this.encTime = encTime; + } + + public int getDecTime() { + return decTime; + } + + public void setDecTime(int decTime) { + this.decTime = decTime; + } + + public AvatarState getState1() { + return state1; + } + + public void setState1(AvatarState state1) { + this.state1 = state1; + } + + public AvatarState getState2() { + return state2; + } + + public void setState2(AvatarState state2) { + this.state2 = state2; + } + + public String getNonce() { + return nonce; + } + + public void setNonce(String nonce) { + this.nonce = nonce; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getAlgorithm() { + return algorithm; + } + + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + public boolean equalSpec(Object o) { if (!(o instanceof SecurityPattern)) return false; @@ -165,7 +236,6 @@ public class SecurityPattern { decTime == securityPattern.decTime && Objects.equals(name,securityPattern.name) && Objects.equals(type,securityPattern.type) && - Objects.equals(originTask,securityPattern.originTask) && Objects.equals(nonce,securityPattern.nonce) && Objects.equals(formula,securityPattern.formula) && Objects.equals(key,securityPattern.key) && @@ -180,10 +250,6 @@ public class SecurityPattern { return type.equals(SecurityPattern.NONCE_PATTERN); } - public void setProcess(int _process) { - this.process = _process; - } - public SecurityPattern deepClone(TMLModeling tmlm) throws TMLCheckingError { SecurityPattern sp = new SecurityPattern(name, type, ""+overhead, ""+size, ""+encTime, ""+decTime, nonce, formula, key); diff --git a/src/main/java/tmltranslator/TMLActivityElement.java b/src/main/java/tmltranslator/TMLActivityElement.java index 040f21b3fa..7059a42593 100755 --- a/src/main/java/tmltranslator/TMLActivityElement.java +++ b/src/main/java/tmltranslator/TMLActivityElement.java @@ -53,7 +53,7 @@ import java.util.Vector; */ public abstract class TMLActivityElement extends TMLElement { protected Vector<TMLActivityElement> nexts; - public SecurityPattern securityPattern; + private SecurityPattern securityPattern; private String value = ""; private boolean canBeCheckedForAccessibility = false; private boolean accessibility = false; @@ -76,6 +76,14 @@ public abstract class TMLActivityElement extends TMLElement { public String getValue(){ return value; } + + public SecurityPattern getSecurityPattern() { + return securityPattern; + } + + public void setSecurityPattern(SecurityPattern securityPattern) { + this.securityPattern = securityPattern; + } public TMLActivityElement getNextElement(int _i) { if (_i < getNbNext() ) { diff --git a/src/main/java/tmltranslator/TMLActivityElementWithAction.java b/src/main/java/tmltranslator/TMLActivityElementWithAction.java index c5e8213903..c62a29c832 100755 --- a/src/main/java/tmltranslator/TMLActivityElementWithAction.java +++ b/src/main/java/tmltranslator/TMLActivityElementWithAction.java @@ -41,6 +41,8 @@ package tmltranslator; +import translator.CheckingError; + import java.util.Objects; /** @@ -50,12 +52,29 @@ import java.util.Objects; * @author Ludovic APVRILLE */ public abstract class TMLActivityElementWithAction extends TMLActivityElement { + public final static int ENCRYPTION_PROCESS = 1; + public final static int DECRYPTION_PROCESS = 2; + + private boolean isDecryptionProcess = false; protected String action; public TMLActivityElementWithAction(String _name, Object _referenceObject) { super(_name, _referenceObject); } + public boolean isDecryptionProcess() { + return isDecryptionProcess; + } + + public void setDecryptionProcess(boolean decryption) throws TMLCheckingError { + isDecryptionProcess = decryption; + if (decryption) { + if (getSecurityPattern() == null) { + throw new TMLCheckingError(CheckingError.STRUCTURE_ERROR, "No security Pattern for " + this.getName()); + } + } + } + public void setAction(String _action) { action = _action; } diff --git a/src/main/java/tmltranslator/TMLChannel.java b/src/main/java/tmltranslator/TMLChannel.java index 8966cacd00..bfe881cf24 100755 --- a/src/main/java/tmltranslator/TMLChannel.java +++ b/src/main/java/tmltranslator/TMLChannel.java @@ -521,6 +521,13 @@ public class TMLChannel extends TMLCommunicationElement { return "channel__"; } + public String getChannelName() { + if (!getName().contains("__")) { + return getName(); + } + return getName().split("__")[1]; + } + public boolean isBlockingAtOrigin() { switch (type) { case BRBW: diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java index bafe77601d..db611e2227 100755 --- a/src/main/java/tmltranslator/TMLMapping.java +++ b/src/main/java/tmltranslator/TMLMapping.java @@ -79,7 +79,7 @@ public class TMLMapping<E> { // Security public boolean firewall = false; - public Map<SecurityPattern, List<HwMemory>> mappedSecurity = new HashMap<SecurityPattern, List<HwMemory>>(); // Keys + private Map<SecurityPattern, List<HwMemory>> mappedSecurity = new HashMap<SecurityPattern, List<HwMemory>>(); // Keys private List<String[]> pragmas = new ArrayList<String[]>(); // CPs @@ -122,6 +122,10 @@ public class TMLMapping<E> { new TML2ProVerif(this); } + public Map<SecurityPattern, List<HwMemory>> getMappedSecurity() { + return mappedSecurity; + } + public List<HwMemory> getMappedMemory(SecurityPattern sp) { return mappedSecurity.get(sp); } @@ -137,8 +141,8 @@ public class TMLMapping<E> { } public SecurityPattern getSecurityPatternByName(String name) { - for (SecurityPattern sp:tmlm.secPatterns) { - if (sp.name.equals(name)) { + for (SecurityPattern sp:tmlm.getSecPatterns()) { + if (sp.getName().equals(name)) { return sp; } } diff --git a/src/main/java/tmltranslator/TMLMappingTextSpecification.java b/src/main/java/tmltranslator/TMLMappingTextSpecification.java index 1531abb7f3..d4d659c5a5 100755 --- a/src/main/java/tmltranslator/TMLMappingTextSpecification.java +++ b/src/main/java/tmltranslator/TMLMappingTextSpecification.java @@ -258,8 +258,8 @@ public class TMLMappingTextSpecification<E> { public String makeMappingSecurityPatterns(TMLMapping<E> tmlmap) { String tmp = ""; - for (SecurityPattern sp : tmlmap.mappedSecurity.keySet()) { - List<HwMemory> mems = tmlmap.mappedSecurity.get(sp); + for (SecurityPattern sp : tmlmap.getMappedSecurity().keySet()) { + List<HwMemory> mems = tmlmap.getMappedSecurity().get(sp); for (HwMemory mem : mems) { tmp += "MAPSEC " + prepareString(mem.getName()) + " " + prepareString(sp.getName()) + CR; } diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java index a649a59ffa..19af02ff5b 100755 --- a/src/main/java/tmltranslator/TMLModeling.java +++ b/src/main/java/tmltranslator/TMLModeling.java @@ -39,10 +39,7 @@ package tmltranslator; -import avatartranslator.AvatarAttribute; -import avatartranslator.AvatarPragmaAuthenticity; -import avatartranslator.AvatarPragmaReachability; -import avatartranslator.AvatarPragmaSecret; +import avatartranslator.*; import myutil.Conversion; import myutil.TraceManager; import proverifspec.ProVerifOutputAnalyzer; @@ -65,10 +62,9 @@ public class TMLModeling<E> { public final String SEP1 = "_S_"; // Security - public List<String> securityPatterns; - public List<SecurityPattern> secPatterns; - public Map<String, List<String>> secChannelMap; - public Map<SecurityPattern, List<TMLTask>> securityTaskMap; + private List<SecurityPattern> secPatterns; + private Map<TMLChannel, Set<AvatarPragma>> secChannelMap; + private Map<SecurityPattern, List<TMLTask>> securityTaskMap; // Tasks and communication private List<TMLTask> tasks; @@ -113,13 +109,29 @@ public class TMLModeling<E> { public SecurityPattern getSecurityPattern(String name) { for (SecurityPattern sp : secPatterns) { - if (sp.name.equals(name)) { + if (sp.getName().equals(name)) { return sp; } } return null; } + public List<SecurityPattern> getSecPatterns() { + return secPatterns; + } + + public Map<SecurityPattern, List<TMLTask>> getSecurityTaskMap() { + return securityTaskMap; + } + + public Map<TMLChannel, Set<AvatarPragma>> getSecChannelMap() { + return secChannelMap; + } + + public void setSecChannelMap(Map<TMLChannel, Set<AvatarPragma>> secChannelMap) { + this.secChannelMap = secChannelMap; + } + public TMLMapping<E> getDefaultMapping() { TMLMapping<E> tmlmapping; tmlmapping = new TMLMapping<>(this, new TMLArchitecture(), false); @@ -135,10 +147,9 @@ public class TMLModeling<E> { requests = new ArrayList<TMLRequest>(); pragmas = new ArrayList<String>(); - securityPatterns = new ArrayList<String>(); secPatterns = new ArrayList<SecurityPattern>(); - secChannelMap = new HashMap<String, List<String>>(); + secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>(); securityTaskMap = new HashMap<SecurityPattern, List<TMLTask>>(); checkedActivities = new HashMap<>(); @@ -775,113 +786,54 @@ public class TMLModeling<E> { public void backtrace(ProVerifOutputAnalyzer pvoa, String mappingName) { //TraceManager.addDev("Backtracing Confidentiality"); Map<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults(); - - for (AvatarPragmaSecret pragma : confResults.keySet()) { - //TraceManager.addDev("pragma " + pragma); - ProVerifQueryResult result = confResults.get(pragma); - //TraceManager.addDev("pragma " + pragma + " / result proved:" + result.isProved() + " result satisfied:" + result.isSatisfied()); - if (!result.isProved()) - continue; - int r = result.isSatisfied() ? 2 : 3; - - - AvatarAttribute attr = pragma.getArg(); - - TMLChannel channel = getChannelByShortName(attr.getName().replaceAll("_chData", "")); - boolean invalidate = false; - if (channel == null) { - channel = getChannelByOriginPortName(attr.getName().replaceAll("_chData", "")); - } - //If an attribute is confidential because it has never been sent on that channel, do not backtrace that result since it is misleading - if (channel != null) { - //Mark the result only if the writechannel operator is reachable - Map<AvatarPragmaReachability, ProVerifQueryResult> reachResults = pvoa.getReachabilityResults(); - if (reachResults.size() > 0) { - for (AvatarPragmaReachability reachPragma : reachResults.keySet()) { - if (reachPragma.getState().getName().equals("aftersignalstate_reachannel_" + channel.getName())) { - if (!reachResults.get(reachPragma).isSatisfied()) { - TraceManager.addDev("invalidate = true "); - invalidate = true; + for (TMLChannel ch : secChannelMap.keySet()) { + if (ch.isCheckConfChannel()) { + List<Integer> confStatus = new ArrayList<Integer>(); + String secName = ""; + ProVerifResultTrace trace = null; + String pragmaString = ""; + for (AvatarPragma pragma : secChannelMap.get(ch)) { + if (pragma instanceof AvatarPragmaSecret) { + AvatarPragmaSecret pragmaSecret = (AvatarPragmaSecret) pragma; + secName += pragmaSecret.getArg().getName(); + ProVerifQueryResult result = confResults.get(pragmaSecret); + if (result != null) { + if (!result.isProved()) { + confStatus.add(1); + } else { + int r = result.isSatisfied() ? 2 : 3; + confStatus.add(r); } + trace = pvoa.getResults().get(pragma).getTrace(); + pragmaString = pragma.toString(); } } } - // Next check if there exists a "write channel" operator that sends unencrypted data - boolean found = false; - for (TMLTask task : getTasks()) { - TMLActivity act = task.getActivityDiagram(); - for (TMLActivityElement elem : act.getElements()) { - if (elem instanceof TMLWriteChannel) { - TMLWriteChannel wr = (TMLWriteChannel) elem; - if (wr.getChannel(0).getName().equals(channel.getName())) { - if (wr.securityPattern == null) { - found = true; - } - } - } - } - } - if (!found) { - //TraceManager.addDev("not found, invalidate = true "); - invalidate = true; - } - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckConf()) { - port.setMappingName(mappingName); - if (!invalidate) { - port.setConfStatus(r); - //Add Result Trace also - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } + + int generalConfResult = 1; + if (!confStatus.isEmpty()) { + if (confStatus.contains(3)) { + generalConfResult = 3; + } else if (confStatus.contains(1)) { + generalConfResult = 1; + } else { + generalConfResult = 2; } } - } else { - //TraceManager.addDev("Null channel for backtracing Confidentiality"); - } - TMLRequest req = getRequestByName(attr.getName().replaceAll("_reqData", "")); - if (req != null) { - for (TMLPortWithSecurityInformation port : req.ports) { + for (TMLPortWithSecurityInformation port : ch.ports) { if (port.getCheckConf()) { - port.setConfStatus(r); + port.setConfStatus(generalConfResult); + TraceManager.addDev("secName = " + secName); + port.setSecName(secName); port.setMappingName(mappingName); - } - } - } - TMLEvent ev = getEventByName(attr.getName().replaceAll("_eventData", "")); - if (ev != null) { - if (ev.port.getCheckConf()) { - ev.port.setConfStatus(r); - ev.port.setMappingName(mappingName); - } - if (ev.port2.getCheckConf()) { - ev.port2.setConfStatus(r); - ev.port2.setMappingName(mappingName); - } - } - - //TraceManager.addDev("Attribute name to find channels: " + attr.getName()); - List<String> channels = secChannelMap.get(attr.getName()); - if (channels != null) { - for (String channelName : channels) { - //TraceManager.addDev("Handling channel " + channelName); - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckConf()) { - port.setConfStatus(r); - port.setSecName(attr.getName()); - } + port.setPragmaString(pragmaString); + if (trace != null) { + port.setResultTrace(trace); } } } } - } - // } public Object getReference() { @@ -900,452 +852,73 @@ public class TMLModeling<E> { public void backtraceAuthenticity(ProVerifOutputAnalyzer pvoa, String mappingName) { //TraceManager.addDev("\n** Backtracing Authenticity ** "); Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults = pvoa.getAuthenticityResults(); - for (AvatarPragmaAuthenticity pragma : authenticityResults.keySet()) { - ProVerifQueryAuthResult result = authenticityResults.get(pragma); - // TODO: deal directly with pragma instead of s - String s = pragma.getAttrB().getAttribute().getBlock().getName() - + "__" + pragma.getAttrB().getAttribute().getName() - + "__" + pragma.getAttrB().getState().getName() - + " ==> " - + pragma.getAttrA().getAttribute().getBlock().getName() - + "__" + pragma.getAttrA().getAttribute().getName() - + "__" + pragma.getAttrA().getState().getName(); - - TraceManager.addDev("\n\n **Backtracing Authenticity s=" + s + " **"); - if (result.isProved() && result.isSatisfied()) { - TraceManager.addDev("Backtracing Authenticity proved and satisfied" ); - String signalName = s.split("_chData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - signalName = signalName.split("__")[1]; - TMLChannel channel = getChannelByShortName(signalName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); + for (TMLChannel ch : secChannelMap.keySet()) { + if (ch.isCheckAuthChannel()) { + List<Integer> weakAuthStatus = new ArrayList<Integer>(); + List<Integer> strongAuthStatus = new ArrayList<Integer>(); + String secName = ""; + ProVerifResultTrace trace = null; + String pragmaString = ""; + for (AvatarPragma pragma : secChannelMap.get(ch)) { + if (pragma instanceof AvatarPragmaAuthenticity) { + AvatarPragmaAuthenticity pragmaAuth = (AvatarPragmaAuthenticity) pragma; + ProVerifQueryAuthResult result = authenticityResults.get(pragmaAuth); + secName += pragmaAuth.getAttrA().getAttribute().getName() + " "; + TraceManager.addDev("\n\n **Backtracing Authenticity s=" + pragma.getName() + " **"); + if (result != null) { + if (!result.isProved()) { + strongAuthStatus.add(1); + } else if (result.isProved() && result.isSatisfied()) { + TraceManager.addDev("Backtracing Authenticity proved and satisfied"); + strongAuthStatus.add(2); + } else if (result.isProved() && !result.isSatisfied()) { + TraceManager.addDev("Backtracing Authenticity proved but not satisfied"); + strongAuthStatus.add(3); } - } - } - } - signalName = s.split("_reqData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - TMLRequest req = getRequestByName(signalName); - if (req != null) { - for (TMLPortWithSecurityInformation port : req.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - } - } - } - signalName = s.split("_eventData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - TMLEvent ev = getEventByName(signalName); - if (ev != null) { - if (ev.port.getCheckAuth()) { - ev.port.setStrongAuthStatus(2); - ev.port2.setMappingName(mappingName); - } - if (ev.port2.getCheckAuth()) { - ev.port2.setStrongAuthStatus(2); - ev.port2.setMappingName(mappingName); - } - } - signalName = s.split("__decrypt")[0]; - - /*for (TMLTask t: getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName()+"__",""); - } - }*/ - signalName = signalName.split("__")[1]; - // TraceManager.addDev("secpattern " + signalName); - List<String> channels = secChannelMap.get(signalName); - // TraceManager.addDev("secpattern channels " + channels); - if (channels != null) { - for (String channelName : channels) { - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - // TraceManager.addDev("adding to port " + channelName); - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } + if (!result.isWeakProved()) { + weakAuthStatus.add(1); + } else if (result.isWeakProved() && result.isWeakSatisfied()) { + TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied"); + weakAuthStatus.add(2); + } else if (result.isWeakProved() && !result.isWeakSatisfied()) { + TraceManager.addDev("Backtracing Authenticity weak proved and not weak satisfied"); + weakAuthStatus.add(3); } + trace = pvoa.getResults().get(pragma).getTrace(); + pragmaString = pragma.toString(); } } } - - //In case of HSM - signalName = s.split("__decrypt")[0]; - signalName = signalName.split("__")[1]; - channels = secChannelMap.get(signalName); - if (channels != null) { - for (String channelName : channels) { - if (channelName.contains("retData_") || channelName.contains("data_")) { - channelName = channelName.replaceAll("retData_", "").replaceAll("data_", ""); - //String header= channelName.split("__retData_")[0]; - for (TMLTask t : getTasks()) { - if (channelName.contains(t.getName().split("__")[1])) { - channelName = channelName.replace("_" + t.getName().split("__")[1], ""); - } - } - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } - } - } - } - } else if (result.isWeakProved() && result.isWeakSatisfied()) { - TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied"); - String signalName = s.split("_chData")[0]; - signalName = signalName.split("__")[1]; - TMLChannel channel = getChannelByShortName(signalName); - - if (channel != null) { - TraceManager.addDev("Security ports (1): " + channel.getSecurityPorts()); - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setWeakAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } + int generalStrongAuthResult = 1; + int generalWeakAuthResult = 1; + if (!weakAuthStatus.isEmpty()) { + if (weakAuthStatus.contains(3)) { + generalWeakAuthResult = 3; + } else if (weakAuthStatus.contains(1)) { + generalWeakAuthResult = 1; + } else { + generalWeakAuthResult = 2; } - } else { - TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied: NULL Channel"); } - - signalName = s.split("_reqData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); + if (!strongAuthStatus.isEmpty()) { + if (strongAuthStatus.contains(3)) { + generalStrongAuthResult = 3; + } else if (strongAuthStatus.contains(1)) { + generalStrongAuthResult = 1; + } else { + generalStrongAuthResult = 2; } } - TMLRequest req = getRequestByName(signalName); - if (req != null) { - for (TMLPortWithSecurityInformation port : req.ports) { - if (port.getCheckAuth()) { - //port.setWeakAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - } - } - } - signalName = s.split("__eventData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - TMLEvent ev = getEventByName(signalName); - if (ev != null) { - if (ev.port.getCheckAuth()) { - ev.port.setWeakAuthStatus(2); - ev.port2.setMappingName(mappingName); - } - if (ev.port2.getCheckAuth()) { - ev.port2.setWeakAuthStatus(2); - ev.port2.setMappingName(mappingName); - } - } - signalName = s.toString().split("__decrypt")[0]; - - /*for (TMLTask t: getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName()+"__",""); - } - }*/ - - signalName = signalName.split("__")[1]; - TraceManager.addDev("Signal name (2): " + signalName); - List<String> channels = secChannelMap.get(signalName); - if (channels != null) { - for (String channelName : channels) { - channel = getChannelByShortName(channelName); - - if (channel != null) { - TraceManager.addDev("Security ports (2): " + channel.getSecurityPorts()); - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(3); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - //port.setWeakAuthStatus(2); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } else { - TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied: NULL Channel"); - } - } - } - - //In case of HSM - signalName = s.split("__decrypt")[0]; - signalName = signalName.split("__")[1]; - channels = secChannelMap.get(signalName); - if (channels != null) { - for (String channelName : channels) { - if (channelName.contains("retData_") || channelName.contains("data_")) { - channelName = channelName.replaceAll("retData_", "").replaceAll("data_", ""); - //String header= channelName.split("__retData_")[0]; - for (TMLTask t : getTasks()) { - if (channelName.contains(t.getName().split("__")[1])) { - channelName = channelName.replace("_" + t.getName().split("__")[1], ""); - } - } - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setWeakAuthStatus(2); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } - } - } - } - } else if (result.isProved() && !result.isSatisfied()) { - TraceManager.addDev("Backtracing Authenticity proved but not satisfied"); - String signalName = s.toString().split("_chData")[0]; - signalName = signalName.split("__")[signalName.split("__").length - 1]; - - TMLChannel channel = getChannelByShortName(signalName); - - if (channel == null) { - channel = getChannelByDestinationPortName(signalName); - } - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - TraceManager.addDev("Backtracing Authenticity proved but not satisfied / Found port with checkAuth"); - //port.setStrongAuthStatus(3); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } else { - TraceManager.addDev("Backtracing Authenticity proved but not satisfied / NULL channel"); - } - signalName = s.toString().split("_reqData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - TMLRequest req = getRequestByName(signalName); - if (req != null) { - for (TMLPortWithSecurityInformation port : req.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(3); - port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - port.setMappingName(mappingName); - } - } - } - signalName = s.toString().split("_eventData")[0]; - for (TMLTask t : getTasks()) { - if (signalName.contains(t.getName())) { - signalName = signalName.replace(t.getName() + "__", ""); - } - } - TMLEvent ev = getEventByName(signalName); - if (ev != null) { - if (ev.port.getCheckAuth()) { - ev.port.setStrongAuthStatus(3); - ev.port2.setMappingName(mappingName); - } - if (ev.port2.getCheckAuth()) { - ev.port2.setStrongAuthStatus(3); - ev.port2.setMappingName(mappingName); - } - } - - signalName = s.split("__decrypt")[0]; - signalName = signalName.split("__")[1]; - List<String> channels = secChannelMap.get(signalName); - for (Map.Entry<String, List<String>> entry : secChannelMap.entrySet()) { - System.out.println(entry.getKey() + ":" + entry.getValue()); - } - - if (channels != null) { - for (String channelName : channels) { - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setStrongAuthStatus(3); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(), - port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(), - result.isWeakProved(), result.isWeakSatisfied())); - TraceManager.addDev("Backtracing Authenticity not verified " + signalName); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } - } - } - - //In case of HSM - signalName = s.split("__decrypt")[0]; - signalName = signalName.split("__")[1]; - channels = secChannelMap.get(signalName); - if (channels != null) { - for (String channelName : channels) { - if (channelName.contains("retData_") || channelName.contains("data_")) { - channelName = channelName.replaceAll("retData_", "").replaceAll("data_", ""); - //String header= channelName.split("__retData_")[0]; - for (TMLTask t : getTasks()) { - if (channelName.contains(t.getName().split("__")[1])) { - channelName = channelName.replace("_" + t.getName().split("__")[1], ""); - } - } - channel = getChannelByShortName(channelName); - if (channel != null) { - for (TMLPortWithSecurityInformation port : channel.ports) { - if (port.getCheckAuth()) { - //port.setWeakAuthStatus(3); - port.setStrongAuthStatus(updateStrongAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setWeakAuthStatus(updateWeakAuthenticityStatus( - port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(), - result.isProved(), result.isSatisfied(), result.isWeakProved(), - result.isWeakSatisfied())); - port.setSecName(signalName); - ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace(); - if (trace != null && !port.isOrigin()) { - port.setResultTrace(trace); - port.setPragmaString(pragma.toString()); - } - } - } - } + for (TMLPortWithSecurityInformation port : ch.ports) { + if (port.getCheckAuth()) { + port.setStrongAuthStatus(generalStrongAuthResult); + port.setWeakAuthStatus(generalWeakAuthResult); + port.setSecName(secName); + port.setMappingName(mappingName); + if (trace != null && !port.isOrigin()) { + port.setResultTrace(trace); + port.setPragmaString(pragmaString); } } } @@ -1615,9 +1188,6 @@ public class TMLModeling<E> { tasks.add(task); } } - for (String s : tmlm.securityPatterns) { - securityPatterns.add(s); - } for (SecurityPattern sp : tmlm.secPatterns) { if (!secPatterns.contains(sp)) { secPatterns.add(sp); @@ -2133,7 +1703,7 @@ public class TMLModeling<E> { if ((elt0 instanceof TMLExecC) && (elt0.getNbNext() == 1)) { elt1 = elt0.getNextElement(0); - if (elt1 instanceof TMLExecC && ((TMLExecC) elt1).securityPattern == null) { + if (elt1 instanceof TMLExecC && ((TMLExecC) elt1).getSecurityPattern() == null) { // Concate both elements concateActivityElementWithActions(activity, (TMLActivityElementWithAction) elt0, (TMLActivityElementWithAction) elt1); @@ -3041,7 +2611,7 @@ public class TMLModeling<E> { TraceManager.addDev("List of Security Patterns: ok"); - return (new HashSet<>(securityPatterns).equals(new HashSet<>(that.securityPatterns))); + return true; } @@ -3205,19 +2775,6 @@ public class TMLModeling<E> { } } - public int updateWeakAuthenticityStatus(int _lastStrongAuthStatus, int _lastWeakAuthStatus, - boolean _isStrongAuthProved, boolean _isStrongAuthSatisfied, boolean _isWeakAuthProved, - boolean _isWeakAuthSatisfied) { - if (_isWeakAuthProved && _isWeakAuthSatisfied && _lastWeakAuthStatus != 3) { - return 2; - } else if (!_isWeakAuthProved && _lastWeakAuthStatus < 3) { - return 1; - } - else { - return 3; - } - } - @SuppressWarnings("unchecked") public TMLModeling deepClone() throws TMLCheckingError { TMLModeling tmlm = new TMLModeling(); @@ -3303,7 +2860,6 @@ public class TMLModeling<E> { tmlm.optimized = optimized; // Security - tmlm.securityPatterns.addAll(securityPatterns); for(SecurityPattern sp: secPatterns) { tmlm.secPatterns.add(sp.deepClone(tmlm)); } diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java index 0a8fd98154..b8544b9d18 100755 --- a/src/main/java/tmltranslator/TMLSyntaxChecking.java +++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java @@ -1121,7 +1121,7 @@ public class TMLSyntaxChecking { } public void checkMappingOfSecurityPattern() { - for(SecurityPattern sp: tmlm.secPatterns) { + for(SecurityPattern sp: tmlm.getSecPatterns()) { if (!(sp.isNonceType())) { List<HwMemory> mems = mapping.getMappedMemory(sp); if ((mems == null) || (mems.size() == 0)) { diff --git a/src/main/java/tmltranslator/TMLTextSpecification.java b/src/main/java/tmltranslator/TMLTextSpecification.java index 7a08f37ceb..a6ec1b914c 100755 --- a/src/main/java/tmltranslator/TMLTextSpecification.java +++ b/src/main/java/tmltranslator/TMLTextSpecification.java @@ -415,37 +415,37 @@ public class TMLTextSpecification<E> { return code + makeBehavior(task, elt.getNextElement(0)); } else if (elt instanceof TMLExecC) { - if (elt.securityPattern == null) { + if (elt.getSecurityPattern() == null) { code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + CR; } else { String type = ""; - if (elt.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + if (elt.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { type = AENCRYPT; - } else if (elt.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { type = SENCRYPT; - } else if (elt.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) { + } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) { type = MAC; - } else if (elt.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { + } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) { type = NONCE; - } else if (elt.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) { + } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) { type = HASH; - } else if (elt.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) { + } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) { type = ADV; } - String nonce = elt.securityPattern.nonce; + String nonce = elt.getSecurityPattern().getNonce(); if (nonce.length() == 0) { nonce = EMPTY_KEY_NONCE; } - String key = elt.securityPattern.nonce; + String key = elt.getSecurityPattern().getKey(); if (key.length() == 0) { key = EMPTY_KEY_NONCE; } - - code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + SP + elt.securityPattern.name + SP + type + SP + - elt.securityPattern.encTime + SP + elt.securityPattern.decTime + SP + elt.securityPattern.overhead + SP + - elt.securityPattern.size + SP + nonce + SP + key + SP + elt.securityPattern.process + CR; + int process = (((TMLExecC) elt).isDecryptionProcess()) ? TMLExecC.DECRYPTION_PROCESS : TMLExecC.ENCRYPTION_PROCESS; + code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + SP + elt.getSecurityPattern().getName() + SP + type + SP + + elt.getSecurityPattern().getEncTime() + SP + elt.getSecurityPattern().getDecTime() + SP + elt.getSecurityPattern().getOverhead() + SP + + elt.getSecurityPattern().getSize() + SP + nonce + SP + key + SP + process + CR; } return code + makeBehavior(task, elt.getNextElement(0)); @@ -496,8 +496,8 @@ public class TMLTextSpecification<E> { } //TraceManager.addDev("Nb of samples in task " + task.getName() + " = " + tmlch.getNbOfSamples()); code = code + modifyString(tmlch.getNbOfSamples()); - if (elt.securityPattern != null) { - code = code + SP + elt.securityPattern.name + CR; + if (elt.getSecurityPattern() != null) { + code = code + SP + elt.getSecurityPattern().getName() + CR; } else { code = code + CR; } @@ -505,10 +505,10 @@ public class TMLTextSpecification<E> { } else if (elt instanceof TMLReadChannel) { tmlch = (TMLActivityElementChannel) elt; - if (elt.securityPattern == null) { + if (elt.getSecurityPattern() == null) { code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + CR; } else { - code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + SP + elt.securityPattern.name + CR; + code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + SP + elt.getSecurityPattern().getName() + CR; } return code + makeBehavior(task, elt.getNextElement(0)); @@ -729,7 +729,11 @@ public class TMLTextSpecification<E> { if (s1 != null) { split = s1.split("\\s"); if (split.length > 0) { - findSec(split); + if (isInstruction(split[0], "EXECC")) { + if (!findAndCheckSec(split)) { + addError(0, lineNb, 0, "The Security Pattern " + split[2] + " already exists"); + } + } } } @@ -771,55 +775,50 @@ public class TMLTextSpecification<E> { } } - public void findSec(String[] _split) { - if (isInstruction(_split[0], "EXECC")) { - - if (_split.length > 10) { - TraceManager.addDev("Found EXECC in: " + _split.length + " name=" + _split[2] + " type=" + _split[3]); + public boolean findAndCheckSec(String[] _split) { + boolean isNewSec = true; + if (_split.length > 10) { + TraceManager.addDev("Found EXECC in: " + _split.length + " name=" + _split[2] + " type=" + _split[3]); + if (_split[10].compareTo("" + TMLExecC.ENCRYPTION_PROCESS) == 0) { String ccName = _split[2]; - String type = _split[3]; - String stringType = ""; - int process; - - if (type.equals(AENCRYPT)) { - stringType = SecurityPattern.ASYMMETRIC_ENC_PATTERN; - } else if (type.equals(SENCRYPT)) { - stringType = SecurityPattern.SYMMETRIC_ENC_PATTERN; - } else if (type.equals(HASH)) { - stringType = SecurityPattern.HASH_PATTERN; - } else if (type.equals(MAC)) { - stringType = SecurityPattern.MAC_PATTERN; - } else if (type.equals(NONCE)) { - stringType = SecurityPattern.NONCE_PATTERN; - } else if (type.equals(ADV)) { - stringType = SecurityPattern.ADVANCED_PATTERN; - } - - if (stringType.length() > 0) { - TraceManager.addDev("Found security pattern: " + ccName + " with type: " + stringType); - String nonce = _split[8]; - if (_split[7].compareTo(EMPTY_KEY_NONCE) == 0) { - nonce = ""; - } - String key = _split[9]; - if (_split[8].compareTo(EMPTY_KEY_NONCE) == 0) { - key = ""; - } - process = SecurityPattern.DECRYPTION_PROCESS; - if (_split[9].compareTo("" + SecurityPattern.ENCRYPTION_PROCESS) == 0) { - process = SecurityPattern.ENCRYPTION_PROCESS; + if (securityPatternMap.containsKey(ccName)) { + isNewSec = false; + } else { + String type = _split[3]; + String stringType = ""; + if (type.equals(AENCRYPT)) { + stringType = SecurityPattern.ASYMMETRIC_ENC_PATTERN; + } else if (type.equals(SENCRYPT)) { + stringType = SecurityPattern.SYMMETRIC_ENC_PATTERN; + } else if (type.equals(HASH)) { + stringType = SecurityPattern.HASH_PATTERN; + } else if (type.equals(MAC)) { + stringType = SecurityPattern.MAC_PATTERN; + } else if (type.equals(NONCE)) { + stringType = SecurityPattern.NONCE_PATTERN; + } else if (type.equals(ADV)) { + stringType = SecurityPattern.ADVANCED_PATTERN; } - SecurityPattern sp = new SecurityPattern(ccName, stringType, _split[6], _split[7], _split[4], _split[5], nonce, "", - key); - sp.process = process; - if (securityPatternMap.get(ccName) == null) { + if (!stringType.isEmpty()) { + TraceManager.addDev("Found security pattern: " + ccName + " with type: " + stringType); + String nonce = _split[8]; + if (_split[8].compareTo(EMPTY_KEY_NONCE) == 0) { + nonce = ""; + } + String key = _split[9]; + if (_split[9].compareTo(EMPTY_KEY_NONCE) == 0) { + key = ""; + } + SecurityPattern sp = new SecurityPattern(ccName, stringType, _split[6], _split[7], _split[4], _split[5], nonce, "", + key); tmlm.addSecurityPattern(sp); + securityPatternMap.put(ccName, sp); + TraceManager.addDev("Security pattern " + ccName + " added"); } - securityPatternMap.put(ccName, sp); - TraceManager.addDev("Security pattern " + ccName + " added"); } } } + return isNewSec; } public void addError(int _type, int _lineNb, int _charNb, String _msg) { @@ -830,7 +829,7 @@ public class TMLTextSpecification<E> { errors.add(error); } - public int analyseInstruction(String _line, int _lineNb, String[] _split) { + public int analyseInstruction(String _line, int _lineNb, String[] _split) throws TMLCheckingError { String error; String params; String id; @@ -1690,7 +1689,7 @@ public class TMLTextSpecification<E> { if (_split.length == 4) { if (securityPatternMap.containsKey(_split[3])) { - tmlrch.securityPattern = securityPatternMap.get(_split[3]); + tmlrch.setSecurityPattern(securityPatternMap.get(_split[3])); } } @@ -1727,10 +1726,10 @@ public class TMLTextSpecification<E> { TMLWriteChannel tmlwch = new TMLWriteChannel(_split[1], null); if (_split.length > 3) { if (securityPatternMap.containsKey(_split[_split.length - 1])) { - tmlwch.securityPattern = securityPatternMap.get(_split[_split.length - 1]); + tmlwch.setSecurityPattern(securityPatternMap.get(_split[_split.length - 1])); TraceManager.addDev("Nb of samples in task " + task.getName() + - " security pattern: " + tmlwch.securityPattern.name); - tmlwch.securityPattern.originTask = task.getTaskName(); + " security pattern: " + tmlwch.getSecurityPattern().getName()); + //tmlwch.getSecurityPattern().setOriginTask(task.getTaskName()); } for (int k = 0; k < _split.length - 3; k++) { //TraceManager.addDev("Handling write channel 1.1"); @@ -2785,14 +2784,24 @@ public class TMLTextSpecification<E> { if (_split.length == 11) { if (securityPatternMap.containsKey(_split[2])) { - //Security operation - TraceManager.addDev("Found security pattern: " + _split[2]); - TMLExecC execc = new TMLExecC("execc", null); - execc.setAction(_split[1]); - execc.securityPattern = securityPatternMap.get(_split[2]); - tmlae.addNext(execc); - task.getActivityDiagram().addElement(execc); - tmlae = execc; + if ((_split[10].compareTo("" + TMLExecC.DECRYPTION_PROCESS) == 0) || (_split[10].compareTo("" + TMLExecC.ENCRYPTION_PROCESS) == 0)) { + //Security operation + TraceManager.addDev("Found security pattern: " + _split[2]); + TMLExecC execc = new TMLExecC("encrypt_" + _split[2], null); + execc.setAction(_split[1]); + execc.setSecurityPattern(securityPatternMap.get(_split[2])); + if (_split[10].compareTo("" + TMLExecC.DECRYPTION_PROCESS) == 0) { + execc.setDecryptionProcess(true); + execc.setName("decrypt_" + _split[2]); + } + tmlae.addNext(execc); + task.getActivityDiagram().addElement(execc); + tmlae = execc; + } else { + error = "EXECC " + _split[2] + " has an unknown security process"; + addError(0, _lineNb, 0, error); + return -1; + } } else { error = "An EXECC with a security configuration must contain a valid security configuration name " + (_split[2]); addError(0, _lineNb, 0, error); diff --git a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java index f8636bcef7..fca3ef06d8 100644 --- a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java +++ b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java @@ -47,6 +47,7 @@ package tmltranslator.patternhandling; * @version 1.0 28/09/2023 */ +import avatartranslator.AvatarPragma; import avatartranslator.AvatarPragmaAuthenticity; import avatartranslator.AvatarPragmaSecret; import avatartranslator.AvatarSpecification; @@ -54,10 +55,7 @@ import avatartranslator.toproverif.AVATAR2ProVerif; import common.ConfigurationTTool; import launcher.RshClient; import myutil.TraceManager; -import proverifspec.ProVerifOutputAnalyzer; -import proverifspec.ProVerifQueryAuthResult; -import proverifspec.ProVerifQueryResult; -import proverifspec.ProVerifSpec; +import proverifspec.*; import tmltranslator.*; import tmltranslator.toavatarsec.TML2Avatar; import ui.TGComponent; @@ -77,14 +75,14 @@ public class SecurityGenerationForTMAP implements Runnable { private AVATAR2ProVerif avatar2proverif; - private Map<String, Integer> channelIndexMap = new HashMap<String, Integer>(); + private Map<TMLChannel, Integer> channelIndexMap = new HashMap<TMLChannel, Integer>(); private Map<String, List<HSMChannel>> hsmChannelMap = new HashMap<String, List<HSMChannel>>(); - private Map<String, String> taskHSMMap = new HashMap<String, String>(); - private List<String> hsmTasks = new ArrayList<String>(); + private Map<TMLTask, String> taskHSMMap = new HashMap<TMLTask, String>(); + private List<TMLTask> hsmTasks = new ArrayList<TMLTask>(); - private Map<String, SecurityPattern> channelSecMap = new HashMap<String, SecurityPattern>(); + private Map<TMLChannel, SecurityPattern> channelSecMap = new HashMap<TMLChannel, SecurityPattern>(); private TMLMapping<?> newMap; public SecurityGenerationForTMAP(String appName, TMLMapping<?> tmap, String encComp, String overhead, String decComp, Map<String, List<String>> selectedCPUTasks) { @@ -97,7 +95,7 @@ public class SecurityGenerationForTMAP implements Runnable { this.selectedCPUTasks = selectedCPUTasks; } - public void proverifAnalysis(TMLMapping<?> tmap, List<String> nonAuthChans, List<String> nonConfChans, boolean checkAuthProverif) { + public void proverifAnalysis(TMLMapping<?> tmap, List<TMLChannel> nonConfChans, List<TMLChannel> nonWeakAuthChans, List<TMLChannel> nonStrongAuthChans) { if (tmap == null) { TraceManager.addDev("No mapping"); return; @@ -111,7 +109,7 @@ public class SecurityGenerationForTMAP implements Runnable { } TML2Avatar t2a = new TML2Avatar(newMap, false, true, o); - AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", checkAuthProverif); + AvatarSpecification avatarspec = t2a.generateAvatarSpec("1"); if (avatarspec == null) { TraceManager.addDev("No avatar spec"); return; @@ -136,47 +134,97 @@ public class SecurityGenerationForTMAP implements Runnable { ProVerifOutputAnalyzer pvoa = avatar2proverif.getOutputAnalyzer(); pvoa.analyzeOutput(data, true); - if (pvoa.getResults().size() == 0) { + if (pvoa.getResults().isEmpty()) { TraceManager.addDev("SECGEN ERROR: No security results"); } Map<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults(); - - for (AvatarPragmaSecret pragma : confResults.keySet()) { - TraceManager.addDev("SECGEN: Pragma " + pragma); - if (confResults.get(pragma).isProved() && !confResults.get(pragma).isSatisfied()) { - nonConfChans.add(pragma.getArg().getBlock().getName() + "__" + pragma.getArg().getName()); - TraceManager.addDev("SECGEN:" + pragma.getArg().getBlock().getName() + "." + pragma.getArg().getName() + " is not secret"); - - TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(pragma.getArg().getName().replaceAll("_chData", "")); - - if (chan == null) { - chan = tmap.getTMLModeling().getChannelByOriginPortName(pragma.getArg().getName().replaceAll("_chData", "")); + Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults = pvoa.getAuthenticityResults(); + for (TMLChannel ch : tmap.getTMLModeling().getSecChannelMap().keySet()) { + if (ch.isCheckConfChannel()) { + List<Integer> confStatus = new ArrayList<Integer>(); + for (AvatarPragma pragma : tmap.getTMLModeling().getSecChannelMap().get(ch)) { + if (pragma instanceof AvatarPragmaSecret) { + AvatarPragmaSecret pragmaSecret = (AvatarPragmaSecret) pragma; + ProVerifQueryResult result = confResults.get(pragmaSecret); + if (result != null) { + if (!result.isProved()) { + confStatus.add(1); + } else { + int r = result.isSatisfied() ? 2 : 3; + confStatus.add(r); + } + } + } } - - if (chan == null) { - TraceManager.addDev("SECGEN: NULL Channel"); - continue; + int generalConfResult = 1; + if (!confStatus.isEmpty()) { + if (confStatus.contains(3)) { + generalConfResult = 3; + } else if (confStatus.contains(1)) { + generalConfResult = 1; + } else { + generalConfResult = 2; + } } + if (generalConfResult == 3) { + nonConfChans.add(ch); + } + } + if (ch.isCheckAuthChannel()) { + List<Integer> weakAuthStatus = new ArrayList<Integer>(); + List<Integer> strongAuthStatus = new ArrayList<Integer>(); + for (AvatarPragma pragma : tmap.getTMLModeling().getSecChannelMap().get(ch)) { + if (pragma instanceof AvatarPragmaAuthenticity) { + AvatarPragmaAuthenticity pragmaAuth = (AvatarPragmaAuthenticity) pragma; + ProVerifQueryAuthResult result = authenticityResults.get(pragmaAuth); + if (result != null) { + if (!result.isProved()) { + strongAuthStatus.add(1); + } else if (result.isProved() && result.isSatisfied()) { + strongAuthStatus.add(2); + } else if (result.isProved() && !result.isSatisfied()) { + strongAuthStatus.add(3); + } - if (chan.isBasicChannel()) { - TraceManager.addDev("SECGEN: Channel added to nonConfCh"); - nonConfChans.add(chan.getOriginTask().getName() + "__" + pragma.getArg().getName()); - - } else { - for (TMLTask originTask : chan.getOriginTasks()) { - nonConfChans.add(originTask.getName() + "__" + pragma.getArg().getName()); + if (!result.isWeakProved()) { + weakAuthStatus.add(1); + } else if (result.isWeakProved() && result.isWeakSatisfied()) { + weakAuthStatus.add(2); + } else if (result.isWeakProved() && !result.isWeakSatisfied()) { + weakAuthStatus.add(3); + } + } } } - } - } + int generalStrongAuthResult = 1; + int generalWeakAuthResult = 1; + if (!weakAuthStatus.isEmpty()) { + if (weakAuthStatus.contains(3)) { + generalWeakAuthResult = 3; + } else if (weakAuthStatus.contains(1)) { + generalWeakAuthResult = 1; + } else { + generalWeakAuthResult = 2; + } + } + if (!strongAuthStatus.isEmpty()) { + if (strongAuthStatus.contains(3)) { + generalStrongAuthResult = 3; + } else if (strongAuthStatus.contains(1)) { + generalStrongAuthResult = 1; + } else { + generalStrongAuthResult = 2; + } + } + if (generalWeakAuthResult == 3) { + nonWeakAuthChans.add(ch); + } - Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authResults = pvoa.getAuthenticityResults(); - for (AvatarPragmaAuthenticity pragma : authResults.keySet()) { - if (authResults.get(pragma).isProved() && !authResults.get(pragma).isSatisfied()) { - nonAuthChans.add(pragma.getAttrA().getAttribute().getBlock().getName() + "__" + pragma.getAttrA().getAttribute().getName().replaceAll("_chData", "")); - nonAuthChans.add(pragma.getAttrB().getAttribute().getBlock().getName() + "__" + pragma.getAttrB().getAttribute().getName().replaceAll("_chData", "")); + if (generalStrongAuthResult == 3) { + nonStrongAuthChans.add(ch); + } } } @@ -198,20 +246,20 @@ public class SecurityGenerationForTMAP implements Runnable { return tmap; } - public boolean portInTask(TMLTask task, String portName) { + public boolean portInTask(TMLTask task, TMLChannel ch) { TMLActivity adTask = task.getActivityDiagram(); for (TMLActivityElement elem : adTask.getElements()) { if (elem instanceof TMLWriteChannel) { TMLWriteChannel writeChannel = (TMLWriteChannel) elem; for (int i = 0; i < writeChannel.getNbOfChannels(); i++) { - if (writeChannel.getChannel(i).getName().replaceAll(appName + "__", "").equals(portName)) { + if (writeChannel.getChannel(i).equals(ch)) { return true; } } } else if (elem instanceof TMLReadChannel) { TMLReadChannel readChannel = (TMLReadChannel) elem; for (int i = 0; i < readChannel.getNbOfChannels(); i++) { - if (readChannel.getChannel(i).getName().replaceAll(appName + "__", "").equals(portName)) { + if (readChannel.getChannel(i).equals(ch)) { return true; } } @@ -225,15 +273,15 @@ public class SecurityGenerationForTMAP implements Runnable { // oldmodel = tmap.getTMLModeling(); Map<TMLTask, HashSet<TMLTask>> toSecure = new HashMap<TMLTask, HashSet<TMLTask>>(); Map<TMLTask, HashSet<TMLTask>> toSecureRev = new HashMap<TMLTask, HashSet<TMLTask>>(); - Map<TMLTask, HashSet<String>> secOutChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> secInChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> nonceOutChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> nonceInChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> macOutChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> macInChannels = new HashMap<TMLTask, HashSet<String>>(); + Map<TMLTask, HashSet<TMLChannel>> secOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> secInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> nonceOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> nonceInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> macOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> macInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); - Map<TMLTask, HashSet<String>> hsmSecInChannels = new HashMap<TMLTask, HashSet<String>>(); - Map<TMLTask, HashSet<String>> hsmSecOutChannels = new HashMap<TMLTask, HashSet<String>>(); + Map<TMLTask, HashSet<TMLChannel>> hsmSecInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); + Map<TMLTask, HashSet<TMLChannel>> hsmSecOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>(); //TraceManager.addDev("mapping " + tmap.getSummaryTaskMapping()); @@ -243,35 +291,32 @@ public class SecurityGenerationForTMAP implements Runnable { for (String cpuName : selectedCPUTasks.keySet()) { for (String task : selectedCPUTasks.get(cpuName)) { - hsmTasks.add(task); - taskHSMMap.put(task, cpuName); + String taskLongName = appName + "__" + task; + hsmTasks.add(tmap.getTaskByName(taskLongName)); + taskHSMMap.put(tmap.getTaskByName(taskLongName), cpuName); } hsmChannelMap.put(cpuName, new ArrayList<HSMChannel>()); - } TMLModeling<?> tmlmodel = tmap.getTMLModeling(); //Proverif Analysis channels - List<String> nonAuthChans = new ArrayList<String>(); - List<String> nonConfChans = new ArrayList<String>(); - boolean checkAuthProverif = false; - for (TMLChannel ch : tmlmodel.getChannels()) { - if (ch.isEnsureWeakAuth() || ch.isEnsureStrongAuth()) { - checkAuthProverif = true; - break; - } - } - proverifAnalysis(tmap, nonAuthChans, nonConfChans, checkAuthProverif); + List<TMLChannel> nonConfChans = new ArrayList<TMLChannel>(); + List<TMLChannel> nonWeakAuthChans = new ArrayList<TMLChannel>(); + List<TMLChannel> nonStrongAuthChans = new ArrayList<TMLChannel>(); - List<TMLChannel> channels = tmlmodel.getChannels(); for (TMLChannel channel : channels) { for (TMLPortWithSecurityInformation p : channel.ports) { - channel.checkConf = channel.checkConf || p.getCheckConf(); - channel.checkAuth = channel.checkAuth || p.getCheckAuth(); + channel.checkConf = channel.checkConf || channel.isEnsureConf()|| p.getCheckConf(); + channel.checkAuth = channel.checkAuth || channel.isEnsureWeakAuth() || channel.isEnsureStrongAuth() || p.getCheckAuth(); } } + proverifAnalysis(tmap, nonConfChans, nonWeakAuthChans, nonStrongAuthChans); + + + + //System.out.println("Nonauth " + nonAuthChans); //System.out.println("NonConf " + nonConfChans); @@ -283,16 +328,16 @@ public class SecurityGenerationForTMAP implements Runnable { //newarch.renameMapping(tabName, tabName + "_" + name); for (TMLTask task : tmap.getTMLModeling().getTasks()) { - HashSet<String> tmp = new HashSet<String>(); - HashSet<String> tmp2 = new HashSet<String>(); + HashSet<TMLChannel> tmp = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp2 = new HashSet<TMLChannel>(); HashSet<TMLTask> tmp3 = new HashSet<TMLTask>(); HashSet<TMLTask> tmp4 = new HashSet<TMLTask>(); - HashSet<String> tmp5 = new HashSet<String>(); - HashSet<String> tmp6 = new HashSet<String>(); - HashSet<String> tmp7 = new HashSet<String>(); - HashSet<String> tmp8 = new HashSet<String>(); - HashSet<String> tmp9 = new HashSet<String>(); - HashSet<String> tmp10 = new HashSet<String>(); + HashSet<TMLChannel> tmp5 = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp6 = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp7 = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp8 = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp9 = new HashSet<TMLChannel>(); + HashSet<TMLChannel> tmp10 = new HashSet<TMLChannel>(); secInChannels.put(task, tmp); @@ -332,24 +377,26 @@ public class SecurityGenerationForTMAP implements Runnable { for (TMLChannel chan : tmlmodel.getChannels(task)) { //Origin and Destination ports can have different names. Therefore, we need to put both names in the list of channels to secure. - List<String> portNames = new ArrayList<String>(); - boolean nonConf = false; - boolean nonAuth = false; + /*List<String> portNames = new ArrayList<String>();*/ + boolean nonConf = nonConfChans.contains(chan); + boolean nonWeakAuth = nonWeakAuthChans.contains(chan); + boolean nonStrongAuth = nonStrongAuthChans.contains(chan); - if (chan.isBasicChannel()) { + + /*if (chan.isBasicChannel()) { portNames.add(chan.getOriginPort().getName()); portNames.add(chan.getDestinationPort().getName()); - if (nonConfChans.contains(chan.getOriginTask().getName().split("__")[1] + "__" + chan.getOriginPort().getName() + "_chData")) { + if (nonConfChans.contains(chan.getOriginTask().getTaskName() + "__" + chan.getOriginPort().getName() + "_chData")) { nonConf = true; TraceManager.addDev("SECGEN. non conf basic ch = true"); } - if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1] + "__" + title + "__" + chan.getDestinationPort().getName())) { + if (nonAuthChans.contains(chan.getDestinationTask().getTaskName() + "__" + title + "__" + chan.getDestinationPort().getName())) { nonAuth = true; } //When port names are different - if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1] + "__" + chan.getDestinationPort().getName())) { + if (nonAuthChans.contains(chan.getDestinationTask().getTaskName() + "__" + chan.getDestinationPort().getName())) { nonAuth = true; } } else { @@ -381,71 +428,66 @@ public class SecurityGenerationForTMAP implements Runnable { } //When port names are different - } + }*/ - String secName = chan.getName().split("__")[chan.getName().split("__").length - 1]; + String secName = chan.getChannelName(); - for (String chanName : portNames) { + //for (String chanName : portNames) { //Classify channels based on the type of security requirements and unsatisfied properties if (chan.isBasicChannel()) { if (chan.isEnsureConf() && nonConf) { toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask()); - if (chan.isEnsureStrongAuth()) { - if (!toSecureRev.get(chan.getDestinationTask()).contains(chan.getOriginTask())) { - toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask()); - } + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask()); } - if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) { + if (hsmTasks.contains(chan.getOriginTask())) { SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = "HSM_" + taskHSMMap.get(chan.getOriginTask().getName().replaceAll(title + "__", "")); - channelSecMap.put(chanName, secPattern); - if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName) && portInTask(chan.getOriginTask(), chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, chan.getOriginTask().getName().split("__")[1], HSMChannel.SENC); - hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask().getName().split("__")[1])).add(hsmchan); - hsmSecOutChannels.get(chan.getOriginTask()).add(chanName); - - if (chan.isEnsureStrongAuth()) { - nonceOutChannels.get(chan.getOriginTask()).add(chanName); - hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1]; + channelSecMap.put(chan, secPattern); + if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chan) && portInTask(chan.getOriginTask(), chan)) { + HSMChannel hsmchan = new HSMChannel(chan, chan.getOriginTask(), HSMChannel.SENC); + hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask())).add(hsmchan); + hsmSecOutChannels.get(chan.getOriginTask()).add(chan); + + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceOutChannels.get(chan.getOriginTask()).add(chan); + hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName(); } } } else { - if (!secOutChannels.get(chan.getOriginTask()).contains(chanName)) { - secOutChannels.get(chan.getOriginTask()).add(chanName); + if (!secOutChannels.get(chan.getOriginTask()).contains(chan)) { + secOutChannels.get(chan.getOriginTask()).add(chan); SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", ""); - channelSecMap.put(chanName, secPattern); - if (chan.isEnsureStrongAuth()) { - nonceOutChannels.get(chan.getOriginTask()).add(chanName); + channelSecMap.put(chan, secPattern); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceOutChannels.get(chan.getOriginTask()).add(chan); } } } - if (hsmTasks.contains(chan.getDestinationTask().getName().split("__")[1])) { - if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chanName) && portInTask(chan.getDestinationTask(), chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, chan.getDestinationTask().getName().split("__")[1], HSMChannel.DEC); - hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask().getName().split("__")[1])).add(hsmchan); - hsmSecInChannels.get(chan.getDestinationTask()).add(chanName); - if (chan.isEnsureStrongAuth()) { - nonceInChannels.get(chan.getDestinationTask()).add(chanName); - hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1]; + if (hsmTasks.contains(chan.getDestinationTask())) { + if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chan) && portInTask(chan.getDestinationTask(), chan)) { + HSMChannel hsmchan = new HSMChannel(chan, chan.getDestinationTask(), HSMChannel.DEC); + hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask())).add(hsmchan); + hsmSecInChannels.get(chan.getDestinationTask()).add(chan); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceInChannels.get(chan.getDestinationTask()).add(chan); + hsmchan.nonceName = + "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName(); } } } else { - if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) { - secInChannels.get(chan.getDestinationTask()).add(chanName); - if (chan.isEnsureStrongAuth()) { - nonceInChannels.get(chan.getDestinationTask()).add(chanName); + if (!secInChannels.get(chan.getDestinationTask()).contains(chan)) { + secInChannels.get(chan.getDestinationTask()).add(chan); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceInChannels.get(chan.getDestinationTask()).add(chan); } } } - } else if (chan.isEnsureWeakAuth() && nonAuth) { + } else if (chan.isEnsureWeakAuth() && nonWeakAuth) { toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask()); - if (chan.isEnsureStrongAuth()) { - if (!toSecureRev.get(chan.getDestinationTask()).contains(chan.getOriginTask())) { - toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask()); - } + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask()); /*} else { TMLChannel chantmp = oldmodel.getChannelByShortName("__"+chan.getName()); @@ -453,47 +495,45 @@ public class SecurityGenerationForTMAP implements Runnable { }*/ } - if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) { + if (hsmTasks.contains(chan.getOriginTask())) { SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = "HSM_" + taskHSMMap.get(chan.getOriginTask().getName().replaceAll(title + "__", "")); - channelSecMap.put(chanName, secPattern); - if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName) && portInTask(chan.getOriginTask(), chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, chan.getOriginTask().getName().split("__")[1], HSMChannel.MAC); - hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask().getName().split("__")[1])).add(hsmchan); - hsmSecOutChannels.get(chan.getOriginTask()).add(chanName); - - if (chan.isEnsureStrongAuth()) { - nonceOutChannels.get(chan.getOriginTask()).add(chanName); - hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1]; + channelSecMap.put(chan, secPattern); + if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chan) && portInTask(chan.getOriginTask(), chan)) { + HSMChannel hsmchan = new HSMChannel(chan, chan.getOriginTask(), HSMChannel.MAC); + hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask())).add(hsmchan); + hsmSecOutChannels.get(chan.getOriginTask()).add(chan); + + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceOutChannels.get(chan.getOriginTask()).add(chan); + hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName(); } } } else { - if (!macInChannels.get(chan.getOriginTask()).contains(chanName)) { - macOutChannels.get(chan.getOriginTask()).add(chanName); + if (!macInChannels.get(chan.getOriginTask()).contains(chan)) { + macOutChannels.get(chan.getOriginTask()).add(chan); SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", ""); - channelSecMap.put(chanName, secPattern); - if (chan.isEnsureStrongAuth()) { - nonceOutChannels.get(chan.getOriginTask()).add(chanName); + channelSecMap.put(chan, secPattern); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceOutChannels.get(chan.getOriginTask()).add(chan); } } } - if (hsmTasks.contains(chan.getDestinationTask().getName().split("__")[1])) { - if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chanName) && portInTask(chan.getDestinationTask(), chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, chan.getDestinationTask().getName().split("__")[1], HSMChannel.DEC); - hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask().getName().split("__")[1])).add(hsmchan); - hsmSecInChannels.get(chan.getDestinationTask()).add(chanName); - if (chan.isEnsureStrongAuth()) { - nonceInChannels.get(chan.getDestinationTask()).add(chanName); - hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1]; + if (hsmTasks.contains(chan.getDestinationTask())) { + if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chan) && portInTask(chan.getDestinationTask(), chan)) { + HSMChannel hsmchan = new HSMChannel(chan, chan.getDestinationTask(), HSMChannel.DEC); + hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask())).add(hsmchan); + hsmSecInChannels.get(chan.getDestinationTask()).add(chan); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceInChannels.get(chan.getDestinationTask()).add(chan); + hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName(); } } } else { - if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) { - secInChannels.get(chan.getDestinationTask()).add(chanName); - if (chan.isEnsureStrongAuth()) { - nonceInChannels.get(chan.getDestinationTask()).add(chanName); + if (!secInChannels.get(chan.getDestinationTask()).contains(chan)) { + secInChannels.get(chan.getDestinationTask()).add(chan); + if (chan.isEnsureStrongAuth() && nonStrongAuth) { + nonceInChannels.get(chan.getDestinationTask()).add(chan); } } } @@ -510,14 +550,13 @@ public class SecurityGenerationForTMAP implements Runnable { toSecureRev.get(dest).add(orig); } }*/ - if (hsmTasks.contains(orig.getName().split("__")[1])) { + if (hsmTasks.contains(orig)) { SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = "HSM_" + taskHSMMap.get(orig.getName().replaceAll(title + "__", "")); - channelSecMap.put(chanName, secPattern); - if (!hsmSecOutChannels.get(orig).contains(chanName) && portInTask(orig, chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, orig.getName().split("__")[1], HSMChannel.SENC); - hsmChannelMap.get(taskHSMMap.get(orig.getName().split("__")[1])).add(hsmchan); - hsmSecOutChannels.get(orig).add(chanName); + channelSecMap.put(chan, secPattern); + if (!hsmSecOutChannels.get(orig).contains(chan) && portInTask(orig, chan)) { + HSMChannel hsmchan = new HSMChannel(chan, orig, HSMChannel.SENC); + hsmChannelMap.get(taskHSMMap.get(orig)).add(hsmchan); + hsmSecOutChannels.get(orig).add(chan); /* if (chan.checkAuth && autoStrongAuth) { nonceOutChannels.get(orig).add(chanName); @@ -525,37 +564,34 @@ public class SecurityGenerationForTMAP implements Runnable { }*/ } } else { - if (!secOutChannels.get(orig).contains(chanName)) { - secOutChannels.get(orig).add(chanName); + if (!secOutChannels.get(orig).contains(chan)) { + secOutChannels.get(orig).add(chan); SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = orig.getName().replaceAll(title + "__", ""); - channelSecMap.put(chanName, secPattern); + channelSecMap.put(chan, secPattern); /* if (chan.checkAuth && autoStrongAuth) { nonceOutChannels.get(orig).add(chanName); }*/ } } - if (hsmTasks.contains(dest.getName().split("__")[1])) { - if (!hsmSecInChannels.get(dest).contains(chanName) && portInTask(dest, chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, dest.getName().split("__")[1], HSMChannel.DEC); - hsmChannelMap.get(taskHSMMap.get(dest.getName().split("__")[1])).add(hsmchan); - hsmSecInChannels.get(dest).add(chanName); + if (hsmTasks.contains(dest)) { + if (!hsmSecInChannels.get(dest).contains(chan) && portInTask(dest, chan)) { + HSMChannel hsmchan = new HSMChannel(chan, dest, HSMChannel.DEC); + hsmChannelMap.get(taskHSMMap.get(dest)).add(hsmchan); + hsmSecInChannels.get(dest).add(chan); /* if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); hsmchan.nonceName="nonce_" + dest.getName().split("__")[1] + "_" + orig.getName().split("__")[1]; }*/ } } else { - if (!secInChannels.get(dest).contains(chanName)) { - secInChannels.get(dest).add(chanName); /*if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); }*/ - } + secInChannels.get(dest).add(chan); } - } else if (chan.isEnsureWeakAuth() && nonAuth) { + } else if (chan.isEnsureWeakAuth() && nonWeakAuth) { toSecure.get(orig).add(dest); /* if (autoStrongAuth) { /* if (chan.getOriginTask().getReferenceObject() instanceof TMLCPrimitiveComponent && chan.getDestinationTask().getReferenceObject() instanceof TMLCPrimitiveComponent) {*/ @@ -569,14 +605,13 @@ public class SecurityGenerationForTMAP implements Runnable { } }*/ - if (hsmTasks.contains(orig.getName().split("__")[1])) { + if (hsmTasks.contains(orig)) { SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = "HSM_" + taskHSMMap.get(orig.getName().replaceAll(title + "__", "")); - channelSecMap.put(chanName, secPattern); - if (!hsmSecOutChannels.get(orig).contains(chanName) && portInTask(orig, chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, orig.getName().split("__")[1], HSMChannel.MAC); - hsmChannelMap.get(taskHSMMap.get(orig.getName().split("__")[1])).add(hsmchan); - hsmSecOutChannels.get(orig).add(chanName); + channelSecMap.put(chan, secPattern); + if (!hsmSecOutChannels.get(orig).contains(chan) && portInTask(orig, chan)) { + HSMChannel hsmchan = new HSMChannel(chan, orig, HSMChannel.MAC); + hsmChannelMap.get(taskHSMMap.get(orig)).add(hsmchan); + hsmSecOutChannels.get(orig).add(chan); /*if (autoStrongAuth) { nonceOutChannels.get(orig).add(chanName); @@ -584,48 +619,45 @@ public class SecurityGenerationForTMAP implements Runnable { }*/ } } else { - if (!macInChannels.get(orig).contains(chanName)) { - macOutChannels.get(orig).add(chanName); + if (!macInChannels.get(orig).contains(chan)) { + macOutChannels.get(orig).add(chan); SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); - secPattern.originTask = orig.getName().replaceAll(title + "__", ""); - channelSecMap.put(chanName, secPattern); + channelSecMap.put(chan, secPattern); /* if (autoStrongAuth) { nonceOutChannels.get(orig).add(chanName); }*/ } } - if (hsmTasks.contains(dest.getName().split("__")[1])) { + if (hsmTasks.contains(dest)) { - if (!hsmSecInChannels.get(dest).contains(chanName) && portInTask(dest, chanName)) { - HSMChannel hsmchan = new HSMChannel(chanName, dest.getName().split("__")[1], HSMChannel.DEC); - hsmChannelMap.get(taskHSMMap.get(dest.getName().split("__")[1])).add(hsmchan); - hsmSecInChannels.get(dest).add(chanName); + if (!hsmSecInChannels.get(dest).contains(chan) && portInTask(dest, chan)) { + HSMChannel hsmchan = new HSMChannel(chan, dest, HSMChannel.DEC); + hsmChannelMap.get(taskHSMMap.get(dest)).add(hsmchan); + hsmSecInChannels.get(dest).add(chan); /*if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); hsmchan.nonceName="nonce_" + dest.getName().split("__")[1] + "_" + orig.getName().split("__")[1]; }*/ } } else { - if (!secInChannels.get(dest).contains(chanName)) { - secInChannels.get(dest).add(chanName); /*if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); }*/ - } + secInChannels.get(dest).add(chan); } } } } } - } + //} } } // System.out.println("hsmchannelmap" + hsmChannelMap); - for (String chSec : channelSecMap.keySet()) { - TraceManager.addDev("secChannelMap: key=" + chSec + " value= " + channelSecMap.get(chSec).name); + for (TMLChannel chSec : channelSecMap.keySet()) { + TraceManager.addDev("secChannelMap: key=" + chSec + " value= " + channelSecMap.get(chSec).getName()); } for (TMLTask tk : macOutChannels.keySet()) { TraceManager.addDev("macoutchans: key= " + tk.getName() + " value= " + macOutChannels.get(tk)); @@ -670,13 +702,13 @@ public class SecurityGenerationForTMAP implements Runnable { for (TMLTask task : tmlmodel.getTasks()) { for (String compName : selectedCPUTasks.get(cpuName)) { - if (task.getName().replaceAll(title + "__", "").equals(compName)) { + if (task.getTaskName().equals(compName)) { comps.add(task); break; } } } - if (comps.size() == 0) { + if (comps.isEmpty()) { //System.out.println("No Components found"); continue; } @@ -690,16 +722,16 @@ public class SecurityGenerationForTMAP implements Runnable { ChannelData chd = new ChannelData("startHSM_" + cpuName, false, false); hsmChans.add(chd); for (HSMChannel hsmChan : hsmChannelMap.get(cpuName)) { - if (!hsmChan.task.equals(comp.getName().replaceAll(title + "__", ""))) { + if (!hsmChan.task.equals(comp)) { continue; } - if (!channelIndexMap.containsKey(hsmChan.name)) { - channelIndexMap.put(hsmChan.name, channelIndex); + if (!channelIndexMap.containsKey(hsmChan.channel)) { + channelIndexMap.put(hsmChan.channel, channelIndex); channelIndex++; } - chd = new ChannelData("data_" + hsmChan.name + "_" + hsmChan.task, false, true); + chd = new ChannelData("data_" + hsmChan.channel.getChannelName() + "_" + hsmChan.task.getTaskName(), false, true); hsmChans.add(chd); - chd = new ChannelData("retData_" + hsmChan.name + "_" + hsmChan.task, true, true); + chd = new ChannelData("retData_" + hsmChan.channel.getChannelName() + "_" + hsmChan.task.getTaskName(), true, true); hsmChans.add(chd); } for (ChannelData hsmChan : hsmChans) { @@ -800,19 +832,20 @@ public class SecurityGenerationForTMAP implements Runnable { } } if (addChan) { - TMLChannel channel = new TMLChannel("nonceCh" + task.getName().split("__")[1] + "_" + task2.getName().split("__")[1], task.getReferenceObject()); + TMLChannel channel = new TMLChannel("nonceCh" + task.getTaskName() + "_" + + task2.getTaskName(), task.getReferenceObject()); if (tmlmodel.getChannelByName(channel.getName()) == null) { - if (hsmTasks.contains(task.getName().replaceAll(title + "__", ""))) { - channel.setOriginTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", "")))); - tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", ""))).addWriteTMLChannel(channel); + if (hsmTasks.contains(task)) { + channel.setOriginTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task))); + tmap.getTaskByName("HSM_" + taskHSMMap.get(task)).addWriteTMLChannel(channel); } else { channel.setOriginTask(task); task.addWriteTMLChannel(channel); } - if (hsmTasks.contains(task2.getName().replaceAll(title + "__", ""))) { - channel.setDestinationTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", "")))); - tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", ""))).addReadTMLChannel(channel); + if (hsmTasks.contains(task2)) { + channel.setDestinationTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2))); + tmap.getTaskByName("HSM_" + taskHSMMap.get(task2)).addReadTMLChannel(channel); } else { channel.setDestinationTask(task2); task2.addReadTMLChannel(channel); @@ -826,8 +859,12 @@ public class SecurityGenerationForTMAP implements Runnable { } } - for (String cpuName : selectedCPUTasks.keySet()) { - buildHSMActivityDiagram(cpuName); + for (String cpuName : selectedCPUTasks.keySet()) { + try { + buildHSMActivityDiagram(cpuName); + } catch (TMLCheckingError e) { + throw new RuntimeException(e); + } //Add a private bus to Hardware Accelerator with the task for hsm //Find the CPU the task is mapped to @@ -906,7 +943,7 @@ public class SecurityGenerationForTMAP implements Runnable { // TraceManager.addDev("Adding nonces to " + task.getName()); for (TMLTask task2 : toSecureRev.get(task)) { - TMLChannel channel = tmlmodel.getChannelByName("nonceCh" + task.getName().split("__")[1] + "_" + task2.getName().split("__")[1]); + TMLChannel channel = tmlmodel.getChannelByName("nonceCh" + task.getTaskName() + "_" + task2.getTaskName()); List<TMLChannel> chans, chans2; @@ -928,8 +965,8 @@ public class SecurityGenerationForTMAP implements Runnable { } } - if (hsmTasks.contains(task.getName().replaceAll(title + "__", ""))) { - chans = tmlmodel.getChannelsFromMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", "")))); + if (hsmTasks.contains(task)) { + chans = tmlmodel.getChannelsFromMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task))); for (TMLChannel chan : chans) { for (HwCommunicationNode mappedNode : tmap.getAllCommunicationNodesOfChannel(chan)) { if (!(mappedNode instanceof HwMemory)) { @@ -962,8 +999,8 @@ public class SecurityGenerationForTMAP implements Runnable { } } - if (hsmTasks.contains(task2.getName().replaceAll(title + "__", ""))) { - chans2 = tmlmodel.getChannelsToMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", "")))); + if (hsmTasks.contains(task2)) { + chans2 = tmlmodel.getChannelsToMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2))); for (TMLChannel chan2 : chans2) { for (HwCommunicationNode mappedNode : tmap.getAllCommunicationNodesOfChannel(chan2)) { if (!(mappedNode instanceof HwMemory)) { @@ -994,22 +1031,14 @@ public class SecurityGenerationForTMAP implements Runnable { //For each occurence of a write channel operator, add encryption/nonces before it - for (String channel : secOutChannels.get(task)) { + for (TMLChannel channel : secOutChannels.get(task)) { Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel); - if (tmlc == null) { - //Find by origin port instead - tmlc = tmlmodel.getChannelByOriginPortName(channel); - } - if (tmlc == null) { - continue; - } //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator for (TMLActivityElement elem : taskAD.getElements()) { if (elem instanceof TMLWriteChannel) { TMLWriteChannel writeChannel = (TMLWriteChannel) elem; for (int i = 0; i < writeChannel.getNbOfChannels(); i++) { - if (writeChannel.getChannel(i).getName().equals(tmlc.getName()) && writeChannel.securityPattern == null) { + if (writeChannel.getChannel(i).getName().equals(channel.getName()) && writeChannel.getSecurityPattern() == null) { if (fromStart != null) { channelInstances.add(elem); } @@ -1020,33 +1049,30 @@ public class SecurityGenerationForTMAP implements Runnable { for (TMLActivityElement elem : channelInstances) { //Add encryption operator - TMLExecC encC = new TMLExecC(channelSecMap.get(channel).name, taskAD.getReferenceObject()); - encC.securityPattern = new SecurityPattern(channelSecMap.get(channel)); - encC.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - encC.setAction(Integer.toString(channelSecMap.get(channel).encTime)); + TMLExecC encC = new TMLExecC(channelSecMap.get(channel).getName(), taskAD.getReferenceObject()); + encC.setSecurityPattern(channelSecMap.get(channel)); + encC.setAction(Integer.toString(channelSecMap.get(channel).getEncTime())); tmlmodel.addSecurityPattern(channelSecMap.get(channel)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(channel))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).add(task); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(channel), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(channel), listTask); } TMLActivityElement prevElem = taskAD.getPrevious(elem); if (nonceOutChannels.get(task).contains(channel)) { - SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); - if (tmlc != null) { - encC.securityPattern.nonce = secPatternNonce.getName(); - } + SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); + encC.getSecurityPattern().setNonce(secPatternNonce.getName()); boolean addNewReadNonce = true; for (TMLActivityElement elemT : taskAD.getElements()) { if (elemT instanceof TMLReadChannel) { TMLReadChannel readElem = (TMLReadChannel) elemT; - if (readElem.securityPattern != null) { - if(readElem.securityPattern.getName().equals(secPatternNonce.getName())) { + if (readElem.getSecurityPattern() != null) { + if(readElem.getSecurityPattern().getName().equals(secPatternNonce.getName())) { addNewReadNonce = false; break; } @@ -1058,25 +1084,24 @@ public class SecurityGenerationForTMAP implements Runnable { TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject()); //System.out.println("tmlc " + tmlc); //System.out.println("Checking "+ tmlc.getDestinationTask() + " " + tmlc.getOriginTask()); - List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask()); + List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask()); - if (matches.size() > 0) { - rd.setName(matches.get(0).getName().replaceAll(title + "__", "")); + if (!matches.isEmpty()) { + rd.setName(matches.get(0).getChannelName()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } } else { - rd.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]); + rd.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } } - secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(title + "__", ""); - rd.securityPattern = secPatternNonce; + rd.setSecurityPattern(secPatternNonce); rd.setNbOfSamples("1"); TMLActivityElement nextFirst = taskAD.getFirst().getNextElement(0); taskAD.getFirst().setNewNext(nextFirst, rd); @@ -1096,8 +1121,8 @@ public class SecurityGenerationForTMAP implements Runnable { if (elemAC instanceof TMLWriteChannel) { TMLWriteChannel wChannel = (TMLWriteChannel) elemAC; for (int i=0; i < wChannel.getNbOfChannels(); i++) { - if (channel.equals(wChannel.getChannel(i).getName().replaceAll(title + "__", "")) && wChannel.securityPattern == null) { - wChannel.securityPattern = channelSecMap.get(channel); + if (channel.equals(wChannel.getChannel(i)) && wChannel.getSecurityPattern() == null) { + wChannel.setSecurityPattern(channelSecMap.get(channel)); // wChannel.setEncForm(true); } } @@ -1106,22 +1131,14 @@ public class SecurityGenerationForTMAP implements Runnable { } } - for (String channel : macOutChannels.get(task)) { + for (TMLChannel channel : macOutChannels.get(task)) { //Add MAC before writechannel - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel); - //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator - if (tmlc == null) { - tmlc = tmlmodel.getChannelByOriginPortName(channel); - } - if (tmlc == null) { - continue; - } Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); for (TMLActivityElement elem : taskAD.getElements()) { if (elem instanceof TMLWriteChannel) { TMLWriteChannel writeChannel = (TMLWriteChannel) elem; for (int i=0; i < writeChannel.getNbOfChannels(); i++) { - if (writeChannel.getChannel(i).getName().equals(tmlc.getName()) && writeChannel.securityPattern == null) { + if (writeChannel.getChannel(i).getName().equals(channel.getName()) && writeChannel.getSecurityPattern() == null) { fromStart = taskAD.getPrevious(elem); if (fromStart != null) { channelInstances.add(elem); @@ -1132,34 +1149,31 @@ public class SecurityGenerationForTMAP implements Runnable { } for (TMLActivityElement elem : channelInstances) { //SecurityPattern secPattern = new SecurityPattern(channelSecMap.get(channel), SecurityPattern.MAC_PATTERN, overhead, overhead, encComp, decComp, "", "", ""); - channelSecMap.get(channel).type = SecurityPattern.MAC_PATTERN; - TMLExecC encC = new TMLExecC(channelSecMap.get(channel).name, taskAD.getReferenceObject()); - encC.securityPattern = new SecurityPattern(channelSecMap.get(channel)); - encC.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - encC.setAction(Integer.toString(channelSecMap.get(channel).encTime)); + channelSecMap.get(channel).setType(SecurityPattern.MAC_PATTERN); + TMLExecC encC = new TMLExecC(channelSecMap.get(channel).getName(), taskAD.getReferenceObject()); + encC.setSecurityPattern(channelSecMap.get(channel)); + encC.setAction(Integer.toString(channelSecMap.get(channel).getEncTime())); tmlmodel.addSecurityPattern(channelSecMap.get(channel)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(channel))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).add(task); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(channel), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(channel), listTask); } TMLActivityElement prevElem = taskAD.getPrevious(elem); if (nonceOutChannels.get(task).contains(channel)) { - SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); - if (tmlc != null) { - encC.securityPattern.nonce = secPatternNonce.getName(); - } + SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); + encC.getSecurityPattern().setNonce(secPatternNonce.getName()); boolean addNewReadNonce = true; for (TMLActivityElement elemT : taskAD.getElements()) { if (elemT instanceof TMLReadChannel) { TMLReadChannel readElem = (TMLReadChannel) elemT; - if (readElem.securityPattern != null) { - if(readElem.securityPattern.getName().equals(secPatternNonce.getName())) { + if (readElem.getSecurityPattern() != null) { + if(readElem.getSecurityPattern().getName().equals(secPatternNonce.getName())) { addNewReadNonce = false; break; } @@ -1170,24 +1184,23 @@ public class SecurityGenerationForTMAP implements Runnable { //If we need to receive a nonce TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject()); //Receive any nonces if ensuring authenticity - List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask()); - if (matches.size() > 0) { - rd.setName(matches.get(0).getName().replaceAll(title + "__", "")); + List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask()); + if (!matches.isEmpty()) { + rd.setName(matches.get(0).getChannelName()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } } else { - rd.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]); + rd.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } } - secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(title + "__", ""); - rd.securityPattern = secPatternNonce; + rd.setSecurityPattern(secPatternNonce); rd.setNbOfSamples("1"); TMLActivityElement nextFirst = taskAD.getFirst().getNextElement(0); taskAD.getFirst().setNewNext(nextFirst, rd); @@ -1206,8 +1219,8 @@ public class SecurityGenerationForTMAP implements Runnable { if (elemA instanceof TMLWriteChannel) { TMLWriteChannel wChannel = (TMLWriteChannel) elemA; for (int i=0; i < wChannel.getNbOfChannels(); i++) { - if (channel.equals(wChannel.getChannel(i).getName().replaceAll(title + "__", "")) && wChannel.securityPattern == null) { - wChannel.securityPattern = channelSecMap.get(channel); + if (channel.equals(wChannel.getChannel(i)) && wChannel.getSecurityPattern() == null) { + wChannel.setSecurityPattern(channelSecMap.get(channel)); // wChannel.setEncForm(true); } } @@ -1215,13 +1228,13 @@ public class SecurityGenerationForTMAP implements Runnable { } } } - for (String channel : hsmSecOutChannels.get(task)) { + for (TMLChannel channel : hsmSecOutChannels.get(task)) { Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); for (TMLActivityElement elem : taskAD.getElements()) { if (elem instanceof TMLWriteChannel) { TMLWriteChannel writeChannel = (TMLWriteChannel) elem; for (int i=0; i < writeChannel.getNbOfChannels(); i++) { - if (writeChannel.getChannel(i).getName().replaceAll(title + "__", "").equals(channel) && writeChannel.securityPattern == null) { + if (writeChannel.getChannel(i).equals(channel) && writeChannel.getSecurityPattern() == null) { fromStart = taskAD.getPrevious(elem); if (fromStart != null) { channelInstances.add(elem); @@ -1232,20 +1245,12 @@ public class SecurityGenerationForTMAP implements Runnable { } for (TMLActivityElement chan : channelInstances) { TMLWriteChannel writeChannel = (TMLWriteChannel) chan; - String chanName = writeChannel.getChannel(0).getName().replaceAll(title + "__", ""); - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + chanName); - - if (tmlc == null) { - tmlc = tmlmodel.getChannelByOriginPortName(channel); - } - if (tmlc == null) { - continue; - } - writeChannel.securityPattern = channelSecMap.get(channel); + //String chanName = writeChannel.getChannel(0).getName().replaceAll(title + "__", ""); + writeChannel.setSecurityPattern(channelSecMap.get(channel)); // writeChannel.setEncForm(true); fromStart = taskAD.getPrevious(chan); - TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject()); + TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task), taskAD.getReferenceObject()); TMLRequest req = tmlmodel.getRequestByName(reqSend.getName()); if (req != null) { @@ -1253,15 +1258,16 @@ public class SecurityGenerationForTMAP implements Runnable { } if (reqSend.getNbOfParams() > 0) { - reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0); + reqSend.setParam(Integer.toString(channelIndexMap.get(channel)), 0); } else { - reqSend.addParam(Integer.toString(channelIndexMap.get(chanName))); + reqSend.addParam(Integer.toString(channelIndexMap.get(channel))); } fromStart.setNewNext(chan, reqSend); taskAD.addElement(reqSend); //Add write channel operator - TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); + TMLWriteChannel wr = new TMLWriteChannel("data_" + channel.getChannelName() + "_" + task.getTaskName(), + taskAD.getReferenceObject()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { @@ -1317,13 +1323,14 @@ public class SecurityGenerationForTMAP implements Runnable { } */ //Read channel operator to receive hsm data - TMLReadChannel rd2 = new TMLReadChannel("retData_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); + TMLReadChannel rd2 = new TMLReadChannel("retData_" + channel.getChannelName() + "_" + task.getTaskName(), + taskAD.getReferenceObject()); if (tmlmodel.getChannelByName(rd2.getName()) != null) { rd2.addChannel(tmlmodel.getChannelByName(rd2.getName())); } else if (tmlmodel.getChannelByShortName(rd2.getName()) != null) { rd2.addChannel(tmlmodel.getChannelByShortName(rd2.getName())); } - rd2.securityPattern = channelSecMap.get(chanName); + rd2.setSecurityPattern(channelSecMap.get(channel)); rd2.setNbOfSamples("1"); taskAD.addElement(rd2); @@ -1333,7 +1340,7 @@ public class SecurityGenerationForTMAP implements Runnable { } } - for (String channel : hsmSecInChannels.get(task)) { + for (TMLChannel channel : hsmSecInChannels.get(task)) { //System.out.println("Checking hsmsecinchannel " + channel + " " + task.getName()); Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); //TGConnector conn = new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>()); @@ -1342,7 +1349,7 @@ public class SecurityGenerationForTMAP implements Runnable { if (elem instanceof TMLReadChannel) { TMLReadChannel readChannel = (TMLReadChannel) elem; for (int i=0; i<readChannel.getNbOfChannels(); i++) { - if (readChannel.getChannel(i).getName().replaceAll(title + "__", "").equals(channel) && readChannel.securityPattern == null) { + if (readChannel.getChannel(i).equals(channel) && readChannel.getSecurityPattern() == null) { fromStart = taskAD.getPrevious(elem); if (fromStart != null) { channelInstances.add(elem); @@ -1354,42 +1361,37 @@ public class SecurityGenerationForTMAP implements Runnable { //System.out.println("matches " + channelInstances); for (TMLActivityElement chan : channelInstances) { TMLReadChannel readChannel = (TMLReadChannel) chan; - String chanName = readChannel.getChannel(0).getName().replaceAll(title + "__", ""); - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + chanName); - if (tmlc == null) { - tmlc = tmlmodel.getChannelByDestinationPortName(channel); - } - if (tmlc == null) { - continue; - } - readChannel.securityPattern = channelSecMap.get(chanName); + //String chanName = readChannel.getChannel(0).getName().replaceAll(title + "__", ""); + + readChannel.setSecurityPattern(channelSecMap.get(channel)); // readChannel.setEncForm(true); fromStart = taskAD.getPrevious(chan); TMLActivityElement nextReadCh = chan.getNextElement(0); - TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject()); + TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task), taskAD.getReferenceObject()); TMLRequest req = tmlmodel.getRequestByName(reqSend.getName()); if (req != null) { reqSend.setRequest(req); } if (reqSend.getNbOfParams() > 0) { - reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0); + reqSend.setParam(Integer.toString(channelIndexMap.get(channel)), 0); } else { - reqSend.addParam(Integer.toString(channelIndexMap.get(chanName))); + reqSend.addParam(Integer.toString(channelIndexMap.get(channel))); } taskAD.addElement(reqSend); fromStart.setNewNext(chan, reqSend); reqSend.addNext(chan); //Add write channel operator - TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); + TMLWriteChannel wr = new TMLWriteChannel("data_" + channel.getChannelName() + "_" + task.getTaskName(), + taskAD.getReferenceObject()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } - wr.securityPattern = channelSecMap.get(chanName); + wr.setSecurityPattern(channelSecMap.get(channel)); wr.setNbOfSamples("1"); taskAD.addElement(wr); @@ -1467,7 +1469,8 @@ public class SecurityGenerationForTMAP implements Runnable { //Add read channel operator - TMLReadChannel rd = new TMLReadChannel("retData_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); + TMLReadChannel rd = new TMLReadChannel("retData_" + channel.getChannelName() + "_" + task.getTaskName(), + taskAD.getReferenceObject()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { @@ -1483,22 +1486,16 @@ public class SecurityGenerationForTMAP implements Runnable { } } - for (String channel : macInChannels.get(task)) { + for (TMLChannel channel : macInChannels.get(task)) { //Add decryptmac after readchannel Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); //Find read channel operator - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel); - if (tmlc == null) { - tmlc = tmlmodel.getChannelByDestinationPortName(channel); - } - if (tmlc == null) { - continue; - } + for (TMLActivityElement elem : taskAD.getElements()) { if (elem instanceof TMLReadChannel) { TMLReadChannel readChannel = (TMLReadChannel) elem; for (int i = 0; i<readChannel.getNbOfChannels(); i++) { - if (readChannel.getChannel(i).getName().equals(tmlc.getName()) && readChannel.securityPattern == null) { + if (readChannel.getChannel(i).getName().equals(channel.getName()) && readChannel.getSecurityPattern() == null) { fromStart = taskAD.getPrevious(elem); if (fromStart != null) { channelInstances.add(elem); @@ -1511,20 +1508,19 @@ public class SecurityGenerationForTMAP implements Runnable { fromStart = taskAD.getPrevious(elem); TMLReadChannel readChannel = (TMLReadChannel) elem; - readChannel.securityPattern = channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")); + readChannel.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); //Create nonce and send it if (nonceInChannels.get(task).contains(channel)) { - TMLExecC nonce = new TMLExecC("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], taskAD.getReferenceObject()); + TMLExecC nonce = new TMLExecC("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), taskAD.getReferenceObject()); SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); - nonce.securityPattern = secNonce; - nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - nonce.setAction(Integer.toString(secNonce.encTime)); + nonce.setSecurityPattern(secNonce); + nonce.setAction(Integer.toString(secNonce.getEncTime())); boolean addNewExecCNonce = true; for (TMLActivityElement elemT : taskAD.getElements()) { if (elemT instanceof TMLExecC) { TMLExecC exeCElem = (TMLExecC) elemT; - if (exeCElem.securityPattern != null) { - if(exeCElem.securityPattern.getName().equals(secNonce.getName())) { + if (exeCElem.getSecurityPattern() != null) { + if(exeCElem.getSecurityPattern().getName().equals(secNonce.getName())) { addNewExecCNonce = false; break; } @@ -1534,14 +1530,14 @@ public class SecurityGenerationForTMAP implements Runnable { if (addNewExecCNonce) { //Create a nonce operator and a write channel operator tmlmodel.addSecurityPattern(secNonce); - if (tmlmodel.securityTaskMap.containsKey(secNonce)) { - if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) { - tmlmodel.securityTaskMap.get(secNonce).add(task); + if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) { + if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) { + tmlmodel.getSecurityTaskMap().get(secNonce).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(secNonce, listTask); + tmlmodel.getSecurityTaskMap().put(secNonce, listTask); } TMLActivityElement first = taskAD.getFirst(); TMLActivityElement nextFirst = first.getNextElement(0); @@ -1550,27 +1546,26 @@ public class SecurityGenerationForTMAP implements Runnable { TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject()); //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver //Find matching channels - List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask()); + List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask()); - if (matches.size() > 0) { - wr.setName(matches.get(0).getName().replaceAll(title + "__", "")); + if (!matches.isEmpty()) { + wr.setName(matches.get(0).getChannelName()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } } else { - wr.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]); + wr.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } } - secNonce.originTask = wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", ""); //send the nonce along the channel wr.setNbOfSamples("1"); - wr.securityPattern = secNonce; + wr.setSecurityPattern(secNonce); taskAD.addElement(wr); nonce.addNext(wr); wr.addNext(nextFirst); @@ -1578,20 +1573,24 @@ public class SecurityGenerationForTMAP implements Runnable { } //Add decryption operator if it does not already exist - TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")).name, taskAD.getReferenceObject()); - dec.securityPattern = new SecurityPattern(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))); - dec.setAction(Integer.toString(dec.securityPattern.encTime)); - tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))).add(task); + TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0)).getName(), taskAD.getReferenceObject()); + dec.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); + dec.setAction(Integer.toString(dec.getSecurityPattern().getEncTime())); + tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(readChannel.getChannel(0)))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(readChannel.getChannel(0)), listTask); + } + try { + dec.setDecryptionProcess(true); + } catch (TMLCheckingError e) { + throw new RuntimeException(e); } - dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); taskAD.addElement(dec); dec.addNext(readChannel.getNextElement(0)); readChannel.setNewNext(readChannel.getNextElement(0), dec); @@ -1600,8 +1599,8 @@ public class SecurityGenerationForTMAP implements Runnable { if (elemA instanceof TMLReadChannel) { TMLReadChannel rdOfSameCh = (TMLReadChannel) elemA; for (int i=0; i<rdOfSameCh.getNbOfChannels(); i++) { - if (channel.equals(rdOfSameCh.getChannel(i).getName().replaceAll(title + "__", "")) && rdOfSameCh.securityPattern == null) { - rdOfSameCh.securityPattern = channelSecMap.get(channel); + if (channel.equals(rdOfSameCh.getChannel(i)) && rdOfSameCh.getSecurityPattern() == null) { + rdOfSameCh.setSecurityPattern(channelSecMap.get(channel)); // rdOfSameCh.setEncForm(true); } } @@ -1609,22 +1608,16 @@ public class SecurityGenerationForTMAP implements Runnable { } } } - for (String channel : secInChannels.get(task)) { + for (TMLChannel channel : secInChannels.get(task)) { TraceManager.addDev("securing channel " + channel); //Find read channel operator - TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel); - if (tmlc == null) { - tmlc = tmlmodel.getChannelByDestinationPortName(channel); - } - if (tmlc == null) { - continue; - } + HashSet<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>(); for (TMLActivityElement elem : taskAD.getElements()) { if (elem instanceof TMLReadChannel) { TMLReadChannel readChannel = (TMLReadChannel) elem; for (int i=0; i<readChannel.getNbOfChannels(); i++) { - if (readChannel.getChannel(i).getName().equals(tmlc.getName()) && readChannel.securityPattern == null) { + if (readChannel.getChannel(i).getName().equals(channel.getName()) && readChannel.getSecurityPattern() == null) { fromStart = taskAD.getPrevious(elem); if (fromStart != null) { channelInstances.add(elem); @@ -1639,17 +1632,16 @@ public class SecurityGenerationForTMAP implements Runnable { fromStart = taskAD.getPrevious(elem); if (nonceInChannels.get(task).contains(channel)) { //Create a nonce operator and a write channel operator - TMLExecC nonce = new TMLExecC("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], taskAD.getReferenceObject()); + TMLExecC nonce = new TMLExecC("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), taskAD.getReferenceObject()); SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); - nonce.securityPattern = secNonce; - nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - nonce.setAction(Integer.toString(secNonce.encTime)); + nonce.setSecurityPattern(secNonce); + nonce.setAction(Integer.toString(secNonce.getEncTime())); boolean addNewExecCNonce = true; for (TMLActivityElement elemT : taskAD.getElements()) { if (elemT instanceof TMLExecC) { TMLExecC exeCElem = (TMLExecC) elemT; - if (exeCElem.securityPattern != null) { - if(exeCElem.securityPattern.getName().equals(secNonce.getName())) { + if (exeCElem.getSecurityPattern() != null) { + if(exeCElem.getSecurityPattern().getName().equals(secNonce.getName())) { addNewExecCNonce = false; break; } @@ -1658,14 +1650,14 @@ public class SecurityGenerationForTMAP implements Runnable { } if (addNewExecCNonce) { tmlmodel.addSecurityPattern(secNonce); - if (tmlmodel.securityTaskMap.containsKey(secNonce)) { - if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) { - tmlmodel.securityTaskMap.get(secNonce).add(task); + if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) { + if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) { + tmlmodel.getSecurityTaskMap().get(secNonce).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(secNonce, listTask); + tmlmodel.getSecurityTaskMap().put(secNonce, listTask); } taskAD.addElement(nonce); @@ -1675,27 +1667,27 @@ public class SecurityGenerationForTMAP implements Runnable { TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject()); //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver //Find matching channels - List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask()); + List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask()); - if (matches.size() > 0) { - wr.setName(matches.get(0).getName().replaceAll(title + "__", "")); + if (!matches.isEmpty()) { + wr.setName(matches.get(0).getChannelName()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } } else { - wr.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]); + wr.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } } - secNonce.originTask = wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", ""); + //secNonce.setOriginTask(wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", "")); //send the nonce along the channel wr.setNbOfSamples("1"); - wr.securityPattern = secNonce; + wr.setSecurityPattern(secNonce); taskAD.addElement(wr); nonce.addNext(wr); wr.addNext(nextFirst); @@ -1703,24 +1695,27 @@ public class SecurityGenerationForTMAP implements Runnable { } //Now add the decrypt operator - String readChShortName = readChannel.getChannel(0).getName().replaceAll(title + "__", ""); - readChannel.securityPattern = channelSecMap.get(readChShortName); + readChannel.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); // readChannel.setEncForm(true); //Add decryption operator if it does not already exist - TMLExecC dec = new TMLExecC(channelSecMap.get(readChShortName).name, taskAD.getReferenceObject()); - dec.securityPattern = new SecurityPattern(channelSecMap.get(readChShortName)); - dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); - dec.setAction(Integer.toString(channelSecMap.get(readChShortName).encTime)); - - tmlmodel.addSecurityPattern(channelSecMap.get(readChShortName)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(readChShortName))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(readChShortName)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(readChShortName)).add(task); + TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0)).getName(), taskAD.getReferenceObject()); + dec.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); + try { + dec.setDecryptionProcess(true); + } catch (TMLCheckingError e) { + throw new RuntimeException(e); + } + dec.setAction(Integer.toString(channelSecMap.get(readChannel.getChannel(0)).getEncTime())); + + tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0))); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(readChannel.getChannel(0)))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(readChShortName), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(readChannel.getChannel(0)), listTask); } taskAD.addElement(dec); @@ -1731,9 +1726,8 @@ public class SecurityGenerationForTMAP implements Runnable { if (elemA instanceof TMLReadChannel) { TMLReadChannel rdOfSameCh = (TMLReadChannel) elemA; for (int i=0; i < rdOfSameCh.getNbOfChannels(); i++) { - String readSameChShortName = rdOfSameCh.getChannel(i).getName().replaceAll(title + "__", ""); - if (channel.equals(readSameChShortName) && rdOfSameCh.securityPattern == null) { - rdOfSameCh.securityPattern = channelSecMap.get(readSameChShortName); + if (channel.equals(rdOfSameCh.getChannel(i)) && rdOfSameCh.getSecurityPattern() == null) { + rdOfSameCh.setSecurityPattern(channelSecMap.get(rdOfSameCh.getChannel(i))); // rdOfSameCh.setEncForm(true); } } @@ -1745,7 +1739,7 @@ public class SecurityGenerationForTMAP implements Runnable { return; } - public void buildHSMActivityDiagram(String cpuName) { + public void buildHSMActivityDiagram(String cpuName) throws TMLCheckingError { TMLModeling<?> tmlmodel = tmap.getTMLModeling(); //Build HSM Activity diagram TMLTask task = tmap.getTaskByName("HSM_" + cpuName); @@ -1762,7 +1756,7 @@ public class SecurityGenerationForTMAP implements Runnable { //fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); - if (hsmChannelMap.get(cpuName).size() == 0) { + if (hsmChannelMap.get(cpuName).isEmpty()) { TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject()); taskAD.addElement(stop); //Connect stop and start @@ -1789,21 +1783,21 @@ public class SecurityGenerationForTMAP implements Runnable { for (HSMChannel ch : hsmChannelMap.get(cpuName)) { if (!ch.nonceName.equals("")) { if (ch.secType == HSMChannel.DEC) { - TMLExecC nonce = new TMLExecC("nonce_" + ch.task + "_" + tmlmodel.getChannelByShortName(ch.name).getOriginTask().getName().replaceAll(appName + "__", ""), taskAD.getReferenceObject()); + TMLExecC nonce = new TMLExecC("nonce_" + ch.task.getTaskName() + "_" + ch.channel.getOriginTask().getTaskName(), + taskAD.getReferenceObject()); SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); - nonce.securityPattern = secNonce; - nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - nonce.setAction(Integer.toString(secNonce.encTime)); + nonce.setSecurityPattern(secNonce); + nonce.setAction(Integer.toString(secNonce.getEncTime())); if (!writeNonces.contains(nonce.getName())) { tmlmodel.addSecurityPattern(secNonce); - if (tmlmodel.securityTaskMap.containsKey(secNonce)) { - if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) { - tmlmodel.securityTaskMap.get(secNonce).add(task); + if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) { + if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) { + tmlmodel.getSecurityTaskMap().get(secNonce).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(secNonce, listTask); + tmlmodel.getSecurityTaskMap().put(secNonce, listTask); } taskAD.addElement(nonce); @@ -1814,35 +1808,37 @@ public class SecurityGenerationForTMAP implements Runnable { lastCurElem.addNext(nonce); } TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject()); - wr.setName("nonceCh" + ch.task + "_" + tmlmodel.getChannelByShortName(ch.name).getOriginTask().getName().split("__")[1]); + wr.setName("nonceCh" + ch.task.getTaskName() + "_" + ch.channel.getOriginTask().getTaskName()); if (tmlmodel.getChannelByName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByName(wr.getName())); } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } - secNonce.originTask = task.getName(); + //secNonce.setOriginTask(task.getName()); //send the nonce along the channel wr.setNbOfSamples("1"); - wr.securityPattern = secNonce; + wr.setSecurityPattern(secNonce); taskAD.addElement(wr); nonce.addNext(wr); lastCurElem = wr; writeNonces.add(nonce.getName()); } } else { - SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlmodel.getChannelByShortName(ch.name).getDestinationTask().getName().replaceAll(appName + "__", "") + "_" + ch.task, SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); + SecurityPattern secPatternNonce = + new SecurityPattern("nonce_" + ch.channel.getDestinationTask().getTaskName() + "_" + ch.task.getTaskName(), + SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); if (!readNonces.contains(secPatternNonce.getName())) { //If we need to receive a nonce TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject()); //Receive any nonces if ensuring authenticity - rd.setName("nonceCh" + tmlmodel.getChannelByShortName(ch.name).getDestinationTask().getName().replaceAll(appName + "__", "") + "_" + ch.task); + rd.setName("nonceCh" + ch.channel.getDestinationTask().getTaskName() + "_" + ch.task.getTaskName()); if (tmlmodel.getChannelByName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByName(rd.getName())); } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } - secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", ""); - rd.securityPattern = secPatternNonce; + //secPatternNonce.setOriginTask(rd.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", "")); + rd.setSecurityPattern(secPatternNonce); rd.setNbOfSamples("1"); if (lastCurElem.getNbNext() > 0) { lastCurElem.setNewNext(lastCurElem.getNextElement(0), rd); @@ -1883,7 +1879,7 @@ public class SecurityGenerationForTMAP implements Runnable { choice.addGuard(""); choice.addNext(choice2); } - choice2.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]"); + choice2.addGuard("[channelIndex==" + channelIndexMap.get(ch.channel) + "]"); if (choice.getGuard(choice.getNbGuard()-1).length() == 2) { choice.setGuardAt(choice.getNbGuard()-1,"[(" + choice2.getGuard(choice2.getNbGuard()-1).substring(1, choice2.getGuard(choice2.getNbGuard()-1).length()-1) + ")]"); @@ -1907,8 +1903,8 @@ public class SecurityGenerationForTMAP implements Runnable { prevRd = rdNonce; }*/ - TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); - rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); + TMLReadChannel rd = new TMLReadChannel("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject()); + rd.addChannel(tmlmodel.getChannelByName("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName())); // rd.setNbOfSamples("1"); taskAD.addElement(rd); @@ -1918,26 +1914,26 @@ public class SecurityGenerationForTMAP implements Runnable { rd.setEncForm(false); } */ - TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); - wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task)); + TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject()); + wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName())); taskAD.addElement(wr); wr.setNbOfSamples("1"); if (ch.secType == HSMChannel.DEC) { - rd.securityPattern = channelSecMap.get(ch.name); - TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); - dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); - dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); - dec.setAction(Integer.toString(channelSecMap.get(ch.name).encTime)); - - tmlmodel.addSecurityPattern(channelSecMap.get(ch.name)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task); + rd.setSecurityPattern(channelSecMap.get(ch.channel)); + TMLExecC dec = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject()); + dec.setSecurityPattern(channelSecMap.get(ch.channel)); + dec.setDecryptionProcess(true); + dec.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime())); + + tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel)); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask); } taskAD.addElement(dec); @@ -1952,37 +1948,36 @@ public class SecurityGenerationForTMAP implements Runnable { //Connext stop and write channel wr.addNext(stop); } else { - wr.securityPattern = channelSecMap.get(ch.name); - TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); - enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); - enc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - enc.setAction(Integer.toString(channelSecMap.get(ch.name).encTime)); - - tmlmodel.addSecurityPattern(channelSecMap.get(ch.name)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task); + wr.setSecurityPattern(channelSecMap.get(ch.channel)); + TMLExecC enc = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject()); + enc.setSecurityPattern(channelSecMap.get(ch.channel)); + enc.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime())); + + tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel)); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask); } if (ch.secType == HSMChannel.SENC) { - enc.securityPattern.type = SecurityPattern.SYMMETRIC_ENC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.SYMMETRIC_ENC_PATTERN); } else if (ch.secType == HSMChannel.AENC) { - enc.securityPattern.type = SecurityPattern.ASYMMETRIC_ENC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.ASYMMETRIC_ENC_PATTERN); } else if (ch.secType == HSMChannel.MAC) { - enc.securityPattern.type = SecurityPattern.MAC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.MAC_PATTERN); } else if (ch.secType == HSMChannel.NONCE) { - enc.securityPattern.type = SecurityPattern.NONCE_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.NONCE_PATTERN); } - enc.securityPattern.overhead = Integer.parseInt(overhead); - enc.securityPattern.encTime = Integer.parseInt(encComp); - enc.securityPattern.decTime = Integer.parseInt(decComp); - enc.securityPattern.nonce = ch.nonceName; + enc.getSecurityPattern().setOverhead(Integer.parseInt(overhead)); + enc.getSecurityPattern().setEncTime(Integer.parseInt(encComp)); + enc.getSecurityPattern().setDecTime(Integer.parseInt(decComp)); + enc.getSecurityPattern().setNonce(ch.nonceName); taskAD.addElement(enc); //Connect encrypt and readchannel @@ -2003,7 +1998,7 @@ public class SecurityGenerationForTMAP implements Runnable { for (HSMChannel ch : hsmChannelMap.get(cpuName)) { //Add guard as channelindex - choice.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]"); + choice.addGuard("[channelIndex==" + channelIndexMap.get(ch.channel) + "]"); TMLActivityElement prevRd = choice; //If needed, receive nonce from task @@ -2019,8 +2014,8 @@ public class SecurityGenerationForTMAP implements Runnable { prevRd = rdNonce; }*/ - TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); - rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); + TMLReadChannel rd = new TMLReadChannel("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject()); + rd.addChannel(tmlmodel.getChannelByName("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName())); rd.setNbOfSamples("1"); taskAD.addElement(rd); @@ -2034,8 +2029,8 @@ public class SecurityGenerationForTMAP implements Runnable { prevRd.addNext(rd); //Send data back to task - TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); - wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task)); + TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject()); + wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName())); //Return plaintext data if decrypting /* if (ch.secType == HSMChannel.DEC) { @@ -2045,23 +2040,23 @@ public class SecurityGenerationForTMAP implements Runnable { taskAD.addElement(wr); if (ch.secType == HSMChannel.DEC) { - rd.securityPattern = channelSecMap.get(ch.name); + rd.setSecurityPattern(channelSecMap.get(ch.channel)); TraceManager.addDev("Add Decrypt operator"); //Add Decrypt operator - TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); - dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); - dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); - dec.setAction(Integer.toString(channelSecMap.get(ch.name).encTime)); - - tmlmodel.addSecurityPattern(channelSecMap.get(ch.name)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task); + TMLExecC dec = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject()); + dec.setSecurityPattern(channelSecMap.get(ch.channel)); + dec.setDecryptionProcess(true); + dec.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime())); + + tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel)); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask); } taskAD.addElement(dec); @@ -2080,38 +2075,37 @@ public class SecurityGenerationForTMAP implements Runnable { wr.addNext(stop); } else { - wr.securityPattern = channelSecMap.get(ch.name); + wr.setSecurityPattern(channelSecMap.get(ch.channel)); TraceManager.addDev("Add Encrypt operator"); - TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); - enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); - enc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - enc.setAction(Integer.toString(channelSecMap.get(ch.name).encTime)); - - tmlmodel.addSecurityPattern(channelSecMap.get(ch.name)); - if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) { - if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) { - tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task); + TMLExecC enc = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject()); + enc.setSecurityPattern(channelSecMap.get(ch.channel)); + enc.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime())); + + tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel)); + if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) { + if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) { + tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task); } } else { List<TMLTask> listTask = new ArrayList<TMLTask>(); listTask.add(task); - tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask); + tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask); } if (ch.secType == HSMChannel.SENC) { - enc.securityPattern.type = SecurityPattern.SYMMETRIC_ENC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.SYMMETRIC_ENC_PATTERN); } else if (ch.secType == HSMChannel.AENC) { - enc.securityPattern.type = SecurityPattern.ASYMMETRIC_ENC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.ASYMMETRIC_ENC_PATTERN); } else if (ch.secType == HSMChannel.MAC) { - enc.securityPattern.type = SecurityPattern.MAC_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.MAC_PATTERN); } else if (ch.secType == HSMChannel.NONCE) { - enc.securityPattern.type = SecurityPattern.NONCE_PATTERN; + enc.getSecurityPattern().setType(SecurityPattern.NONCE_PATTERN); } - enc.securityPattern.overhead = Integer.parseInt(overhead); - enc.securityPattern.encTime = Integer.parseInt(encComp); - enc.securityPattern.decTime = Integer.parseInt(decComp); - enc.securityPattern.nonce = ch.nonceName; + enc.getSecurityPattern().setOverhead(Integer.parseInt(overhead)); + enc.getSecurityPattern().setEncTime(Integer.parseInt(encComp)); + enc.getSecurityPattern().setDecTime(Integer.parseInt(decComp)); + enc.getSecurityPattern().setNonce(ch.nonceName); taskAD.addElement(enc); //Connect encrypt and readchannel @@ -2137,123 +2131,121 @@ public class SecurityGenerationForTMAP implements Runnable { } //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, tmap them TMLModeling<?> tmlm = tmap.getTMLModeling(); - if (tmlm.securityTaskMap == null) { + if (tmlm.getSecurityTaskMap() == null) { return tmap; } - for (SecurityPattern sp : tmlm.securityTaskMap.keySet()) { - if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN) || sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { - for (TMLTask t : tmlm.securityTaskMap.get(sp)) { + for (SecurityPattern sp : tmlm.getSecurityTaskMap().keySet()) { + if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN) || sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + for (TMLTask t : tmlm.getSecurityTaskMap().get(sp)) { HwExecutionNode node1 = tmap.getHwNodeOf(t); boolean taskMappedToCPU = false; if (node1 != null) { - if (node1 instanceof HwExecutionNode) { - HwExecutionNode cpuNode = node1; - taskMappedToCPU = true; - boolean keyMappedtoMem = false; - HwLink lastLink = null; - for (int i=0; i < tmap.getArch().getHwLinks().size(); i++) { - HwLink link = tmap.getArch().getHwLinks().get(i); - if (!keyMappedtoMem && link.hwnode == node1) { - lastLink = link; - if (link.bus.privacy == 1) { - HwBus curBus = link.bus; - boolean keyFound = false; - HwMemory memNodeToMap = null; - outer: - for (HwLink linkBus : tmap.getArch().getHwLinks()) { - if (linkBus.bus == curBus) { - if (linkBus.hwnode instanceof HwMemory) { - memNodeToMap = (HwMemory) linkBus.hwnode; - List<SecurityPattern> keys = tmap.getMappedPatterns(memNodeToMap); - if (keys.contains(sp)) { - keyFound = true; - keyMappedtoMem = true; - break outer; - } + HwExecutionNode cpuNode = node1; + taskMappedToCPU = true; + boolean keyMappedtoMem = false; + HwLink lastLink = null; + for (int i=0; i < tmap.getArch().getHwLinks().size(); i++) { + HwLink link = tmap.getArch().getHwLinks().get(i); + if (!keyMappedtoMem && link.hwnode == node1) { + lastLink = link; + if (link.bus.privacy == 1) { + HwBus curBus = link.bus; + boolean keyFound = false; + HwMemory memNodeToMap = null; + outer: + for (HwLink linkBus : tmap.getArch().getHwLinks()) { + if (linkBus.bus == curBus) { + if (linkBus.hwnode instanceof HwMemory) { + memNodeToMap = (HwMemory) linkBus.hwnode; + List<SecurityPattern> keys = tmap.getMappedPatterns(memNodeToMap); + if (keys.contains(sp)) { + keyFound = true; + keyMappedtoMem = true; + break outer; } } } - if (!keyFound) { - if (memNodeToMap != null) { - TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName()); - tmap.addSecurityPattern(memNodeToMap, sp); - keyMappedtoMem = true; - } else { - HwMemory newHwMemory = new HwMemory(cpuNode.getName() + "KeysMemory"); - TraceManager.addDev("Creating new memory: " + newHwMemory.getName()); - tmap.getArch().addHwNode(newHwMemory); - - //Connect Bus and Memory - HwLink linkNewMemWithBus = new HwLink("link_" + newHwMemory.getName() + "_to_" + curBus.getName()); - linkNewMemWithBus.setNodes(curBus, newHwMemory); - tmap.getArch().getHwLinks().add(linkNewMemWithBus); - tmap.addSecurityPattern(newHwMemory, sp); - TraceManager.addDev("Adding " + sp.name + " key to " + newHwMemory.getName()); - keyMappedtoMem = true; - } + } + if (!keyFound) { + if (memNodeToMap != null) { + TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName()); + tmap.addSecurityPattern(memNodeToMap, sp); + keyMappedtoMem = true; + } else { + HwMemory newHwMemory = new HwMemory(cpuNode.getName() + "KeysMemory"); + TraceManager.addDev("Creating new memory: " + newHwMemory.getName()); + tmap.getArch().addHwNode(newHwMemory); + + //Connect Bus and Memory + HwLink linkNewMemWithBus = new HwLink("link_" + newHwMemory.getName() + "_to_" + curBus.getName()); + linkNewMemWithBus.setNodes(curBus, newHwMemory); + tmap.getArch().getHwLinks().add(linkNewMemWithBus); + tmap.addSecurityPattern(newHwMemory, sp); + TraceManager.addDev("Adding " + sp.getName() + " key to " + newHwMemory.getName()); + keyMappedtoMem = true; } } } } - if (!keyMappedtoMem) { - if (lastLink != null) { - HwBus lastBusNode = lastLink.bus; - HwExecutionNode cpuArchiNode = cpuNode; - - HwBridge newBridge = new HwBridge(cpuNode.getName() + "KeysBrigde"); - tmap.getArch().addHwNode(newBridge); - - HwBus newPrivateBus = new HwBus(cpuNode.getName() + "KeysPrivateBus"); - newPrivateBus.privacy = HwBus.BUS_PRIVATE; - for (TMLElement elem : tmap.getLisMappedChannels(lastBusNode)) { - if (elem instanceof TMLChannel) { - tmap.addCommToHwCommNode(elem, newPrivateBus); - } - } - tmap.getArch().addHwNode(newPrivateBus); - - HwMemory memNodeToMap = new HwMemory(cpuNode.getName() + "KeysMemory"); - TraceManager.addDev("Creating new memory: " + memNodeToMap.getName()); - tmap.getArch().addHwNode(memNodeToMap); - - tmap.addSecurityPattern(memNodeToMap, sp); - TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName()); - keyMappedtoMem = true; - - //Connect Bus and Memory - HwLink newLinkBusMemory = new HwLink("Link_"+newPrivateBus.getName() + "_" + memNodeToMap.getName()); - newLinkBusMemory.setNodes(newPrivateBus, memNodeToMap); - tmap.getArch().addHwLink(newLinkBusMemory); - - //Connect new Private Bus and Bridge - HwLink newLinkPrivateBusBridge = new HwLink("Link_"+newPrivateBus.getName() + "_" + newBridge.getName()); - newLinkPrivateBusBridge.setNodes(newPrivateBus, newBridge); - tmap.getArch().addHwLink(newLinkPrivateBusBridge); - - //Connect Public Bus and Bridge - HwLink newLinkPublicBusBridge = new HwLink("Link_"+lastBusNode.getName() + "_" + newBridge.getName()); - newLinkPublicBusBridge.setNodes(lastLink.bus, newBridge); - tmap.getArch().addHwLink(newLinkPublicBusBridge); - - //Connect new Private Bus and CPU - HwLink newLinkPrivateBusCPU = new HwLink("Link_"+newPrivateBus.getName() + "_" + cpuArchiNode.getName()); - newLinkPrivateBusCPU.setNodes(newPrivateBus, cpuArchiNode); - tmap.getArch().addHwLink(newLinkPrivateBusCPU); - - - //Disconnect Public Bus and CPU - HwLink linkToRemove = null; - for (HwLink li: tmap.getArch().getHwLinks()) { - if (li.bus == lastLink.bus && li.hwnode == cpuNode) { - TraceManager.addDev("Disconnect :" + li.bus.getName() + " and " + li.hwnode.getName()); - linkToRemove = li; - break; - } + } + if (!keyMappedtoMem) { + if (lastLink != null) { + HwBus lastBusNode = lastLink.bus; + HwExecutionNode cpuArchiNode = cpuNode; + + HwBridge newBridge = new HwBridge(cpuNode.getName() + "KeysBrigde"); + tmap.getArch().addHwNode(newBridge); + + HwBus newPrivateBus = new HwBus(cpuNode.getName() + "KeysPrivateBus"); + newPrivateBus.privacy = HwBus.BUS_PRIVATE; + for (TMLElement elem : tmap.getLisMappedChannels(lastBusNode)) { + if (elem instanceof TMLChannel) { + tmap.addCommToHwCommNode(elem, newPrivateBus); } - if (linkToRemove != null) { - tmap.getArch().getHwLinks().remove(linkToRemove); + } + tmap.getArch().addHwNode(newPrivateBus); + + HwMemory memNodeToMap = new HwMemory(cpuNode.getName() + "KeysMemory"); + TraceManager.addDev("Creating new memory: " + memNodeToMap.getName()); + tmap.getArch().addHwNode(memNodeToMap); + + tmap.addSecurityPattern(memNodeToMap, sp); + TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName()); + keyMappedtoMem = true; + + //Connect Bus and Memory + HwLink newLinkBusMemory = new HwLink("Link_"+newPrivateBus.getName() + "_" + memNodeToMap.getName()); + newLinkBusMemory.setNodes(newPrivateBus, memNodeToMap); + tmap.getArch().addHwLink(newLinkBusMemory); + + //Connect new Private Bus and Bridge + HwLink newLinkPrivateBusBridge = new HwLink("Link_"+newPrivateBus.getName() + "_" + newBridge.getName()); + newLinkPrivateBusBridge.setNodes(newPrivateBus, newBridge); + tmap.getArch().addHwLink(newLinkPrivateBusBridge); + + //Connect Public Bus and Bridge + HwLink newLinkPublicBusBridge = new HwLink("Link_"+lastBusNode.getName() + "_" + newBridge.getName()); + newLinkPublicBusBridge.setNodes(lastLink.bus, newBridge); + tmap.getArch().addHwLink(newLinkPublicBusBridge); + + //Connect new Private Bus and CPU + HwLink newLinkPrivateBusCPU = new HwLink("Link_"+newPrivateBus.getName() + "_" + cpuArchiNode.getName()); + newLinkPrivateBusCPU.setNodes(newPrivateBus, cpuArchiNode); + tmap.getArch().addHwLink(newLinkPrivateBusCPU); + + + //Disconnect Public Bus and CPU + HwLink linkToRemove = null; + for (HwLink li: tmap.getArch().getHwLinks()) { + if (li.bus == lastLink.bus && li.hwnode == cpuNode) { + TraceManager.addDev("Disconnect :" + li.bus.getName() + " and " + li.hwnode.getName()); + linkToRemove = li; + break; } } + if (linkToRemove != null) { + tmap.getArch().getHwLinks().remove(linkToRemove); + } } } } @@ -2274,14 +2266,13 @@ public class SecurityGenerationForTMAP implements Runnable { public static final int DEC = 3; public static final int AENC = 4; public static final int NONCE = 5; - public String name; - public String task; - public String securityContext = ""; + public TMLChannel channel; + public TMLTask task; public int secType; public String nonceName = ""; - public HSMChannel(String n, String t, int type) { - name = n; + public HSMChannel(TMLChannel n, TMLTask t, int type) { + channel = n; task = t; secType = type; } diff --git a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java index 406a4befd4..914deb780f 100644 --- a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java +++ b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java @@ -41,10 +41,7 @@ import avatartranslator.*; import myutil.TraceManager; import tmltranslator.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -76,12 +73,12 @@ public class FullTML2Avatar { public Map<String, Object> stateObjectMap = new HashMap<String, Object>(); public Map<TMLTask, List<SecurityPattern>> accessKeys = new HashMap<TMLTask, List<SecurityPattern>>(); - HashMap<String, List<String>> secChannelMap = new HashMap<String, List<String>>(); + HashMap<TMLChannel, Set<AvatarPragma>> secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>(); HashMap<String, AvatarAttributeState> signalAuthOriginMap = new HashMap<String, AvatarAttributeState>(); HashMap<String, AvatarAttributeState> signalAuthDestMap = new HashMap<String, AvatarAttributeState>(); - public ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>(); + private ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>(); List<AvatarSignal> signals = new ArrayList<AvatarSignal>(); private final static Integer channelPublic = 0; @@ -516,14 +513,14 @@ public class FullTML2Avatar { asm.setStartState((AvatarStartState) elementList.get(0)); } for (SecurityPattern secPattern : secPatterns) { - AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name); + AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.getName()); if (sec != null) { //sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null); //AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null); // block.addAttribute(sec); // block.addAttribute(enc); //} - avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.name, null, sec)); + avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.getName(), null, sec)); } } @@ -534,20 +531,7 @@ public class FullTML2Avatar { for (String s : signalAuthOriginMap.keySet()) { if (signalAuthDestMap.containsKey(s)) { AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity("#Authenticity " + signalAuthOriginMap.get(s).getName() + " " + signalAuthDestMap.get(s).getName(), signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s)); - if (secChannelMap.containsKey(s)) { - for (String channel : secChannelMap.get(s)) { - TMLChannel ch = tmlmodel.getChannelByShortName(channel); - if (ch != null) { - if (ch.checkAuth) { - avspec.addPragma(pragma); - break; - } - } - } - - } else { - avspec.addPragma(pragma); - } + avspec.addPragma(pragma); } } @@ -786,7 +770,7 @@ public class FullTML2Avatar { } } - tmlmodel.secChannelMap = secChannelMap; + tmlmodel.setSecChannelMap(secChannelMap); // System.out.println("avatar spec\n" +avspec); avspec.removeEmptyTransitions(true); @@ -1161,118 +1145,118 @@ public class FullTML2Avatar { elementList.add(as); elementList.add(tran); - if (security && ae.securityPattern != null) { + if (security && ae.getSecurityPattern() != null) { //If encryption - if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.ENCRYPTION_PROCESS) { - secPatterns.add(ae.securityPattern); - if (ae.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) { + if (!((TMLActivityElementWithAction) ae).isDecryptionProcess()) { + secPatterns.add(ae.getSecurityPattern()); + if (ae.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) { //Type Advanced - tran.addAction(ae.securityPattern.formula); - } else if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + tran.addAction(ae.getSecurityPattern().getFormula()); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { //Type Symmetric Encryption - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Concatenate nonce to data //Create concat2 method - block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod concat2 = new AvatarMethod("concat2", ae); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat2); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Securing a key //Create sencrypt method for key - block.addAttribute(new AvatarAttribute(ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae); - sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.key)); - sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); + sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey())); + sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); - if (block.getAvatarAttributeWithName(ae.securityPattern.key) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(sencrypt); - tran.addAction("encryptedKey_" + ae.securityPattern.key + " = sencrypt(key_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")"); + tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = sencrypt(key_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")"); } } else { //Securing data //Create sencrypt method for data - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae); - sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); + sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(sencrypt); } - tran.addAction(ae.securityPattern.name + "_encrypted = sencrypt(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = sencrypt(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + ")"); } //Set as origin for authenticity - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; - } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { - if (!ae.securityPattern.nonce.isEmpty()) { + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Concatenating a nonce //Add concat2 method - block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod concat2 = new AvatarMethod("concat2", ae); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat2); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } //Securing a key instead of data - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Add aencrypt method AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); - aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name)); - aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) { + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); + aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName())); + aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(aencrypt); - tran.addAction("encryptedKey_" + ae.securityPattern.key + " = aencrypt(key_" + ae.securityPattern.key + ", pubKey_" + ae.securityPattern.name + ")"); + tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = aencrypt(key_" + ae.getSecurityPattern().getKey() + ", pubKey_" + ae.getSecurityPattern().getName() + ")"); } } else { //Securing data //Add aencrypt method AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - aencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name)); - aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - if (block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + aencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName())); + aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + if (block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(aencrypt); - tran.addAction(ae.securityPattern.name + "_encrypted = aencrypt(" + ae.securityPattern.name + ", pubKey_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = aencrypt(" + ae.getSecurityPattern().getName() + ", pubKey_" + ae.getSecurityPattern().getName() + ")"); } } //Set as origin state for authenticity - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; - } else if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) { //Do nothing except occupy time to forge nonce @@ -1286,113 +1270,113 @@ public class FullTML2Avatar { arandom.addNext(tran); elementList.add(tran); block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));*/ - } else if (ae.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) { AvatarMethod hash = new AvatarMethod("hash", ae); - hash.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + hash.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(hash); } - tran.addAction(ae.securityPattern.name + "_encrypted = hash(" + ae.securityPattern.name + ")"); - } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) { - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg) - if (!ae.securityPattern.nonce.isEmpty()) { + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = hash(" + ae.getSecurityPattern().getName() + ")"); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg) + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Add nonce //Add concat2 method AvatarMethod concat = new AvatarMethod("concat2", ae); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } //Create MAC method AvatarMethod mac = new AvatarMethod("MAC", ae); - AvatarAttribute macattr = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null); + AvatarAttribute macattr = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null); block.addAttribute(macattr); - mac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); + mac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); mac.addReturnParameter(macattr); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(mac); - tran.addAction(ae.securityPattern.name + "_mac = MAC(" + ae.securityPattern.name + ",key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_mac = MAC(" + ae.getSecurityPattern().getName() + ",key_" + ae.getSecurityPattern().getName() + ")"); } //Concatenate msg and mac(msg) //Create concat2 method AvatarMethod concat = new AvatarMethod("concat2", ae); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac")); - concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac")); + concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); //concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(concat); - tran.addAction(ae.securityPattern.name + "_encrypted = concat2(" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); } //Set attributestate for authenticity - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { - AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), as); - signalAuthOriginMap.put(ae.securityPattern.name, authOrigin); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), as); + signalAuthOriginMap.put(ae.getSecurityPattern().getName(), authOrigin); } - } else if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.DECRYPTION_PROCESS) { + } else { //Decryption action //block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); //block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null)); - if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { - if (!ae.securityPattern.key.isEmpty()) { + if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Decrypting a key //Add sdecrypt method AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - - sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); - if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) { + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + + sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); + if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(sdecrypt); - tran.addAction("key_" + ae.securityPattern.key + " = sdecrypt(encryptedKey_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")"); + tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = sdecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")"); } } else { //Decrypting data AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - - sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + + sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(sdecrypt); - tran.addAction(ae.securityPattern.name + " = sdecrypt(" + ae.securityPattern.name + "_encrypted, key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + " = sdecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, key_" + ae.getSecurityPattern().getName() + ")"); } } - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Separate out the nonce - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); //Add get2 method AvatarMethod get2 = new AvatarMethod("get2", ae); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce) != null) { + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()) != null) { block.addMethod(get2); - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); } //Add state after get2 statement @@ -1404,74 +1388,74 @@ public class FullTML2Avatar { elementList.add(tran); //Guard transition to determine if nonce matches - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); } //Add a dummy state afterwards for authenticity after decrypting the data AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block); - ae.securityPattern.state2 = dummy; + ae.getSecurityPattern().setState2(dummy); tran.addNext(dummy); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); dummy.addNext(tran); elementList.add(dummy); elementList.add(tran); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { - AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - signalAuthDestMap.put(ae.securityPattern.name, authDest); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest); } - } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { AvatarMethod adecrypt = new AvatarMethod("adecrypt", ae); - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Decrypting key //Add adecrypt method - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); - adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name)); - adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); + adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName())); + adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); - if (block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null) { + if (block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(adecrypt); - tran.addAction("key_" + ae.securityPattern.key + " = adecrypt(encryptedKey_" + ae.securityPattern.key + ", privKey_" + ae.securityPattern.name + ")"); + tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = adecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", privKey_" + ae.getSecurityPattern().getName() + ")"); } } else { //Decrypting data //Add adecrypt method - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - - adecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name)); - adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + + adecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName())); + adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(adecrypt); - tran.addAction(ae.securityPattern.name + " = adecrypt(" + ae.securityPattern.name + "_encrypted, privKey_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + " = adecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, privKey_" + ae.getSecurityPattern().getName() + ")"); } } - if (!ae.securityPattern.nonce.isEmpty()) { - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); + if (!ae.getSecurityPattern().getNonce().isEmpty()) { + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); AvatarMethod get2 = new AvatarMethod("get2", ae); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(get2); } - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); AvatarState guardState = new AvatarState(reworkStringName(ae.getName() + "_guarded"), ae.getReferenceObject(), block); tran.addNext(guardState); tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject()); elementList.add(guardState); elementList.add(tran); guardState.addNext(tran); - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); } AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block); tran.addNext(dummy); @@ -1479,49 +1463,49 @@ public class FullTML2Avatar { dummy.addNext(tran); elementList.add(dummy); elementList.add(tran); - ae.securityPattern.state2 = dummy; - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + ae.getSecurityPattern().setState2(dummy); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + - ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - signalAuthDestMap.put(ae.securityPattern.name, authDest); + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest); } - } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) { //Separate MAC from MSG //Add get2 method AvatarMethod get2 = new AvatarMethod("get2", ae); - AvatarAttribute mac = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null); + AvatarAttribute mac = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null); block.addAttribute(mac); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); get2.addParameter(mac); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(get2); - tran.addAction("get2(" + ae.securityPattern.name + "_encrypted," + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "_encrypted," + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } //Add verifymac method AvatarMethod verifymac = new AvatarMethod("verifyMAC", ae); - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.name, AvatarType.BOOLEAN, block, null)); + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getName(), AvatarType.BOOLEAN, block, null)); - verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac")); - verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.name)); + verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac")); + verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getName())); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(verifymac); - tran.addAction("testnonce_" + ae.securityPattern.name + "=verifyMAC(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction("testnonce_" + ae.getSecurityPattern().getName() + "=verifyMAC(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } - if (!ae.securityPattern.nonce.isEmpty()) { - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + if (!ae.getSecurityPattern().getNonce().isEmpty()) { + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); } AvatarState guardState = new AvatarState(reworkStringName(ae.getName() + "_guarded"), ae.getReferenceObject(), block); @@ -1530,9 +1514,9 @@ public class FullTML2Avatar { elementList.add(guardState); elementList.add(tran); guardState.addNext(tran); - tran.setGuard("testnonce_" + ae.securityPattern.name); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getName()); - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Add extra state and transition @@ -1540,14 +1524,14 @@ public class FullTML2Avatar { ae.getReferenceObject(), block); tran.addNext(guardState2); tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject()); - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); elementList.add(guardState2); elementList.add(tran); guardState2.addNext(tran); } AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block); - ae.securityPattern.state2 = dummy; + ae.getSecurityPattern().setState2(dummy); tran.addNext(dummy); elementList.add(tran); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); @@ -1555,9 +1539,9 @@ public class FullTML2Avatar { elementList.add(dummy); elementList.add(tran); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { - AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - signalAuthDestMap.put(ae.securityPattern.name, authDest); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest); } } diff --git a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java index 54912cb5ae..682145ce11 100644 --- a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java +++ b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java @@ -67,7 +67,8 @@ public class TML2Avatar { public Map<TMLTask, List<SecurityPattern>> accessKeys = new HashMap<TMLTask, List<SecurityPattern>>(); public ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>(); public int loopLimit = 1; - HashMap<String, List<String>> secChannelMap = new HashMap<String, List<String>>(); + HashMap<TMLChannel, Set<String>> channelsSecAttributes = new HashMap<TMLChannel, Set<String>>(); + HashMap<TMLChannel, Set<AvatarPragma>> secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>(); HashMap<String, List<AvatarAttributeState>> signalAuthOriginMap = new HashMap<String, List<AvatarAttributeState>>(); HashMap<String, List<AvatarAttributeState>> signalAuthDestMap = new HashMap<String, List<AvatarAttributeState>>(); List<AvatarSignal> signals = new ArrayList<AvatarSignal>(); @@ -81,6 +82,8 @@ public class TML2Avatar { private Set<SecurityPattern> keysPublicBus = new HashSet<SecurityPattern>(); private Map<SecurityPattern, List<AvatarAttribute>> symKeys = new HashMap<SecurityPattern, List<AvatarAttribute>>(); private Map<SecurityPattern, List<AvatarAttribute>> pubKeys = new HashMap<SecurityPattern, List<AvatarAttribute>>(); + + private Map<SecurityPattern, AvatarPragmaSecret> secPatternPragmaMap = new HashMap<SecurityPattern, AvatarPragmaSecret>(); private Map<String, String> nameMap = new HashMap<String, String>(); private Map<String, AvatarSignal> signalInMap = new HashMap<String, AvatarSignal>(); private Map<String, AvatarSignal> signalOutMap = new HashMap<String, AvatarSignal>(); @@ -325,7 +328,7 @@ public class TML2Avatar { TraceManager.addDev(channelMap); }*/ - public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block, boolean autoAuthChans) { + public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block) { // TMLActionState tmlaction; // TMLChoice tmlchoice; @@ -381,12 +384,12 @@ public class TML2Avatar { elementList.add(tran); } else if (ae instanceof TMLSequence) { //Get all list of sequences and paste together - List<AvatarStateMachineElement> seq = translateState(ae.getNextElement(0), block, autoAuthChans); + List<AvatarStateMachineElement> seq = translateState(ae.getNextElement(0), block); List<AvatarStateMachineElement> tmp; // elementList.addAll(seq); //get rid of any stops in the middle of the sequence and replace with the start of the next sequence for (int i = 1; i < ae.getNbNext(); i++) { - tmp = translateState(ae.getNextElement(i), block, autoAuthChans); + tmp = translateState(ae.getNextElement(i), block); for (AvatarStateMachineElement e : seq) { if (e instanceof AvatarStopState) { //ignore @@ -497,7 +500,7 @@ public class TML2Avatar { tran = new AvatarTransition(block, "__after_" + ae.getName() + "_0", ae.getReferenceObject()); elementList.add(tran); choiceState.addNext(tran); - List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block, autoAuthChans); + List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block); tran.addNext(set0.get(0)); elementList.addAll(set0); return elementList; @@ -518,7 +521,7 @@ public class TML2Avatar { choiceState.addNext(tran); elementList.add(tran); - List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block, autoAuthChans); + List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block); AvatarState choiceStateEnd = new AvatarState("seqchoiceend__" + i + "_" + reworkStringName(ae.getName()), ae.getReferenceObject(), block); AvatarTransition tranChoiceStateEnd = new AvatarTransition(block, "trans_seqchoiceend__" + i + "_" + reworkStringName(ae.getName()), ae.getReferenceObject()); choiceStateEnd.addNext(tranChoiceStateEnd); @@ -553,8 +556,8 @@ public class TML2Avatar { } /*if (ae.getNbNext() == 2) { - List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block, autoAuthChans); - List<AvatarStateMachineElement> set1 = translateState(ae.getNextElement(1), block, autoAuthChans); + List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block); + List<AvatarStateMachineElement> set1 = translateState(ae.getNextElement(1), block); // elementList.addAll(set0); //Remove stop states of sets and route their transitions to the first element of the following sequence @@ -591,8 +594,8 @@ public class TML2Avatar { elementList.add(stop); //Build branch 1 - List<AvatarStateMachineElement> set0_1 = translateState(ae.getNextElement(0), block, autoAuthChans); - List<AvatarStateMachineElement> set1_1 = translateState(ae.getNextElement(1), block, autoAuthChans); + List<AvatarStateMachineElement> set0_1 = translateState(ae.getNextElement(0), block); + List<AvatarStateMachineElement> set1_1 = translateState(ae.getNextElement(1), block); for (AvatarStateMachineElement e : set1_1) { if (e instanceof AvatarStopState) { //ignore @@ -627,7 +630,7 @@ public class TML2Avatar { //For each of the possible state blocks, translate 1 and recurse on the remaining random sequence tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject()); choiceState.addNext(tran); - List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block, autoAuthChans); + List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block); AvatarState choiceStateEnd = new AvatarState("seqchoiceend__" + i + "_" + @@ -669,7 +672,7 @@ public class TML2Avatar { choiceStateEnd.addNext(tran); elementList.add(tran); - List<AvatarStateMachineElement> nexts = translateState(newSeq, block, autoAuthChans); + List<AvatarStateMachineElement> nexts = translateState(newSeq, block); elementList.addAll(nexts); tran.addNext(nexts.get(0)); @@ -817,118 +820,118 @@ public class TML2Avatar { as.addNext(tran); elementList.add(as); elementList.add(tran); - if (security && ae.securityPattern != null) { + if (security && ae.getSecurityPattern() != null) { //If encryption - if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.ENCRYPTION_PROCESS) { - secPatterns.add(ae.securityPattern); - if (ae.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) { + if (!((TMLActivityElementWithAction) ae).isDecryptionProcess()) { + secPatterns.add(ae.getSecurityPattern()); + if (ae.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) { //Type Advanced - tran.addAction(ae.securityPattern.formula); - } else if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + tran.addAction(ae.getSecurityPattern().getFormula()); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { //Type Symmetric Encryption - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Concatenate nonce to data //Create concat2 method - block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod concat2 = new AvatarMethod("concat2", ae); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat2); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Securing a key //Create sencrypt method for key - block.addAttribute(new AvatarAttribute(ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae); - sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.key)); - sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); + sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey())); + sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); - if (block.getAvatarAttributeWithName(ae.securityPattern.key) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(sencrypt); - tran.addAction("encryptedKey_" + ae.securityPattern.key + " = sencrypt(key_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")"); + tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = sencrypt(" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")"); } } else { //Securing data //Create sencrypt method for data - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae); - sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); + sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(sencrypt); } - tran.addAction(ae.securityPattern.name + "_encrypted = sencrypt(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = sencrypt(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + ")"); } //Set as origin for authenticity - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; - } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { - if (!ae.securityPattern.nonce.isEmpty()) { + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Concatenating a nonce //Add concat2 method - block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); AvatarMethod concat2 = new AvatarMethod("concat2", ae); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat2); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } //Securing a key instead of data - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Add aencrypt method AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); - aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name)); - aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) { + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); + aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName())); + aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(aencrypt); - tran.addAction("encryptedKey_" + ae.securityPattern.key + " = aencrypt(key_" + ae.securityPattern.key + ", pubKey_" + ae.securityPattern.name + ")"); + tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = aencrypt(key_" + ae.getSecurityPattern().getKey() + ", pubKey_" + ae.getSecurityPattern().getName() + ")"); } } else { //Securing data //Add aencrypt method AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - aencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name)); - aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - if (block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + aencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName())); + aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + if (block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(aencrypt); - tran.addAction(ae.securityPattern.name + "_encrypted = aencrypt(" + ae.securityPattern.name + ", pubKey_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = aencrypt(" + ae.getSecurityPattern().getName() + ", pubKey_" + ae.getSecurityPattern().getName() + ")"); } } //Set as origin state for authenticity - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; - } else if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) { //Do nothing except occupy time to forge nonce @@ -942,122 +945,125 @@ public class TML2Avatar { arandom.addNext(tran); elementList.add(tran); block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));*/ - } else if (ae.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) { AvatarMethod hash = new AvatarMethod("hash", ae); - hash.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + hash.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(hash); } - tran.addAction(ae.securityPattern.name + "_encrypted = hash(" + ae.securityPattern.name + ")"); - } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) { - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg) - if (!ae.securityPattern.nonce.isEmpty()) { + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = hash(" + ae.getSecurityPattern().getName() + ")"); + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg) + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Add nonce //Add concat2 method AvatarMethod concat = new AvatarMethod("concat2", ae); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce)); - concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) { + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce())); + concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) { block.addMethod(concat); - tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")"); } } //Create MAC method AvatarMethod mac = new AvatarMethod("MAC", ae); - AvatarAttribute macattr = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null); + AvatarAttribute macattr = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null); block.addAttribute(macattr); - mac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); + mac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); mac.addReturnParameter(macattr); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(mac); - tran.addAction(ae.securityPattern.name + "_mac = MAC(" + ae.securityPattern.name + ",key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + "_mac = MAC(" + ae.getSecurityPattern().getName() + ",key_" + ae.getSecurityPattern().getName() + ")"); } //Concatenate msg and mac(msg) //Create concat2 method AvatarMethod concat = new AvatarMethod("concat2", ae); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac")); - concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac")); + concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); //concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(concat); - tran.addAction(ae.securityPattern.name + "_encrypted = concat2(" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } - ae.securityPattern.originTask = block.getName(); - ae.securityPattern.state1 = as; + //ae.getSecurityPattern().setOriginTask(block.getName()); + ae.getSecurityPattern().setState1(as); } // Set attribute state for authenticity - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarPragmaSecret avPragmaSecret = new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + ae.getSecurityPattern().getName(), + ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + secPatternPragmaMap.put(ae.getSecurityPattern(), avPragmaSecret); AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." + - ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), as); - if (signalAuthOriginMap.containsKey(ae.securityPattern.name)) { - signalAuthOriginMap.get(ae.securityPattern.name).add(authOrigin); + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), as); + if (signalAuthOriginMap.containsKey(ae.getSecurityPattern().getName())) { + signalAuthOriginMap.get(ae.getSecurityPattern().getName()).add(authOrigin); } else { LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>(); tmp.add(authOrigin); - signalAuthOriginMap.put(ae.securityPattern.name, tmp); + signalAuthOriginMap.put(ae.getSecurityPattern().getName(), tmp); } } - } else if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.DECRYPTION_PROCESS) { + } else { //Decryption action //block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); //block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null)); - if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { - if (!ae.securityPattern.key.isEmpty()) { + if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Decrypting a key //Add sdecrypt method AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - - sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); - if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) { + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + + sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); + if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(sdecrypt); - tran.addAction("key_" + ae.securityPattern.key + " = sdecrypt(encryptedKey_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")"); + tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = sdecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")"); } } else { //Decrypting data AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - - sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + + sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(sdecrypt); - tran.addAction(ae.securityPattern.name + " = sdecrypt(" + ae.securityPattern.name + "_encrypted, key_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + " = sdecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, key_" + ae.getSecurityPattern().getName() + ")"); } } - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Separate out the nonce - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); //Add get2 method AvatarMethod get2 = new AvatarMethod("get2", ae); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && - block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce) != null) { + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && + block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()) != null) { block.addMethod(get2); - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); } //Add state after get2 statement @@ -1069,82 +1075,82 @@ public class TML2Avatar { elementList.add(tran); //Guard transition to determine if nonce matches - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); } // Add a dummy state afterwards for authenticity after decrypting the data AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block); - ae.securityPattern.state2 = dummy; + ae.getSecurityPattern().setState2(dummy); tran.addNext(dummy); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); dummy.addNext(tran); elementList.add(dummy); elementList.add(tran); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + - ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - if (signalAuthDestMap.containsKey(ae.securityPattern.name)) { - signalAuthDestMap.get(ae.securityPattern.name).add(authDest); + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) { + signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest); } else { LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>(); tmp.add(authDest); - signalAuthDestMap.put(ae.securityPattern.name, tmp); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp); } } - } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { AvatarMethod adecrypt = new AvatarMethod("adecrypt", ae); - if (!ae.securityPattern.key.isEmpty()) { + if (!ae.getSecurityPattern().getKey().isEmpty()) { //Decrypting key //Add adecrypt method - block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null)); - adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key)); - adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name)); - adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key)); + adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey())); + adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName())); + adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey())); - if (block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && - block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && - block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null) { + if (block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && + block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && + block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null) { block.addMethod(adecrypt); - tran.addAction("key_" + ae.securityPattern.key + " = adecrypt(encryptedKey_" + ae.securityPattern.key + ", privKey_" + ae.securityPattern.name + ")"); + tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = adecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", privKey_" + ae.getSecurityPattern().getName() + ")"); } } else { //Decrypting data //Add adecrypt method - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null)); - - adecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name)); - adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); + + adecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName())); + adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(adecrypt); - tran.addAction(ae.securityPattern.name + " = adecrypt(" + ae.securityPattern.name + "_encrypted, privKey_" + ae.securityPattern.name + ")"); + tran.addAction(ae.getSecurityPattern().getName() + " = adecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, privKey_" + ae.getSecurityPattern().getName() + ")"); } } - if (!ae.securityPattern.nonce.isEmpty()) { - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); + if (!ae.getSecurityPattern().getNonce().isEmpty()) { + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); AvatarMethod get2 = new AvatarMethod("get2", ae); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce)); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce())); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { block.addMethod(get2); } - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); AvatarState guardState = new AvatarState(reworkStringName(ae.getName()) + "_guarded", ae.getReferenceObject(), block); tran.addNext(guardState); tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject()); elementList.add(guardState); elementList.add(tran); guardState.addNext(tran); - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); } AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block); tran.addNext(dummy); @@ -1152,54 +1158,54 @@ public class TML2Avatar { dummy.addNext(tran); elementList.add(dummy); elementList.add(tran); - ae.securityPattern.state2 = dummy; - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { - AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - if (signalAuthDestMap.containsKey(ae.securityPattern.name)) { - signalAuthDestMap.get(ae.securityPattern.name).add(authDest); + ae.getSecurityPattern().setState2(dummy); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) { + signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest); } else { LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>(); tmp.add(authDest); - signalAuthDestMap.put(ae.securityPattern.name, tmp); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp); } } - } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) { + } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) { //Separate MAC from MSG //Add get2 method AvatarMethod get2 = new AvatarMethod("get2", ae); - AvatarAttribute mac = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null); + AvatarAttribute mac = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null); block.addAttribute(mac); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); + block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null)); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted")); - get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted")); + get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); get2.addParameter(mac); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) { block.addMethod(get2); - tran.addAction("get2(" + ae.securityPattern.name + "_encrypted," + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "_encrypted," + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } //Add verifymac method AvatarMethod verifymac = new AvatarMethod("verifyMAC", ae); - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.name, AvatarType.BOOLEAN, block, null)); + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getName(), AvatarType.BOOLEAN, block, null)); - verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name)); - verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name)); - verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac")); - verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.name)); + verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName())); + verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName())); + verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac")); + verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getName())); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) { + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) { block.addMethod(verifymac); - tran.addAction("testnonce_" + ae.securityPattern.name + "=verifyMAC(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)"); + tran.addAction("testnonce_" + ae.getSecurityPattern().getName() + "=verifyMAC(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)"); } - if (!ae.securityPattern.nonce.isEmpty()) { - block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null)); - tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")"); + if (!ae.getSecurityPattern().getNonce().isEmpty()) { + block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null)); + tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")"); } AvatarState guardState = new AvatarState(reworkStringName(ae.getName()) + "_guarded", ae.getReferenceObject(), block); @@ -1208,23 +1214,23 @@ public class TML2Avatar { elementList.add(guardState); elementList.add(tran); guardState.addNext(tran); - tran.setGuard("testnonce_" + ae.securityPattern.name); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getName()); - if (!ae.securityPattern.nonce.isEmpty()) { + if (!ae.getSecurityPattern().getNonce().isEmpty()) { //Add extra state and transition AvatarState guardState2 = new AvatarState(reworkStringName(ae.getName()) + "_guarded2", ae.getReferenceObject(), block); tran.addNext(guardState2); tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject()); - tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce); + tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce()); elementList.add(guardState2); elementList.add(tran); guardState2.addNext(tran); } AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block); - ae.securityPattern.state2 = dummy; + ae.getSecurityPattern().setState2(dummy); tran.addNext(dummy); elementList.add(tran); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); @@ -1232,14 +1238,14 @@ public class TML2Avatar { elementList.add(dummy); elementList.add(tran); - if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) { - AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy); - if (signalAuthDestMap.containsKey(ae.securityPattern.name)) { - signalAuthDestMap.get(ae.securityPattern.name).add(authDest); + if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) { + AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy); + if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) { + signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest); } else { LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>(); tmp.add(authDest); - signalAuthDestMap.put(ae.securityPattern.name, tmp); + signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp); } } } @@ -1288,50 +1294,48 @@ public class TML2Avatar { block.addSignal(sig); signalInMap.put(ch.getName(), sig); AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); - if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { - block.addAttribute(channelData); - } sig.addParameter(channelData); } else { sig = signalInMap.get(ch.getName()); } TraceManager.addDev("InMap sig= " + sig.getSignalName()); AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block); - - if (ae.securityPattern != null) { + AvatarAttribute channelData; + if (ae.getSecurityPattern() != null) { //If nonce - if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - as.addValue(ae.securityPattern.name); + if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) { + channelData = new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null); + block.addAttribute(channelData); + as.addValue(channelData.getName()); } //Send the encrypted key - else if (!ae.securityPattern.key.isEmpty()) { - as.addValue("encryptedKey_" + ae.securityPattern.key); - AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null); - block.addAttribute(data); + else if (!ae.getSecurityPattern().getKey().isEmpty()) { + channelData = new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null); + as.addValue(channelData.getName()); + block.addAttribute(channelData); } else { //Send the encrypted data - if (!secChannelMap.containsKey(ae.securityPattern.name)) { - List<String> tmp = new ArrayList<String>(); - secChannelMap.put(ae.securityPattern.name, tmp); - } - - secChannelMap.get(ae.securityPattern.name).add(ch.getName()); - if (!ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { - as.addValue(ae.securityPattern.name + "_encrypted"); - AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null); - block.addAttribute(data); - } else { - if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null) { - AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null); - block.addAttribute(data); - } - as.addValue(ae.securityPattern.name); - + channelData = new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null); + if (!channelsSecAttributes.containsKey(ch)) { + Set<String> tmp = new HashSet<String>(); + channelsSecAttributes.put(ch, tmp); } + channelsSecAttributes.get(ch).add(channelData.getName()); + channelsSecAttributes.get(ch).add(ae.getSecurityPattern().getName()); + as.addValue(channelData.getName()); + block.addAttribute(channelData); } } else { - as.addValue(ch.getDestinationPort().getName() + "_chData"); + channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); + if (!channelsSecAttributes.containsKey(ch)) { + Set<String> tmp = new HashSet<String>(); + channelsSecAttributes.put(ch, tmp); + } + channelsSecAttributes.get(ch).add(channelData.getName()); + if (block.getAvatarAttributeWithName(channelData.getName()) == null) { + block.addAttribute(channelData); + } + as.addValue(channelData.getName()); } tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); @@ -1351,14 +1355,31 @@ public class TML2Avatar { afterSignalState.addNext(tran); elementList.add(afterSignalState); elementList.add(tran); - if (autoAuthChans || ae.securityPattern == null) { - if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { + boolean foundDecrytionOp = false; + List<TMLActivityElement> allNextForAe = new ArrayList<TMLActivityElement>(ae.getNexts()); + if (ae.getSecurityPattern() != null) { + while (!allNextForAe.isEmpty()) { + TMLActivityElement nextAe = allNextForAe.get(0); + allNextForAe.addAll(nextAe.getNexts()); + if (security && nextAe.getSecurityPattern() != null) { + if (nextAe instanceof TMLActivityElementWithAction) { + if (((TMLActivityElementWithAction) nextAe).isDecryptionProcess()) { + if (nextAe.getSecurityPattern().equalSpec(ae.getSecurityPattern())) { + foundDecrytionOp = true; + } + } + } + } + allNextForAe.remove(nextAe); + } + } + if (!foundDecrytionOp) { + /*if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); block.addAttribute(channelData); - } + }*/ AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + reworkStringName(afterSignalState.getName()) + "." + - getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName()) - + "_chData"), afterSignalState); + channelData.getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(channelData.getName()), afterSignalState); if (signalAuthDestMap.containsKey(ch.getName())) { signalAuthDestMap.get(ch.getName()).add(authDest); } else { @@ -1381,40 +1402,92 @@ public class TML2Avatar { block.addSignal(sig); signalOutMap.put(ch.getName(), sig); AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); - if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { - block.addAttribute(channelData); - } sig.addParameter(channelData); } else { sig = signalOutMap.get(ch.getName()); } TraceManager.addDev("OutMap sig= " + sig.getSignalName()); + AvatarAttribute channelData; + AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block); + if (ae.getSecurityPattern() != null) { + //send nonce + if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) { + channelData = new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null); + block.addAttribute(channelData); + as.addValue(channelData.getName()); + } + //send encrypted key + else if (!ae.getSecurityPattern().getKey().isEmpty()) { + channelData = new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null); + as.addValue(channelData.getName()); + block.addAttribute(channelData); + } else { + //send encrypted data + // + channelData = new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null); + as.addValue(channelData.getName()); + block.addAttribute(channelData); + } + } else { + //No security pattern + // TraceManager.addDev("no security pattern for " + ch.getName()); + channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); + + if (block.getAvatarAttributeWithName(channelData.getName()) == null) { + block.addAttribute(channelData); + } + as.addValue(channelData.getName()); + } //Add the confidentiality pragma for this channel data if (ch.checkConf) { if (ch.originalOriginTasks.size() != 0 && ch.getOriginPort().getName().contains("PORTORIGIN")) { // System.out.println("Channel " + ch.getOriginPort().getName() + " block " + block.getName()); - if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData")) { - for (TMLTask origTask : ch.originalOriginTasks) { - AvatarBlock bl = avspec.getBlockWithName(origTask.getName().split("__")[origTask.getName().split("__").length - 1]); - if (bl != null) { - AvatarAttribute attr = bl.getAvatarAttributeWithName(block.getName() + "_chData"); - if (attr != null) { - attrsToCheck.add(ch.getOriginPort().getName() + "_chData"); - avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + bl.getName() + "." + block.getName() + - "_chData", ch.getReferenceObject(), attr)); + for (TMLTask origTask : ch.originalOriginTasks) { + AvatarBlock bl = avspec.getBlockWithName(origTask.getName().split("__")[origTask.getName().split("__").length - 1]); + if (bl != null) { + AvatarAttribute attr = bl.getAvatarAttributeWithName(channelData.getName()); + if (attr != null) { + AvatarPragmaSecret avPragmaSecret = + new AvatarPragmaSecret("#Confidentiality " + bl.getName() + "." + channelData.getName(), + ch.getReferenceObject(), attr); + if (!secChannelMap.containsKey(ch)) { + Set<AvatarPragma> tmp = new HashSet<AvatarPragma>(); + secChannelMap.put(ch, tmp); + } + boolean isAvSecretInSet = false; + for (AvatarPragma av : secChannelMap.get(ch)) { + if (av.getName().equals(avPragmaSecret.getName())) { + isAvSecretInSet = true; + break; + } + } + if (!isAvSecretInSet) { + secChannelMap.get(ch).add(avPragmaSecret); } } } } } else { - if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData")) { - AvatarAttribute attr = block.getAvatarAttributeWithName(ch.getOriginPort().getName() + "_chData"); - if (attr != null) { - attrsToCheck.add(ch.getOriginPort().getName() + "_chData"); - avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + ch.getOriginPort().getName() + - "_chData", ch.getReferenceObject(), attr)); + AvatarAttribute attr = block.getAvatarAttributeWithName(channelData.getName()); + if (attr != null) { + AvatarPragmaSecret avPragmaSecret = + new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + channelData.getName(), + ch.getReferenceObject(), attr); + if (!secChannelMap.containsKey(ch)) { + Set<AvatarPragma> tmp = new HashSet<AvatarPragma>(); + secChannelMap.put(ch, tmp); + } + boolean isAvSecretInSet = false; + for (AvatarPragma av : secChannelMap.get(ch)) { + if (av.getName().equals(avPragmaSecret.getName())) { + isAvSecretInSet = true; + break; + } + } + if (!isAvSecretInSet) { + secChannelMap.get(ch).add(avPragmaSecret); } } } @@ -1423,14 +1496,38 @@ public class TML2Avatar { // Add the authenticity pragma for this channel data // To be removed in case another authenticity pragma is used on the channel // Also, to be duplicated for each send / receive + boolean foundEncrytionOp = false; + List<TMLActivityElement> allPrevOfAe = new ArrayList<TMLActivityElement>(); + TMLActivity actDiagram = ch.getOriginTask().getActivityDiagram(); + if (actDiagram.getPrevious(ae) != null) { + allPrevOfAe.add(actDiagram.getPrevious(ae)); + } + if (ae.getSecurityPattern() != null) { + while (!allPrevOfAe.isEmpty()) { + TMLActivityElement prevAe = allPrevOfAe.get(0); + if (actDiagram.getPrevious(prevAe) != null) { + allPrevOfAe.add(actDiagram.getPrevious(prevAe)); + } + if (security && prevAe.getSecurityPattern() != null) { + if (prevAe instanceof TMLActivityElementWithAction) { + if (!((TMLActivityElementWithAction) prevAe).isDecryptionProcess()) { + if (prevAe.getSecurityPattern().equalSpec(ae.getSecurityPattern())) { + foundEncrytionOp = true; + } + } + } + } + allPrevOfAe.remove(prevAe); + } + } if (ch.checkAuth) { - if (autoAuthChans || ae.securityPattern == null) { - if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { + if (!foundEncrytionOp) { + /*if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) { AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null); block.addAttribute(channelData); - } + }*/ AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + reworkStringName(signalState.getName()) + "." + - getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData"), signalState); + channelData.getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(channelData.getName()), signalState); if (signalAuthOriginMap.containsKey(ch.getName())) { signalAuthOriginMap.get(ch.getName()).add(authOrigin); } else { @@ -1439,49 +1536,9 @@ public class TML2Avatar { signalAuthOriginMap.put(ch.getName(), tmp); } } - } - AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block); - - if (ae.securityPattern != null) { - //send nonce - if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { - block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null)); - as.addValue(ae.securityPattern.name); - } - //send encrypted key - else if (!ae.securityPattern.key.isEmpty()) { - as.addValue("encryptedKey_" + ae.securityPattern.key); - AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null); - block.addAttribute(data); - } else { - //send encrypted data - // - if (!ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) { - as.addValue(ae.securityPattern.name + "_encrypted"); - AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null); - block.addAttribute(data); - } else { - //Send unecrypted form - if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null) { - AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null); - block.addAttribute(data); - } - as.addValue(ae.securityPattern.name); - } - if (!secChannelMap.containsKey(ae.securityPattern.name)) { - List<String> tmp = new ArrayList<String>(); - secChannelMap.put(ae.securityPattern.name, tmp); - } - secChannelMap.get(ae.securityPattern.name).add(ch.getName()); - } - } else { - //No security pattern - // TraceManager.addDev("no security pattern for " + ch.getName()); - as.addValue(ch.getOriginPort().getName() + "_chData"); - } tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); elementList.add(signalState); @@ -1496,9 +1553,9 @@ public class TML2Avatar { TMLForLoop loop = (TMLForLoop) ae; if (loop.isInfinite()) { //Make initializaton, then choice state with transitions - List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block, autoAuthChans); + List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block); /*List<AvatarStateMachineElement> afterloop =*/ - translateState(ae.getNextElement(1), block, autoAuthChans); + translateState(ae.getNextElement(1), block); AvatarState initState = new AvatarState(reworkStringName(ae.getName()) + "__init", ae.getReferenceObject(), block); elementList.add(initState); //Build transition to choice @@ -1547,8 +1604,8 @@ public class TML2Avatar { return elementList; } else { //Make initializaton, then choice state with transitions - List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block, autoAuthChans); - List<AvatarStateMachineElement> afterloop = translateState(ae.getNextElement(1), block, autoAuthChans); + List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block); + List<AvatarStateMachineElement> afterloop = translateState(ae.getNextElement(1), block); AvatarState initState = new AvatarState(reworkStringName(ae.getName()) + "__init", ae.getReferenceObject(), block); elementList.add(initState); //Build transition to choice @@ -1615,7 +1672,7 @@ public class TML2Avatar { tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject()); //tran.setGuard(c.getGuard(i)); as.addNext(tran); - List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block, autoAuthChans); + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block); if (nexts.size() > 0) { tran.addNext(nexts.get(0)); elementList.add(tran); @@ -1632,7 +1689,7 @@ public class TML2Avatar { for (int i = 0; i < ae.getNbNext(); i++) { tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject()); as.addNext(tran); - List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block, autoAuthChans); + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block); tran.addNext(nexts.get(0)); elementList.add(tran); elementList.addAll(nexts); @@ -1641,7 +1698,7 @@ public class TML2Avatar { } else { TraceManager.addDev("undefined tml element " + ae); } - List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(0), block, autoAuthChans); + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(0), block); if (nexts.size() == 0) { //in an infinite loop i hope return elementList; @@ -1697,15 +1754,18 @@ public class TML2Avatar { } } - public AvatarSpecification generateAvatarSpec(String _loopLimit, boolean autoAuthChans) { + public AvatarSpecification generateAvatarSpec(String _loopLimit) { - TraceManager.addDev("security patterns " + tmlmodel.secPatterns); - TraceManager.addDev("keys " + tmlmap.mappedSecurity); + TraceManager.addDev("security patterns " + tmlmodel.getSecPatterns()); + TraceManager.addDev("keys " + tmlmap.getMappedSecurity()); //TODO: Make state names readable //TODO: Put back numeric guards //TODO: Calculate for temp variable + + // Reset the ID to ensure IDs are the same as those of the expected specifications + AvatarElement.resetID(); if (tmlmap.getTMLModeling().getReference() != null) { this.avspec = new AvatarSpecification("spec", referenceObject); } else { @@ -1798,29 +1858,29 @@ public class TML2Avatar { } else if (chan.getOriginPort().getName() == null) { TraceManager.addDev("NULL PORT NAME" + chan.getName()); } - AvatarSignal sig = new AvatarSignal(chan.getOriginPort().getName(), AvatarSignal.OUT, chan.getReferenceObject()); + AvatarAttribute channelData = new AvatarAttribute(getName(chan.getName()) + "_chData", AvatarType.INTEGER, block, + null); + AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.OUT, chan.getReferenceObject()); block.addSignal(sig); signals.add(sig); - AvatarAttribute channelData = new AvatarAttribute(chan.getOriginPort().getName() + "_chData", AvatarType.INTEGER, block, - null); - if (block.getAvatarAttributeWithName(chan.getOriginPort().getName() + "_chData") == null) { + + /*if (block.getAvatarAttributeWithName(getName(chan.getOriginPort().getName()) + "_chData") == null) { block.addAttribute(channelData); - } + }*/ sig.addParameter(channelData); signalOutMap.put(chan.getName(), sig); } else if (chan.hasDestinationTask(task)) { - //AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.IN, chan.getReferenceObject()); - AvatarSignal sig = new AvatarSignal(chan.getDestinationPort().getName(), AvatarSignal.IN, chan.getReferenceObject()); + AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.IN, chan.getReferenceObject()); block.addSignal(sig); signals.add(sig); signalInMap.put(chan.getName(), sig); - AvatarAttribute channelData = new AvatarAttribute(chan.getDestinationPort().getName() + "_chData", AvatarType.INTEGER, block, - null); - if (block.getAvatarAttributeWithName(chan.getDestinationPort().getName() + "_chData") == null) { + AvatarAttribute channelData = new AvatarAttribute(getName(chan.getName()) + "_chData", AvatarType.INTEGER, + block, null); + /*if (block.getAvatarAttributeWithName(getName(chan.getDestinationPort().getName()) + "_chData") == null) { block.addAttribute(channelData); - } + }*/ sig.addParameter(channelData); } } @@ -1929,7 +1989,7 @@ public class TML2Avatar { //TMLRequest request= tmlmodel.getRequestToMe(task); //Oh this is fun...let's restructure the state machine //Create own start state, and ignore the returned one - List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block, autoAuthChans); + List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block); AvatarStartState ss = new AvatarStartState("start", task.getActivityDiagram().get(0).getReferenceObject(), block); asm.addElement(ss); AvatarTransition at = new AvatarTransition(block, "__after_start", task.getActivityDiagram().get(0).getReferenceObject()); @@ -2039,7 +2099,7 @@ public class TML2Avatar { } else { //Not requested - List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block, autoAuthChans); + List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block); for (AvatarStateMachineElement e : elementList) { e.setName(processName(e.getName(), e.getID())); asm.addElement(e); @@ -2047,62 +2107,122 @@ public class TML2Avatar { } asm.setStartState((AvatarStartState) elementList.get(0)); } - for (SecurityPattern secPattern : secPatterns) { - AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name); - if (sec != null) { - boolean checkAuthSecPattern = false; - for (TMLChannel ch : tmlmodel.getChannels(task)) { - if (ch.hasOriginTask(task) && ch.isCheckConfChannel()) { - for (TMLActivityElement actElem : task.getActivityDiagram().getElements()) { - if (actElem instanceof TMLWriteChannel) { - TMLWriteChannel wc = (TMLWriteChannel) actElem; - if (wc != null && wc.hasChannel(ch) && actElem.securityPattern != null - && actElem.securityPattern.getName().equals(secPattern.getName())) { - checkAuthSecPattern = true; - break; + + } + + for (SecurityPattern secPattern : secPatternPragmaMap.keySet()) { + for (TMLTask task : tmlmodel.getTasks()) { + for (TMLChannel ch : tmlmodel.getChannels(task)) { + if (ch.hasOriginTask(task) && ch.isCheckConfChannel()) { + for (TMLActivityElement actElem : task.getActivityDiagram().getElements()) { + if (actElem instanceof TMLWriteChannel) { + TMLWriteChannel wc = (TMLWriteChannel) actElem; + if (wc.hasChannel(ch) && actElem.getSecurityPattern() != null + && actElem.getSecurityPattern().getName().equals(secPattern.getName())) { + if (!secChannelMap.containsKey(ch)) { + Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>(); + secChannelMap.put(ch, tmp0); } + boolean isAvSecretInSet = false; + for (AvatarPragma av : secChannelMap.get(ch)) { + if (av.getName().equals(secPatternPragmaMap.get(secPattern).getName())) { + isAvSecretInSet = true; + break; + } + } + if (!isAvSecretInSet) { + secChannelMap.get(ch).add(secPatternPragmaMap.get(secPattern)); + } + break; } } } } - //sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null); - //AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null); - // block.addAttribute(sec); - // block.addAttribute(enc); - //} - if (checkAuthSecPattern) { - avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.name, null, sec)); - } } } - } // Add authenticity pragmas for (String s : signalAuthOriginMap.keySet()) { for (AvatarAttributeState attributeStateOrigin : signalAuthOriginMap.get(s)) { if (signalAuthDestMap.containsKey(s)) { - for (AvatarAttributeState attributeStateDest : signalAuthDestMap.get(s)) { + for (AvatarAttributeState attributeStateDest : signalAuthDestMap.get(s)) { AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity( "#Authenticity " + attributeStateOrigin.getName() + " " + attributeStateDest.getName(), attributeStateOrigin.getReferenceObject(), attributeStateOrigin, attributeStateDest); - if (secChannelMap.containsKey(s)) { - for (String channel : secChannelMap.get(s)) { - TMLChannel ch = tmlmodel.getChannelByShortName(channel); - if (ch != null) { - if (ch.checkAuth) { - avspec.addPragma(pragma); + TMLChannel ch = tmlmodel.getChannelByShortName(s); + if (ch != null && ch.checkAuth) { + if (channelsSecAttributes.containsKey(ch) && channelsSecAttributes.get(ch).contains(attributeStateOrigin.getAttribute().getName())) { + if (!secChannelMap.containsKey(ch)) { + Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>(); + secChannelMap.put(ch, tmp0); + } + boolean isAvSecretInSet = false; + for (AvatarPragma av : secChannelMap.get(ch)) { + if (av.getName().equals(pragma.getName())) { + isAvSecretInSet = true; break; } } + if (!isAvSecretInSet) { + secChannelMap.get(ch).add(pragma); + } + } + } + for (SecurityPattern sec : secPatterns) { + if (sec.getName().equals(s)) { + for (TMLChannel chSec : channelsSecAttributes.keySet()) { + if (channelsSecAttributes.get(chSec).contains(sec.getName())) { + if (chSec.checkAuth) { + if (!secChannelMap.containsKey(chSec)) { + Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>(); + secChannelMap.put(chSec, tmp0); + } + boolean isAvSecretInSet = false; + for (AvatarPragma av : secChannelMap.get(chSec)) { + if (av.getName().equals(pragma.getName())) { + isAvSecretInSet = true; + break; + } + } + if (!isAvSecretInSet) { + secChannelMap.get(chSec).add(pragma); + } + } + } + } } - } else { - avspec.addPragma(pragma); } } } } } + List<AvatarPragma> avPragmas = new ArrayList<AvatarPragma>(); + for (TMLChannel ch : secChannelMap.keySet()) { + for (AvatarPragma avPragma : secChannelMap.get(ch)) { + boolean isAvSecretInSet = false; + for (AvatarPragma av : avspec.getPragmas()) { + if (av.getName().equals(avPragma.getName())) { + isAvSecretInSet = true; + break; + } + } + if (!isAvSecretInSet) { + avPragmas.add(avPragma); + } + } + } + // Put AvatarPragmaAuthenticity pragmas at the end of the list. + List<AvatarPragma> avPragmasToMove = new ArrayList<AvatarPragma>(); + for (int indexAvPragmas=0; indexAvPragmas < avPragmas.size(); indexAvPragmas++){ + AvatarPragma avPragma = avPragmas.get(indexAvPragmas); + if (avPragma instanceof AvatarPragmaAuthenticity) { + avPragmasToMove.add(avPragma); + } + } + avPragmas.removeAll(avPragmasToMove); + avPragmas.addAll(avPragmasToMove); + avspec.getPragmas().addAll(avPragmas); //Create relations //Channels are ?? to ?? @@ -2480,7 +2600,7 @@ public class TML2Avatar { } for (SecurityPattern sp : keysPublicBus) { - for (TMLTask taskPattern : tmlmodel.securityTaskMap.get(sp)) { + for (TMLTask taskPattern : tmlmodel.getSecurityTaskMap().get(sp)) { AvatarBlock b = taskBlockMap.get(taskPattern); AvatarAttribute attrib = b.getAvatarAttributeWithName("key_"+sp.getName()); if (attrib!=null) { @@ -2506,15 +2626,15 @@ public class TML2Avatar { } } - tmlmap.getTMLModeling().secChannelMap = secChannelMap; + tmlmap.getTMLModeling().setSecChannelMap(secChannelMap); // System.out.println("avatar spec\n" +avspec); return avspec; } - public AvatarSpecification generateAvatarSpec(String _loopLimit) { +/* public AvatarSpecification generateAvatarSpec(String _loopLimit) { return generateAvatarSpec(_loopLimit, false); - } + }*/ public void backtraceReachability(Map<AvatarPragmaReachability, ProVerifQueryResult> reachabilityResults) { for (AvatarPragmaReachability pragma : reachabilityResults.keySet()) { @@ -2576,8 +2696,8 @@ public class TML2Avatar { for (TMLActivityElement actElem : t.getActivityDiagram().getElements()) { if (actElem instanceof TMLReadChannel) { TMLReadChannel rc = (TMLReadChannel) actElem; - if (rc.hasChannel(ch) && actElem.securityPattern != null - && actElem.securityPattern.getName().equals(dec.getSecurityContext())) { + if (rc.hasChannel(ch) && actElem.getSecurityPattern() != null + && actElem.getSecurityPattern().getName().equals(dec.getSecurityContext())) { dec.setAuthCheck(ch.checkAuth); break chDestinationTask; } @@ -2602,8 +2722,8 @@ public class TML2Avatar { for (TMLTask t : accessKeys.keySet()) { AvatarBlock b = taskBlockMap.get(t); for (SecurityPattern sp : accessKeys.get(t)) { - if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN)) { - AvatarAttribute key = new AvatarAttribute("key_" + sp.name, AvatarType.INTEGER, b, null); + if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN)) { + AvatarAttribute key = new AvatarAttribute("key_" + sp.getName(), AvatarType.INTEGER, b, null); if (symKeys.containsKey(sp)) { symKeys.get(sp).add(key); } else { @@ -2612,11 +2732,11 @@ public class TML2Avatar { symKeys.put(sp, tmp); } b.addAttribute(key); - } else if (sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { - AvatarAttribute pubkey = new AvatarAttribute("pubKey_" + sp.name, AvatarType.INTEGER, b, null); + } else if (sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + AvatarAttribute pubkey = new AvatarAttribute("pubKey_" + sp.getName(), AvatarType.INTEGER, b, null); b.addAttribute(pubkey); - AvatarAttribute privkey = new AvatarAttribute("privKey_" + sp.name, AvatarType.INTEGER, b, null); + AvatarAttribute privkey = new AvatarAttribute("privKey_" + sp.getName(), AvatarType.INTEGER, b, null); b.addAttribute(privkey); avspec.addPragma(new AvatarPragmaPrivatePublicKey("#PrivatePublicKeys " + b.getName() + " " + privkey.getName() + " " + pubkey.getName(), null, privkey, pubkey)); @@ -2630,7 +2750,7 @@ public class TML2Avatar { //Distribute public key everywhere for (TMLTask task2 : tasks) { AvatarBlock b2 = taskBlockMap.get(task2); - pubkey = new AvatarAttribute("pubKey_" + sp.name, AvatarType.INTEGER, b2, null); + pubkey = new AvatarAttribute("pubKey_" + sp.getName(), AvatarType.INTEGER, b2, null); b2.addAttribute(pubkey); if (pubKeys.containsKey(sp)) { pubKeys.get(sp).add(pubkey); diff --git a/src/main/java/ui/ActivityDiagram2TMLTranslator.java b/src/main/java/ui/ActivityDiagram2TMLTranslator.java index 118ec4a97d..c1dee03406 100644 --- a/src/main/java/ui/ActivityDiagram2TMLTranslator.java +++ b/src/main/java/ui/ActivityDiagram2TMLTranslator.java @@ -28,7 +28,7 @@ public class ActivityDiagram2TMLTranslator { final List<String> removedRequests, final boolean considerExecOperators, final boolean considerTimeOperators) - throws MalformedTMLDesignException { + throws MalformedTMLDesignException, TMLCheckingError { //TraceManager.addDev("*********************** Consider time operators: " + considerTimeOperators); @@ -198,11 +198,10 @@ public class ActivityDiagram2TMLTranslator { ce.setTGComponent(tgc); checkingErrors.add(ce); } else { - tmlexecc.securityPattern = new SecurityPattern(sp); - tmlexecc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); - tmlexecc.setAction(Integer.toString(sp.encTime));; + tmlexecc.setSecurityPattern(sp); + tmlexecc.setAction(Integer.toString(sp.getEncTime()));; ((BasicErrorHighlight) tgc).setStateAction(ErrorHighlight.OK); - tmlm.securityTaskMap.get(sp).add(tmltask); + tmlm.getSecurityTaskMap().get(sp).add(tmltask); corrTgElement.addCor(tmlexecc, tgc); } } else if (tgc instanceof TMLADDecrypt) { @@ -216,12 +215,12 @@ public class ActivityDiagram2TMLTranslator { ce.setTGComponent(tgc); checkingErrors.add(ce); } else { - tmlexecc.securityPattern = new SecurityPattern(sp); - tmlexecc.setAction(Integer.toString(sp.decTime)); - tmlexecc.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); + tmlexecc.setSecurityPattern(sp); + tmlexecc.setAction(Integer.toString(sp.getDecTime())); + tmlexecc.setDecryptionProcess(true); ((BasicErrorHighlight) tgc).setStateAction(ErrorHighlight.OK); corrTgElement.addCor(tmlexecc, tgc); - tmlm.securityTaskMap.get(sp).add(tmltask); + tmlm.getSecurityTaskMap().get(sp).add(tmltask); } } else if (tgc instanceof TMLADExecC) { @@ -379,7 +378,7 @@ public class ActivityDiagram2TMLTranslator { tmlreadchannel.addChannel(channel); //security pattern if (securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext()) != null) { - tmlreadchannel.securityPattern = securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext()); + tmlreadchannel.setSecurityPattern(securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext())); //NbOfSamples will increase due to extra overhead from MAC /*int cur=1; try { @@ -388,13 +387,13 @@ public class ActivityDiagram2TMLTranslator { } catch(NullPointerException e) { }*/ String curS = modifyString(((TMLADReadChannel) tgc).getSamplesValue()); - String addS = "" + tmlreadchannel.securityPattern.overhead; + String addS = "" + tmlreadchannel.getSecurityPattern().getOverhead(); //int add = Integer.valueOf(tmlreadchannel.securityPattern.overhead); - if (!tmlreadchannel.securityPattern.nonce.equals("")) { - SecurityPattern nonce = securityPatterns.get(tmlreadchannel.securityPattern.nonce); + if (!tmlreadchannel.getSecurityPattern().getNonce().equals("")) { + SecurityPattern nonce = securityPatterns.get(tmlreadchannel.getSecurityPattern().getNonce()); if (nonce != null) { //add = Integer.valueOf(nonce.overhead); - addS = "" + nonce.overhead; + addS = "" + nonce.getOverhead(); } } //cur = cur+ add; @@ -786,16 +785,15 @@ public class ActivityDiagram2TMLTranslator { //} //add sec pattern if (securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext()) != null) { - tmlwritechannel.securityPattern = - securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext()); + tmlwritechannel.setSecurityPattern(securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext())); String curS = modifyString(((TMLADWriteChannel) tgc).getSamplesValue()); - String addS = "" + tmlwritechannel.securityPattern.overhead; + String addS = "" + tmlwritechannel.getSecurityPattern().getOverhead(); //int cur = Integer.valueOf(modifyString(((TMLADWriteChannel)tgc).getSamplesValue())); //int add = Integer.valueOf(tmlwritechannel.securityPattern.overhead); - if (!tmlwritechannel.securityPattern.nonce.equals("")) { - SecurityPattern nonce = securityPatterns.get(tmlwritechannel.securityPattern.nonce); + if (!tmlwritechannel.getSecurityPattern().getNonce().equals("")) { + SecurityPattern nonce = securityPatterns.get(tmlwritechannel.getSecurityPattern().getNonce()); if (nonce != null) { - addS = "" + nonce.overhead; + addS = "" + nonce.getOverhead(); //add = Integer.valueOf(nonce.overhead); } } diff --git a/src/main/java/ui/DrawerTMAPModeling.java b/src/main/java/ui/DrawerTMAPModeling.java index b7f371d441..93d5dec7c0 100644 --- a/src/main/java/ui/DrawerTMAPModeling.java +++ b/src/main/java/ui/DrawerTMAPModeling.java @@ -415,7 +415,7 @@ public class DrawerTMAPModeling { @SuppressWarnings("unchecked") private void makeSecurityMapping(TMLMapping tmap, TMLArchiDiagramPanel panel) throws MalformedTMLDesignException { - for(Object obj: tmap.mappedSecurity.keySet()) { + for(Object obj: tmap.getMappedSecurity().keySet()) { if (obj instanceof SecurityPattern) { SecurityPattern sp = (SecurityPattern) obj; List<HwMemory> mems = tmap.getListBySecurityPattern(sp); diff --git a/src/main/java/ui/DrawerTMLModeling.java b/src/main/java/ui/DrawerTMLModeling.java index 11bc33f227..05a60db6d1 100644 --- a/src/main/java/ui/DrawerTMLModeling.java +++ b/src/main/java/ui/DrawerTMLModeling.java @@ -592,33 +592,30 @@ public class DrawerTMLModeling { } else if (elt instanceof TMLExecC) { TMLExecC execc = (TMLExecC) elt; - if (elt.securityPattern != null) { - TraceManager.addDev("Found security pattern: " + elt.securityPattern.toXML() + " originTask: " + - elt.securityPattern.originTask + " comp:" + comp.getValue() + "\n"); - if (elt.securityPattern.originTask.compareTo(comp.getValue()) == 0) { + if (elt.getSecurityPattern() != null) { + TraceManager.addDev("Found security pattern: " + elt.getSecurityPattern().toXML() + " comp:" + comp.getValue() + "\n"); + if (!execc.isDecryptionProcess()) { TMLADEncrypt encrypt = new TMLADEncrypt(firstGUI.getX(), firstGUI.getY() + getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); - encrypt.setName(elt.securityPattern.getName()); - encrypt.securityContext = elt.securityPattern.getName(); - encrypt.type = elt.securityPattern.type; - encrypt.message_overhead = "" + elt.securityPattern.overhead; - encrypt.size = "" + elt.securityPattern.size; - encrypt.encTime = "" + elt.securityPattern.encTime; - encrypt.decTime = "" + elt.securityPattern.decTime; - encrypt.nonce = "" + elt.securityPattern.nonce; - encrypt.formula = "" + elt.securityPattern.formula; - encrypt.key = "" + elt.securityPattern.key; - encrypt.algorithm = "" + elt.securityPattern.algorithm; - - + encrypt.setName(elt.getSecurityPattern().getName()); + encrypt.securityContext = elt.getSecurityPattern().getName(); + encrypt.type = elt.getSecurityPattern().getType(); + encrypt.message_overhead = "" + elt.getSecurityPattern().getOverhead(); + encrypt.size = "" + elt.getSecurityPattern().getSize(); + encrypt.encTime = "" + elt.getSecurityPattern().getEncTime(); + encrypt.decTime = "" + elt.getSecurityPattern().getDecTime(); + encrypt.nonce = "" + elt.getSecurityPattern().getNonce(); + encrypt.formula = "" + elt.getSecurityPattern().getFormula(); + encrypt.key = "" + elt.getSecurityPattern().getKey(); + encrypt.algorithm = "" + elt.getSecurityPattern().getAlgorithm(); return encrypt; } else { TMLADDecrypt decrypt = new TMLADDecrypt(firstGUI.getX(), firstGUI.getY() + getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); - decrypt.setName(elt.securityPattern.getName()); - decrypt.securityContext = elt.securityPattern.getName(); + decrypt.setName(elt.getSecurityPattern().getName()); + decrypt.securityContext = elt.getSecurityPattern().getName(); return decrypt; @@ -699,8 +696,8 @@ public class DrawerTMLModeling { read.setChannelName(getSplitName(readT.getChannel(0).getName(), false)); read.setSamples(readT.getNbOfSamples()); - if (readT.securityPattern != null) { - read.setSecurityContext(readT.securityPattern.name); + if (readT.getSecurityPattern() != null) { + read.setSecurityContext(readT.getSecurityPattern().getName()); // read.setEncForm(readT.getEncForm()); read.setIsAttacker(readT.isAttacker()); } @@ -745,8 +742,8 @@ public class DrawerTMLModeling { write.setChannelName(getSplitName(writeT.getChannel(0).getName(), true)); write.setSamples(writeT.getNbOfSamples()); - if (writeT.securityPattern != null) { - write.setSecurityContext(writeT.securityPattern.name); + if (writeT.getSecurityPattern() != null) { + write.setSecurityContext(writeT.getSecurityPattern().getName()); // write.setEncForm(writeT.getEncForm()); write.setIsAttacker(writeT.isAttacker()); } diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java index 460b150484..1393f70e00 100644 --- a/src/main/java/ui/GTMLModeling.java +++ b/src/main/java/ui/GTMLModeling.java @@ -295,7 +295,7 @@ public class GTMLModeling { generateTasksActivityDiagrams(); removeActionsWithDollars(); removeActionsWithRecords(); - } catch (MalformedTMLDesignException mtmlde) { + } catch (MalformedTMLDesignException | TMLCheckingError mtmlde) { TraceManager.addDev("Modeling error:" + mtmlde.getMessage()); } @@ -369,6 +369,8 @@ public class GTMLModeling { removeActionsWithRecords(); } catch (MalformedTMLDesignException mtmlde) { TraceManager.addDev("Modeling error:" + mtmlde.getMessage()); + } catch (TMLCheckingError e) { + TraceManager.addDev("Modeling error:" + e.getMessage()); } //TraceManager.addDev("Checking syntax 2 of TML"); @@ -1639,17 +1641,17 @@ public class GTMLModeling { if (tgc instanceof TMLADEncrypt) { if (!((TMLADEncrypt) tgc).securityContext.isEmpty()) { SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt) tgc).securityContext, ((TMLADEncrypt) tgc).type, ((TMLADEncrypt) tgc).message_overhead, ((TMLADEncrypt) tgc).size, ((TMLADEncrypt) tgc).encTime, ((TMLADEncrypt) tgc).decTime, ((TMLADEncrypt) tgc).nonce, ((TMLADEncrypt) tgc).formula, ((TMLADEncrypt) tgc).key); - securityPatterns.put(securityPattern.name, securityPattern); + securityPatterns.put(securityPattern.getName(), securityPattern); tmlm.addSecurityPattern(securityPattern); ArrayList<TMLTask> l = new ArrayList<TMLTask>(); - tmlm.securityTaskMap.put(securityPattern, l); + tmlm.getSecurityTaskMap().put(securityPattern, l); //TraceManager.addDev("Adding Security Pattern " + securityPattern.name); } } } } - private void generateTasksActivityDiagrams() throws MalformedTMLDesignException { + private void generateTasksActivityDiagrams() throws MalformedTMLDesignException, TMLCheckingError { TMLTask tmltask; //First generate security patterns over all tasks @@ -3121,12 +3123,12 @@ public class GTMLModeling { //TraceManager.addDev("Exploring key " + key.getValue()); SecurityPattern sp = tmlm.getSecurityPattern(key.getValue()); if (sp != null && node instanceof HwMemory) { - if (map.mappedSecurity.containsKey(sp)) { - map.mappedSecurity.get(sp).add((HwMemory) node); + if (map.getMappedSecurity().containsKey(sp)) { + map.getMappedSecurity().get(sp).add((HwMemory) node); } else { ArrayList<HwMemory> mems = new ArrayList<HwMemory>(); mems.add((HwMemory) node); - map.mappedSecurity.put(sp, mems); + map.getMappedSecurity().put(sp, mems); //TraceManager.addDev("Added key of " + key.getValue()); } } else { diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index d245a5fded..071d96ae20 100644 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -2001,12 +2001,12 @@ public class GTURTLEModeling { // links = tmap.getArch().getHwLinks(); //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, map them TMLModeling<TGComponent> tmlm = tmap.getTMLModeling(); - if (tmlm.securityTaskMap == null) { + if (tmlm.getSecurityTaskMap() == null) { return; } - for (SecurityPattern sp : tmlm.securityTaskMap.keySet()) { - if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN) || sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { - for (TMLTask t : tmlm.securityTaskMap.get(sp)) { + for (SecurityPattern sp : tmlm.getSecurityTaskMap().keySet()) { + if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN) || sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + for (TMLTask t : tmlm.getSecurityTaskMap().get(sp)) { HwExecutionNode node1 = tmap.getHwNodeOf(t); boolean taskMappedToCPU = false; if (node1!=null) { @@ -2029,7 +2029,7 @@ public class GTURTLEModeling { memNodeToMap = (TMLArchiMemoryNode) listE.getTG(linkBus.hwnode); List<TMLArchiKey> keys = memNodeToMap.getKeyList(); for (TMLArchiKey key : keys) { - if (key.getValue().equals(sp.name)) { + if (key.getValue().equals(sp.getName())) { keyFound = true; keyMappedtoMem = true; break outer; @@ -2041,9 +2041,9 @@ public class GTURTLEModeling { if (!keyFound) { if (memNodeToMap != null) { TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, memNodeToMap, memNodeToMap.tdp); - key.setReferenceKey(sp.name); + key.setReferenceKey(sp.getName()); key.makeFullValue(); - TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName()); + TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName()); memNodeToMap.addSwallowedTGComponent(key, 10, 10); memNodeToMap.tdp.repaint(); keyMappedtoMem = true; @@ -2075,9 +2075,9 @@ public class GTURTLEModeling { links.add(newLink); TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, null, memNodeToMap.tdp); - key.setReferenceKey(sp.name); + key.setReferenceKey(sp.getName()); key.makeFullValue(); - TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName()); + TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName()); memNodeToMap.addSwallowedTGComponent(key, 10, 10); memNodeToMap.tdp.repaint(); keyMappedtoMem = true; @@ -2126,9 +2126,9 @@ public class GTURTLEModeling { listE.addCor(newHwMemory, memNodeToMap); TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, null, memNodeToMap.tdp); - key.setReferenceKey(sp.name); + key.setReferenceKey(sp.getName()); key.makeFullValue(); - TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName()); + TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName()); memNodeToMap.addSwallowedTGComponent(key, 10, 10); memNodeToMap.tdp.repaint(); keyMappedtoMem = true; diff --git a/src/main/java/ui/HSMGeneration.java b/src/main/java/ui/HSMGeneration.java index 34ffce8221..82e85af470 100644 --- a/src/main/java/ui/HSMGeneration.java +++ b/src/main/java/ui/HSMGeneration.java @@ -262,13 +262,13 @@ public class HSMGeneration implements Runnable { channelInstances.add(tg); SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.getSecurityContext()); int type = -1; - if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { + if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) { type = HSMChannel.SENC; - } else if (sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { + } else if (sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) { type = HSMChannel.AENC; - } else if (sp.type.equals(SecurityPattern.MAC_PATTERN)) { + } else if (sp.getType().equals(SecurityPattern.MAC_PATTERN)) { type = HSMChannel.MAC; - } else if (sp.type.equals(SecurityPattern.NONCE_PATTERN)) { + } else if (sp.getType().equals(SecurityPattern.NONCE_PATTERN)) { type = HSMChannel.NONCE; } HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type); diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index a72c6fa96a..bf1ea9dbac 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -1907,7 +1907,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per Date date = new Date(); suffix = dateFormat.format(date); } - String tabName = title + "_" + suffix; + String tabName = title + suffix; TraceManager.addDev("Draw TML Spec 1"); int index = createTMLComponentDesign(tabName); TraceManager.addDev("Draw TML Spec 2"); @@ -1924,7 +1924,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per Date date = new Date(); suffix = dateFormat.format(date); } - String tabName = title + "_" + suffix; + String tabName = title + suffix; TraceManager.addDev("Draw TMAP Spec 1"); int index = createTMLArchitecture(tabName + "_Mapping"); TraceManager.addDev("Draw TMAP Spec 2"); diff --git a/src/main/java/ui/SecurityGeneration.java b/src/main/java/ui/SecurityGeneration.java index bab318ccf8..8f6b09a616 100644 --- a/src/main/java/ui/SecurityGeneration.java +++ b/src/main/java/ui/SecurityGeneration.java @@ -85,7 +85,7 @@ public class SecurityGeneration implements Runnable { } TML2Avatar t2a = new TML2Avatar(newMap, false, true, o); - AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", this.autoWeakAuth||this.autoStrongAuth); + AvatarSpecification avatarspec = t2a.generateAvatarSpec("1"); if (avatarspec == null) { TraceManager.addDev("No avatar spec"); return; diff --git a/src/main/java/ui/window/JDialogProverifVerification.java b/src/main/java/ui/window/JDialogProverifVerification.java index 01d8bf773f..af4f9a1ced 100644 --- a/src/main/java/ui/window/JDialogProverifVerification.java +++ b/src/main/java/ui/window/JDialogProverifVerification.java @@ -1768,10 +1768,10 @@ public class JDialogProverifVerification extends JDialog implements ActionListen this.rshc.sendExecuteCommandRequest(); RshClientReader reader = this.rshc.getDataReaderFromProcess(); - if (this.pvoa == null) { + //if (this.pvoa == null) { this.pvoa = mgui.gtm.getProVerifOutputAnalyzer(); this.pvoa.addListener(this); - } + //} //try { this.pvoa.analyzeOutput(reader, typedLanguage.isSelected()); /*} catch (Exception e) { diff --git a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java index d7d0e55841..06d8b95e2b 100644 --- a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java +++ b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java @@ -43,25 +43,23 @@ public class DiplodocusSecurityTest extends AbstractTest { final String [] MODELS_DIPLO_SECURITY = {"symetric", "nonce", "keyexchange", "mac"}; private static final List<List<String>> LIST_OF_LISTS_OF_QUERIES = Arrays.asList( - Arrays.asList("Query not attacker(Alice___SymmetricExchange__comm_chData[!1 = v]) is true.", - "Query inj-event(authenticity___Bob___SymmetricExchange__comm_chData___aftersignalstate_SymmetricExchange_comm_" + - "SymmetricExchange_comm(dummyM)) ==> inj-event(authenticity___Alice___SymmetricExchange__comm_chData" + - "___signalstate_SymmetricExchange_comm_SymmetricExchange_comm(dummyM)) is false."), - Arrays.asList("Query not attacker(Alice___nonce__comm_chData[!1 = v]) is true.", - "Query inj-event(authenticity___Bob___nonce__comm_chData___aftersignalstate_nonce_comm_nonce_comm(dummyM)) ==> inj-event" + - "(authenticity___Alice___nonce__comm_chData___signalstate_nonce_comm_nonce_comm(dummyM)) is false."), - Arrays.asList("Query not attacker(Alice___KeyExchange__comm_chData[!1 = v]) is true.", "RESULT inj-event" + - "(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_comm283" + - "(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData___signalstate_KeyExchange_comm_KeyExchange_comm239" + - "(dummyM)) is true.", "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm" + - "_KeyExchange_comm283(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData" + - "___signalstate_KeyExchange_comm_KeyExchange_comm239(dummyM)) is true.", - "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_", - "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_comm(dummyM)) " + - "==> inj-event(authenticity___Alice___KeyExchange__comm_chData___signalstate_KeyExchange_comm_KeyExchange_comm(dummyM)) is false"), - Arrays.asList("Query not attacker(Alice___MAC__comm_chData[!1 = v]) is true.", - "Query inj-event(authenticity___Bob___MAC__comm_chData___aftersignalstate_MAC_comm_MAC_comm(dummyM)) ==> inj-event(authenticity" + - "___Alice___MAC__comm_chData___signalstate_MAC_comm_MAC_comm(dummyM)) is false") + Arrays.asList("Query not attacker(Alice___sym_encrypted[!1 = v]) is true.", + "Query not attacker(Alice___sym[!1 = v]) is true.", + "Query inj-event(authenticity___Bob___sym___decrypt_sym_dummy(dummyM))" + + " ==> inj-event(authenticity___Alice___sym____encrypt_sym(dummyM)) is false."), + Arrays.asList("Query not attacker(Alice___symN[!1 = v]) is true.", + "Query not attacker(Alice___symN_encrypted[!1 = v]) is true.", + "Query inj-event(authenticity___Bob___symN___decrypt_symN_dummy(dummyM)) ==> inj-event" + + "(authenticity___Alice___symN____encrypt_symN(dummyM)) is true."), + Arrays.asList("Query not attacker(Alice___symKey[!1 = v]) is true.", + "Query not attacker(Alice___symKey_encrypted[!1 = v]) is true.", + "Query not attacker(Alice___encryptedKey_symKey[!1 = v]) is true.", + "Query inj-event(authenticity___Bob___symKey___decrypt_symKey_dummy(dummyM)) ==>" + + " inj-event(authenticity___Alice___symKey____encrypt_symKey(dummyM)) is false."), + Arrays.asList("Query not attacker(Alice___mac[!1 = v]) is false.", + "Query not attacker(Alice___mac_encrypted[!1 = v]) is true.", + "Query inj-event(authenticity___Bob___mac___decrypt_mac_dummy(dummyM)) ==> inj-event(authenticity" + + "___Alice___mac____encrypt_mac(dummyM)) is false.") ); private static final String PROVERIF_SUMMARY = "Verification summary:"; private static final String PROVERIF_QUERY = "Query"; @@ -145,7 +143,7 @@ public class DiplodocusSecurityTest extends AbstractTest { o = ((TGComponent)(tmap.getTMLModeling().getReference())).getTDiagramPanel().tp; } TML2Avatar t2a = new TML2Avatar(tmap, false, true, o); - AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", true); + AvatarSpecification avatarspec = t2a.generateAvatarSpec("1"); AVATAR2ProVerif avatar2proverif = new AVATAR2ProVerif(avatarspec); ProVerifSpec proverif = avatar2proverif.generateProVerif(true, true, 0, true, true); diff --git a/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java b/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java index 1f2094e841..a6ca771f4a 100644 --- a/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java +++ b/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java @@ -402,8 +402,8 @@ public class TMLComparingMethodTest extends AbstractTest { secuPt12 = new SecurityPattern("securityPattern1","Symmetric Encryption","5","128", "100", "100", "None", "formula1", "Key1"); - secuPt9.originTask = "OriginTask"; - secuPt10.algorithm = "EDF"; + //secuPt9.setOriginTask("OriginTask"); + secuPt10.setAlgorithm("EDF"); } private void createTMLTaskForTestingConfigs() { @@ -526,7 +526,7 @@ public class TMLComparingMethodTest extends AbstractTest { assertFalse(securityPattern1.equalSpec(secuPt6)); assertFalse(securityPattern1.equalSpec(secuPt7)); assertFalse(securityPattern1.equalSpec(secuPt8)); - assertFalse(securityPattern1.equalSpec(secuPt9)); + //assertFalse(securityPattern1.equalSpec(secuPt9)); assertFalse(securityPattern1.equalSpec(secuPt10)); assertFalse(securityPattern1.equalSpec(secuPt11)); assertTrue(securityPattern1.equalSpec(secuPt12)); diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml index 6de0229a51..b2f8cb6be8 100644 --- a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml @@ -19,7 +19,7 @@ TASK KeyExchange__Alice //Local variables //Behavior - EXECC 100 aenc AE 100 100 0 0 - - 1 + EXECC 100 aenc AE 100 100 0 symKey - symKey 1 WRITE KeyExchange__comm 1+0 aenc EXECC 100 symKey SE 100 100 0 0 - - 1 WRITE KeyExchange__comm 1+0 symKey @@ -31,7 +31,7 @@ TASK KeyExchange__Bob //Behavior READ KeyExchange__comm 1+0 aenc - EXECC 100 aenc AE 100 100 0 0 - - 2 + EXECC 100 aenc AE 100 100 0 symKey - symKey 2 READ KeyExchange__comm 1+0 symKey EXECC 100 symKey SE 100 100 0 0 - - 2 ENDTASK diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml index e3d8d17e7e..739a42de72 100644 --- a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml @@ -22,7 +22,7 @@ TASK nonce__Alice //Behavior READ nonce__nonce_ch 1+0 n - EXECC 100 symN SE 100 100 0 0 - - 1 + EXECC 100 symN SE 100 100 0 0 n - 1 WRITE nonce__comm 1+0 symN ENDTASK @@ -34,6 +34,6 @@ TASK nonce__Bob EXECC 100 n NONCE 100 100 0 11 - - 1 WRITE nonce__nonce_ch 1+0 n READ nonce__comm 1+0 symN - EXECC 100 symN SE 100 100 0 0 - - 2 + EXECC 100 symN SE 100 100 0 0 n - 2 ENDTASK -- GitLab