getEndNodes() {
- return this.endNodes;
- }
- }
-
- /**
- * This method builds a {@link SubStateMachine} equivalent to the given {@link Order}.
- *
- * It is called recursively For a collection of start nodes, which must already be added to
- * the {@link StateMachineGraph} result.
- *
- * @param order The CrySL {@link Order} Expression to build the {@link SubStateMachine} for.
- * @param startNodes Set of nodes used as the startNodes of this {@link SubStateMachine}.
- * @return the {@link SubStateMachine} representing this {@link Order} Expression
- *
Having a look at the Crysl Xtext definition for the Order section, we have -----------
- *
- * Sequence returns Order:
- * Alternative ({Order.left=current} op=SequenceOperator right=Alternative)*
- * ;
- *
- * enum SequenceOperator returns OrderOperator:
- * SEQUENCE = ','
- * ;
- *
- * Alternative returns Order:
- * Cardinality ({Order.left=current} op=AlternativeOperator right=Cardinality)*
- * ;
- *
- * enum AlternativeOperator returns OrderOperator:
- * ALTERNATIVE = '|'
- * ;
- *
- * Cardinality returns Order:
- * Primary ({Order.left=current} op = CardinalityOperator)?
- * ;
- *
- * enum CardinalityOperator returns OrderOperator:
- * ZERO_OR_MORE = '*' | ONE_OR_MORE = '+' | ZERO_OR_ONE = '?'
- * ;
- *
- * Primary returns Order:
- * {Primary} event = [Event]
- * | '(' Order ')'
- * ;
- *
-----------
- *
Based on this definition, the method will build the StateMachine from the Order
- * section.
- *
This is done by recursively building a sub-StateMachine and connecting it with given
- * start Nodes and returned end Nodes according to the specific OrderOperator.
- *
Therefore, consider the following cases
- *
1. Order instanceof Primary: In this case, we create a new Node and add an Transistion
- * for the Event from each start Node to the newly created Node. Finally, we return a
- * SubStateMachine where the newly created node is the start and end Node.
- *
2. OrderOperator == SEQUENCE: The left-side should occur before the right-side. We
- * therefore recursively build the sub-StateMachine of the left-side with the given start
- * Nodes saving the returned end Nodes. We then build the sub-StateMachine of the right-side
- * giving it the left-side's end Nodes as start Nodes. Finally, we return the startNodes of
- * the left-side's start Nodes as our start Nodes and the end Nodes of the right-side's
- * sub-StateMachine as our end Nodes.
- *
3. OrderOperator == ALTERNATIVE: Either the left-side or the right-side should occur.
- * We therefore build both sub-StateMachines with our start Nodes as start Nodes. Finally,
- * we return the aggregate of both start Nodes as our startNodes and the aggregates of both
- * end Nodes as our end Nodes.
- *
4. OrderOperator == ZERO_OR_ONE: The Event can occur or be skipped. We therefore build
- * the sub-StateMachine (only the left-side is present) with our start Nodes as start Nodes.
- * Finally, we return the returned start Nodes as our start Nodes and the returned Nodes end
- * Nodes (event occurs) and our start nodes (event skipped) as end Nodes.
- *
5. OrderOperator == ONE_OR_MORE: The Event can occur once or multiple times. We
- * therefore build the sub-StateMachine (only the left-side is present) with our start Nodes
- * as start Nodes and save the returned end Nodes. We then duplicate the transitions from
- * each given start Node to the start node of the Sub-StateMachine, but not with the given
- * start Node as origin, but each end Node of the Sub-StateMachine, this creates the desired
- * loop. Finally, we return the returned start and end Nodes.
- *
5. OrderOperator == ZERO_OR_MORE: This can be seen as (Order)*?. We therefore proceed
- * as in ONE_OR_MORE but additionally return the given start Nodes as end Nodes aswell as in
- * ZERO_OR_ONE.
- */
- private SubStateMachine buildSubSMG(final Order order, final Collection startNodes) {
-
- if (order == null) {
- // This is the case if the ORDER section was omitted.
- // It implies, that any method may be called in any sequence.
- // We therefore create a Node and a transition from all startNodes
- // to this node and a loop from the node to itself.
- StateNode node = this.result.createNewNode();
- node.setAccepting(true);
- Collection label = new HashSet<>(retrieveAllMethodsFromEvents());
-
- for (StateNode startNode : startNodes) {
- this.result.createNewEdge(label, startNode, node);
- }
-
- this.result.createNewEdge(label, node, node);
- return new SubStateMachine(Collections.singleton(node), startNodes);
- }
-
- if (order instanceof Primary) {
- Event event = ((Primary) order).getEvent();
- StateNode node = this.result.createNewNode();
- Collection label = CrySLReaderUtils.resolveEventToCryslMethods(event);
-
- for (StateNode startNode : startNodes) {
- this.result.createNewEdge(label, startNode, node);
- }
-
- return new SubStateMachine(node, node);
- }
-
- Collection end = Sets.newHashSet();
- Collection start = Sets.newHashSet();
-
- final SubStateMachine left;
- final SubStateMachine right;
-
- switch (order.getOp()) {
- case SEQUENCE:
- left = buildSubSMG(order.getLeft(), startNodes);
- right = buildSubSMG(order.getRight(), left.getEndNodes());
- start.addAll(left.getStartNodes());
- end.addAll(right.getEndNodes());
-
- for (StateNode node : startNodes) {
- if (left.getEndNodes().contains(node)) {
- start.addAll(right.getStartNodes());
- }
- }
-
- break;
- case ALTERNATIVE:
- left = buildSubSMG(order.getLeft(), startNodes);
- right = buildSubSMG(order.getRight(), startNodes);
- start.addAll(left.getStartNodes());
- start.addAll(right.getStartNodes());
- end.addAll(left.getEndNodes());
- end.addAll(right.getEndNodes());
- // TODO For some reason, this part removes loops in accepting states
- // reduce all end nodes without outgoing edges to one end node
- // Set endNodesWithOutgoingEdges =
- // this.result.getEdges().parallelStream()
- // .map(edge -> edge.from()).filter(node ->
- // end.contains(node)).collect(Collectors.toSet());
- // if (endNodesWithOutgoingEdges.size() < end.size() - 1) {
- // end.removeAll(endNodesWithOutgoingEdges);
- // StateNode aggrNode = this.result.aggregateNodesToOneNode(end,
- // end.iterator().next());
- // end.clear();
- // end.add(aggrNode);
- // end.addAll(endNodesWithOutgoingEdges);
- // }
- break;
- case ONE_OR_MORE:
- case ZERO_OR_MORE:
- case ZERO_OR_ONE:
- left = buildSubSMG(order.getLeft(), startNodes);
- start.addAll(left.getStartNodes());
- end.addAll(left.getEndNodes());
- if (order.getOp() == OrderOperator.ZERO_OR_MORE
- || order.getOp() == OrderOperator.ONE_OR_MORE) {
- startNodes.stream()
- .map(this.result::getAllOutgoingEdges)
- .flatMap(Collection::stream)
- .filter(edge -> left.getStartNodes().contains(edge.getRight()))
- .forEach(
- edge ->
- left.getEndNodes().stream()
- .forEach(
- endNode ->
- this.result.createNewEdge(
- edge.getLabel(),
- endNode,
- edge.getRight())));
- }
- if (order.getOp() == OrderOperator.ZERO_OR_MORE
- || order.getOp() == OrderOperator.ZERO_OR_ONE) {
- end.addAll(startNodes);
- }
- break;
- }
- return new SubStateMachine(start, end);
- }
-
- private Collection retrieveAllMethodsFromEvents() {
- if (this.allMethods.isEmpty())
- this.allMethods.addAll(CrySLReaderUtils.resolveEventsToCryslMethods(this.events));
- return this.allMethods;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterAnalysis.java b/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterAnalysis.java
index f29c7c40a..3bb54bc2a 100644
--- a/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterAnalysis.java
+++ b/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterAnalysis.java
@@ -8,8 +8,8 @@
import boomerang.scene.Type;
import boomerang.scene.Val;
import crypto.extractparameter.transformation.TransformedAllocVal;
-import crypto.rules.CrySLMethod;
import crypto.utils.MatcherUtils;
+import crysl.rule.CrySLMethod;
import java.util.AbstractMap;
import java.util.Collection;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterDefinition.java b/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterDefinition.java
index f982f6c54..fadbbf7c6 100644
--- a/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterDefinition.java
+++ b/CryptoAnalysis/src/main/java/crypto/extractparameter/ExtractParameterDefinition.java
@@ -5,7 +5,7 @@
import boomerang.scene.Statement;
import boomerang.scene.sparse.SparseCFGCache;
import crypto.listener.AnalysisReporter;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
public interface ExtractParameterDefinition {
diff --git a/CryptoAnalysis/src/main/java/crypto/listener/AnalysisPrinter.java b/CryptoAnalysis/src/main/java/crypto/listener/AnalysisPrinter.java
index 8f608a9a7..eb6ae369a 100644
--- a/CryptoAnalysis/src/main/java/crypto/listener/AnalysisPrinter.java
+++ b/CryptoAnalysis/src/main/java/crypto/listener/AnalysisPrinter.java
@@ -7,7 +7,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.extractparameter.ExtractParameterQuery;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/CryptoAnalysis/src/main/java/crypto/listener/AnalysisReporter.java b/CryptoAnalysis/src/main/java/crypto/listener/AnalysisReporter.java
index aa74c3d18..049f8ffd5 100644
--- a/CryptoAnalysis/src/main/java/crypto/listener/AnalysisReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/listener/AnalysisReporter.java
@@ -24,8 +24,8 @@
import crypto.analysis.errors.UncaughtExceptionError;
import crypto.extractparameter.CallSiteWithExtractedValue;
import crypto.extractparameter.ExtractParameterQuery;
-import crypto.rules.CrySLRule;
-import crypto.rules.ISLConstraint;
+import crysl.rule.CrySLRule;
+import crysl.rule.ISLConstraint;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
diff --git a/CryptoAnalysis/src/main/java/crypto/listener/IAnalysisListener.java b/CryptoAnalysis/src/main/java/crypto/listener/IAnalysisListener.java
index cd00fff5b..794f26048 100644
--- a/CryptoAnalysis/src/main/java/crypto/listener/IAnalysisListener.java
+++ b/CryptoAnalysis/src/main/java/crypto/listener/IAnalysisListener.java
@@ -6,7 +6,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.extractparameter.ExtractParameterQuery;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
public interface IAnalysisListener {
diff --git a/CryptoAnalysis/src/main/java/crypto/listener/IResultsListener.java b/CryptoAnalysis/src/main/java/crypto/listener/IResultsListener.java
index b327b296d..aaef32b58 100644
--- a/CryptoAnalysis/src/main/java/crypto/listener/IResultsListener.java
+++ b/CryptoAnalysis/src/main/java/crypto/listener/IResultsListener.java
@@ -10,7 +10,7 @@
import crypto.analysis.errors.AbstractError;
import crypto.extractparameter.CallSiteWithExtractedValue;
import crypto.extractparameter.ExtractParameterQuery;
-import crypto.rules.ISLConstraint;
+import crysl.rule.ISLConstraint;
import java.util.Collection;
import java.util.Map;
import typestate.TransitionFunction;
diff --git a/CryptoAnalysis/src/main/java/crypto/preanalysis/EmptyStatementTransformer.java b/CryptoAnalysis/src/main/java/crypto/preanalysis/EmptyStatementTransformer.java
index 5e1f77e91..740749a89 100644
--- a/CryptoAnalysis/src/main/java/crypto/preanalysis/EmptyStatementTransformer.java
+++ b/CryptoAnalysis/src/main/java/crypto/preanalysis/EmptyStatementTransformer.java
@@ -1,6 +1,6 @@
package crypto.preanalysis;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
diff --git a/CryptoAnalysis/src/main/java/crypto/preanalysis/ExceptionAwareTransformer.java b/CryptoAnalysis/src/main/java/crypto/preanalysis/ExceptionAwareTransformer.java
index fec272924..f65be1085 100644
--- a/CryptoAnalysis/src/main/java/crypto/preanalysis/ExceptionAwareTransformer.java
+++ b/CryptoAnalysis/src/main/java/crypto/preanalysis/ExceptionAwareTransformer.java
@@ -4,7 +4,7 @@
import boomerang.scene.jimple.JimpleMethod;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
diff --git a/CryptoAnalysis/src/main/java/crypto/preanalysis/TransformerSetup.java b/CryptoAnalysis/src/main/java/crypto/preanalysis/TransformerSetup.java
index a706cb6c8..6cc374436 100644
--- a/CryptoAnalysis/src/main/java/crypto/preanalysis/TransformerSetup.java
+++ b/CryptoAnalysis/src/main/java/crypto/preanalysis/TransformerSetup.java
@@ -1,7 +1,7 @@
package crypto.preanalysis;
import boomerang.scene.jimple.BoomerangPretransformer;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
public class TransformerSetup {
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/CSVReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/CSVReporter.java
index d7fe7b841..d6b5e4ce1 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/CSVReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/CSVReporter.java
@@ -7,8 +7,8 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
import crypto.utils.ErrorUtils;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/CSVSummaryReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/CSVSummaryReporter.java
index e814d68e2..c3c0a073e 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/CSVSummaryReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/CSVSummaryReporter.java
@@ -7,8 +7,8 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
import crypto.utils.ErrorUtils;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/CommandLineReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/CommandLineReporter.java
index 0a1d0da08..100d0dadf 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/CommandLineReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/CommandLineReporter.java
@@ -6,7 +6,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import java.util.Set;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/GitHubAnnotationReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/GitHubAnnotationReporter.java
index be86a70e1..33de1aa57 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/GitHubAnnotationReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/GitHubAnnotationReporter.java
@@ -6,8 +6,8 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
import crypto.utils.ErrorUtils;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/ReportGenerator.java b/CryptoAnalysis/src/main/java/crypto/reporting/ReportGenerator.java
index 7af30e3ba..646d591d8 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/ReportGenerator.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/ReportGenerator.java
@@ -6,8 +6,8 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
import crypto.utils.ErrorUtils;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import java.util.List;
import java.util.Map;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/Reporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/Reporter.java
index 05eba35d4..8fdd3d7ed 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/Reporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/Reporter.java
@@ -6,7 +6,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/ReporterFactory.java b/CryptoAnalysis/src/main/java/crypto/reporting/ReporterFactory.java
index cd8be14c0..a1b09e933 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/ReporterFactory.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/ReporterFactory.java
@@ -1,6 +1,6 @@
package crypto.reporting;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/SARIFReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/SARIFReporter.java
index f4e865d7f..e16f14490 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/SARIFReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/SARIFReporter.java
@@ -8,7 +8,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
diff --git a/CryptoAnalysis/src/main/java/crypto/reporting/TXTReporter.java b/CryptoAnalysis/src/main/java/crypto/reporting/TXTReporter.java
index 497538127..6b3f225cb 100644
--- a/CryptoAnalysis/src/main/java/crypto/reporting/TXTReporter.java
+++ b/CryptoAnalysis/src/main/java/crypto/reporting/TXTReporter.java
@@ -6,7 +6,7 @@
import crypto.analysis.IAnalysisSeed;
import crypto.analysis.errors.AbstractError;
import crypto.listener.AnalysisStatistics;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLArithmeticConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLArithmeticConstraint.java
deleted file mode 100644
index 424117ce5..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLArithmeticConstraint.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package crypto.rules;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CrySLArithmeticConstraint extends CrySLLiteral {
-
- public enum ArithOp {
- p,
- n,
- m
- }
-
- /* p = +
- * n = -
- * m = %
- */
-
- private final ArithOp operator;
- private final ICrySLPredicateParameter left;
- private final ICrySLPredicateParameter right;
-
- public CrySLArithmeticConstraint(
- ICrySLPredicateParameter l, ICrySLPredicateParameter r, ArithOp op) {
- left = l;
- right = r;
- operator = op;
- }
-
- /**
- * @return the operator
- */
- public ArithOp getOperator() {
- return operator;
- }
-
- /**
- * @return the left
- */
- public ICrySLPredicateParameter getLeft() {
- return left;
- }
-
- /**
- * @return the right
- */
- public ICrySLPredicateParameter getRight() {
- return right;
- }
-
- public String toString() {
- return left
- + " "
- + (operator.equals(ArithOp.p) ? "+" : (operator.equals(ArithOp.m) ? "%" : "-"))
- + " "
- + right;
- }
-
- @Override
- public List getInvolvedVarNames() {
- List varNames = new ArrayList<>();
- String name = left.getName();
- if (!isIntOrBoolean(name)) {
- varNames.add(name);
- }
-
- name = right.getName();
- if (!isIntOrBoolean(name)) {
- varNames.add(name);
- }
- return varNames;
- }
-
- private boolean isIntOrBoolean(String name) {
- try {
- Integer.parseInt(name);
- return true;
- } catch (NumberFormatException ex) {
- return name.equalsIgnoreCase("false") || name.equalsIgnoreCase("true");
- }
- }
-
- @Override
- public String getName() {
- return toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLComparisonConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLComparisonConstraint.java
deleted file mode 100644
index f0aa1f791..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLComparisonConstraint.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package crypto.rules;
-
-import java.util.List;
-
-public class CrySLComparisonConstraint extends CrySLLiteral {
-
- public enum CompOp {
- l,
- g,
- le,
- ge,
- eq,
- neq
- }
-
- private final CompOp operator;
- private final CrySLArithmeticConstraint left;
- private final CrySLArithmeticConstraint right;
-
- public CrySLComparisonConstraint(
- CrySLArithmeticConstraint l, CrySLArithmeticConstraint r, CompOp op) {
- left = l;
- right = r;
- operator = op;
- }
-
- public String toString() {
- return left + " " + getOperatorString() + " " + right;
- }
-
- private String getOperatorString() {
- switch (operator) {
- case l:
- return "<";
- case le:
- return "<=";
- case g:
- return ">";
- case ge:
- return ">=";
- case neq:
- return "!=";
- default:
- return "=";
- }
- }
-
- /**
- * @return the operator
- */
- public CompOp getOperator() {
- return operator;
- }
-
- /**
- * @return the left
- */
- public CrySLArithmeticConstraint getLeft() {
- return left;
- }
-
- /**
- * @return the right
- */
- public CrySLArithmeticConstraint getRight() {
- return right;
- }
-
- @Override
- public List getInvolvedVarNames() {
- List varNames = left.getInvolvedVarNames();
- varNames.addAll(right.getInvolvedVarNames());
- return varNames;
- }
-
- @Override
- public String getName() {
- return toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLCondPredicate.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLCondPredicate.java
deleted file mode 100644
index 0f872ca15..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLCondPredicate.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-import java.util.List;
-
-public class CrySLCondPredicate extends CrySLPredicate {
-
- private final Collection conditionalNodes;
-
- public CrySLCondPredicate(
- ICrySLPredicateParameter baseObj,
- String name,
- List parameters,
- Boolean negated,
- Collection nodes) {
- this(baseObj, name, parameters, negated, nodes, null);
- }
-
- public CrySLCondPredicate(
- ICrySLPredicateParameter baseObj,
- String name,
- List parameters,
- Boolean negated,
- Collection nodes,
- ISLConstraint constraint) {
- super(baseObj, name, parameters, negated, constraint);
- this.conditionalNodes = nodes;
- }
-
- /**
- * @return the conditionalMethods
- */
- public Collection getConditionalMethods() {
- return conditionalNodes;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!super.equals(obj)) return false;
-
- if (!(obj instanceof CrySLCondPredicate)) return false;
-
- CrySLCondPredicate other = (CrySLCondPredicate) obj;
- if (!getConditionalMethods().equals(other.getConditionalMethods())) return false;
-
- return true;
- }
-
- public String toString() {
- return super.toString() + " after " + conditionalNodes;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLConstraint.java
deleted file mode 100644
index 4b91d938b..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLConstraint.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package crypto.rules;
-
-import java.util.List;
-
-public class CrySLConstraint implements ISLConstraint {
-
- public enum LogOps {
- and,
- or,
- implies,
- eq
- }
-
- private final LogOps operator;
- private final ISLConstraint left;
- private final ISLConstraint right;
-
- public CrySLConstraint(ISLConstraint l, ISLConstraint r, LogOps op) {
- left = l;
- right = r;
- operator = op;
- }
-
- /**
- * @return the operator return operator;
- */
- public LogOps getOperator() {
- return operator;
- }
-
- /**
- * @return the left
- */
- public ISLConstraint getLeft() {
- return left;
- }
-
- /**
- * @return the right
- */
- public ISLConstraint getRight() {
- return right;
- }
-
- public String toString() {
- StringBuilder constraintSB = new StringBuilder();
- constraintSB.append(left.toString());
- constraintSB.append(operator);
- constraintSB.append(right.toString());
- return constraintSB.toString();
- }
-
- @Override
- public List getInvolvedVarNames() {
- List varNames = left.getInvolvedVarNames();
- varNames.addAll(right.getInvolvedVarNames());
- return varNames;
- }
-
- @Override
- public String getName() {
- return toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLException.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLException.java
deleted file mode 100644
index 8408db512..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLException.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package crypto.rules;
-
-/** Helper Class to store an {@link Exception} as a String. */
-public class CrySLException {
-
- private final String exception;
-
- /**
- * Construct a {@link CrySLException} from the fully qualified classname of the {@link
- * Exception} to store.
- *
- * @param exception the exception's name
- */
- public CrySLException(String exception) {
- this.exception = exception;
- }
-
- /**
- * @return The fully qualified classname of the stored {@link Exception}.
- */
- public String getException() {
- return exception;
- }
-
- public String toString() {
- return String.format("%s(%s)", this.getClass().getName(), this.exception);
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLExceptionConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLExceptionConstraint.java
deleted file mode 100644
index 983b34d19..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLExceptionConstraint.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package crypto.rules;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Constraint expressing, that a {@link CrySLMethod} throws an {@link CrySLException}, that must be
- * caught.
- */
-public class CrySLExceptionConstraint implements ISLConstraint {
-
- /** The Method throwing the Exception. */
- private final CrySLMethod method;
-
- /** The Exception thrown by the Method. */
- private final CrySLException exception;
-
- /**
- * Construct the {@link CrySLExceptionConstraint} given the method and the exception thrown
- * thereby.
- *
- * @param method Method that throws the Exception.
- * @param exception Exception that thrown by the Method.
- */
- public CrySLExceptionConstraint(CrySLMethod method, CrySLException exception) {
- this.method = method;
- this.exception = exception;
- }
-
- /**
- * Returns the Method throwing the Exception.
- *
- * @return The Method throwing the Exception.
- */
- public CrySLMethod getMethod() {
- return method;
- }
-
- /**
- * Returns the Exception thrown by the Exception.
- *
- * @return The Exception thrown by the Exception.
- */
- public CrySLException getException() {
- return exception;
- }
-
- public String toString() {
- return String.format("%s(%s, %s)", this.getClass().getName(), getMethod(), getException());
- }
-
- @Override
- public List getInvolvedVarNames() {
- return Collections.emptyList();
- }
-
- @Override
- public String getName() {
- return toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLForbiddenMethod.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLForbiddenMethod.java
deleted file mode 100644
index 0e71568db..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLForbiddenMethod.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-
-public class CrySLForbiddenMethod {
-
- private final CrySLMethod method;
- private final Collection alternatives;
-
- public CrySLForbiddenMethod(CrySLMethod method, Collection alternatives) {
- this.method = method;
- this.alternatives = alternatives;
- }
-
- public CrySLMethod getMethod() {
- return method;
- }
-
- public Collection getAlternatives() {
- return alternatives;
- }
-
- @Override
- public String toString() {
- final StringBuilder forbiddenMethod = new StringBuilder();
- forbiddenMethod.append(method.toString());
- if (!alternatives.isEmpty()) {
- forbiddenMethod.append(" Alternatives: ");
- }
-
- for (CrySLMethod meth : alternatives) {
- forbiddenMethod.append(meth.toString());
- }
-
- return forbiddenMethod.toString();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (!(obj instanceof CrySLForbiddenMethod)) {
- return false;
- }
-
- CrySLForbiddenMethod other = (CrySLForbiddenMethod) obj;
- if (!method.equals(other.getMethod())) {
- return false;
- }
-
- return alternatives.equals(other.getAlternatives());
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLLiteral.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLLiteral.java
deleted file mode 100644
index c2ca7ffd1..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLLiteral.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package crypto.rules;
-
-public abstract class CrySLLiteral implements ISLConstraint {
-
- protected CrySLLiteral() {}
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLMethod.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLMethod.java
deleted file mode 100644
index 8c0f5d4aa..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLMethod.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package crypto.rules;
-
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
-
-public class CrySLMethod implements ICrySLPredicateParameter {
-
- public static final String VOID = "void";
- public static final String ANY_TYPE = "AnyType";
- public static final String NO_NAME = "_";
-
- private final String methodName;
- private final String declaringClassName;
- private final Entry retObject;
-
- /**
- * List of Parameters, where a Parameter is an {@link java.util.Map.Entry} of Name and Type,
- * both as {@link String}.
- */
- private final List> parameters;
-
- public CrySLMethod(
- String methodName,
- String declaringClassName,
- List> parameters,
- Entry retObject) {
- this.methodName = methodName;
- this.declaringClassName = declaringClassName;
- this.parameters = parameters;
- this.retObject = retObject;
- }
-
- /**
- * @return the FQ methodName
- */
- public String getMethodName() {
- return methodName;
- }
-
- /**
- * @return the short methodName
- */
- public String getShortMethodName() {
- return methodName.substring(methodName.lastIndexOf(".") + 1);
- }
-
- public String getDeclaringClassName() {
- return declaringClassName;
- }
-
- /**
- * @return the parameters
- */
- public List> getParameters() {
- return parameters;
- }
-
- public Entry getRetObject() {
- return retObject;
- }
-
- public String toString() {
- return getName();
- }
-
- public String getSignature() {
- return getMethodName()
- + "("
- + parameters.stream()
- .map(param -> String.format("%s", param.getValue()))
- .collect(Collectors.joining(", "))
- + ")";
- }
-
- @Override
- public String getName() {
- StringBuilder stmntBuilder = new StringBuilder();
- String returnValue = retObject.getKey();
- if (!"_".equals(returnValue)) {
- stmntBuilder.append(returnValue);
- stmntBuilder.append(" = ");
- }
-
- stmntBuilder.append(this.methodName);
- stmntBuilder.append("(");
-
- stmntBuilder.append(
- parameters.stream()
- .map(param -> String.format("%s %s", param.getValue(), param.getKey()))
- .collect(Collectors.joining(", ")));
-
- stmntBuilder.append(");");
- return stmntBuilder.toString();
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((methodName == null) ? 0 : methodName.hashCode());
- result = prime * result + ((parameters == null) ? 0 : parameters.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (!(obj instanceof CrySLMethod)) {
- return false;
- }
- CrySLMethod other = (CrySLMethod) obj;
- return this.getMethodName().equals(other.getMethodName())
- && parameters.equals(other.parameters);
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLObject.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLObject.java
deleted file mode 100644
index 76b014489..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLObject.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package crypto.rules;
-
-import java.util.Arrays;
-
-public class CrySLObject implements ICrySLPredicateParameter {
-
- private final String varName;
- private final String javaType;
- private final CrySLSplitter splitter;
-
- public CrySLObject(String name, String type) {
- this(name, type, null);
- }
-
- public CrySLObject(String name, String type, CrySLSplitter part) {
- varName = name;
- javaType = type;
- splitter = part;
- }
-
- /**
- * @return the varName
- */
- public String getVarName() {
- return varName;
- }
-
- /**
- * @return the splitter
- */
- public CrySLSplitter getSplitter() {
- return splitter;
- }
-
- @Override
- public boolean equals(Object other) {
- if (other == this) return true;
- if (other == null) return false;
- if (!(other instanceof CrySLObject)) return false;
- CrySLObject object = (CrySLObject) other;
- return this.getJavaType().equals(object.getJavaType())
- && this.getName().equals(object.getName())
- && (this.getSplitter() == null || this.getSplitter().equals(object.getSplitter()));
- }
-
- @Override
- public int hashCode() {
- return Arrays.hashCode(new Object[] {varName, javaType, splitter});
- }
-
- @Override
- public String toString() {
- return javaType + " " + varName + ((splitter != null) ? splitter.toString() : "");
- }
-
- @Override
- public String getName() {
- return varName;
- }
-
- public String getJavaType() {
- return javaType;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLPredicate.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLPredicate.java
deleted file mode 100644
index b2747339d..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLPredicate.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package crypto.rules;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-public class CrySLPredicate extends CrySLLiteral {
-
- protected final ICrySLPredicateParameter baseObject;
- protected final String predName;
- protected final List parameters;
- protected final boolean negated;
- protected final ISLConstraint constraint;
-
- public CrySLPredicate(
- ICrySLPredicateParameter baseObject,
- String name,
- List parameters,
- Boolean negated) {
- this(baseObject, name, parameters, negated, null);
- }
-
- public CrySLPredicate(
- ICrySLPredicateParameter baseObject,
- String name,
- List parameters,
- Boolean negated,
- ISLConstraint constraint) {
- this.baseObject = baseObject;
- this.predName = name;
- this.parameters = parameters;
- this.negated = negated;
- this.constraint = constraint;
- }
-
- @Override
- public int hashCode() {
- return Arrays.hashCode(new Object[] {predName, parameters.size(), negated});
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (!(obj instanceof CrySLPredicate)) {
- return false;
- }
-
- CrySLPredicate other = (CrySLPredicate) obj;
- if (baseObject == null) {
- if (other.getBaseObject() != null) return false;
- } else if (!baseObject.equals(other.getBaseObject())) {
- return false;
- }
-
- if (predName == null) {
- if (other.getPredName() != null) return false;
- } else if (!predName.equals(other.getPredName())) {
- return false;
- }
-
- if (parameters == null) {
- if (other.getParameters() != null) return false;
- } else if (parameters.size() != other.getParameters().size()) {
- return false;
- }
-
- return negated == other.isNegated();
- }
-
- /**
- * @return the baseObject
- */
- public ICrySLPredicateParameter getBaseObject() {
- return baseObject;
- }
-
- /**
- * @return the predName
- */
- public String getPredName() {
- return predName;
- }
-
- /**
- * @return the optConstraint
- */
- public Optional getConstraint() {
- return Optional.ofNullable(constraint);
- }
-
- /**
- * @return the parameters
- */
- public List getParameters() {
- return parameters;
- }
-
- /**
- * @return the negated
- */
- public Boolean isNegated() {
- return negated;
- }
-
- @Override
- public String toString() {
- StringBuilder predSB = new StringBuilder();
- if (negated) predSB.append("!");
- predSB.append(predName);
- predSB.append("(");
- predSB.append(parameters.stream().map(Object::toString).collect(Collectors.joining(", ")));
- predSB.append(")");
-
- return predSB.toString();
- }
-
- @Override
- public List getInvolvedVarNames() {
- List varNames = new ArrayList<>();
- if (Arrays.asList(new String[] {"neverTypeOf", "instanceOf"}).contains(predName)) {
- varNames.add(parameters.get(0).getName());
- } else {
- for (ICrySLPredicateParameter var : parameters) {
- if (!("_".equals(var.getName())
- || "this".equals(var.getName())
- || var instanceof CrySLMethod)) {
- varNames.add(var.getName());
- }
- }
- }
- if (getBaseObject() != null) varNames.add(getBaseObject().getName());
- return varNames;
- }
-
- public CrySLPredicate invertNegation() {
- return new CrySLPredicate(baseObject, predName, parameters, !negated);
- }
-
- public CrySLPredicate toNormalCrySLPredicate() {
- return new CrySLPredicate(baseObject, predName, parameters, negated, constraint);
- }
-
- @Override
- public String getName() {
- if (parameters.size() == 1) {
- return parameters.get(0).getName();
- } else {
- return "";
- }
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLRule.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLRule.java
deleted file mode 100644
index 4d936ec25..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLRule.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Map;
-
-public class CrySLRule {
-
- private final String className;
-
- private final Collection> objects;
-
- private final Collection forbiddenMethods;
-
- private final Collection events;
-
- private final StateMachineGraph usagePattern;
-
- private final Collection constraints;
-
- private final Collection predicates;
-
- private final Collection negatedPredicates;
-
- public CrySLRule(
- String className,
- Collection> objects,
- Collection forbiddenMethods,
- Collection events,
- StateMachineGraph usagePattern,
- Collection constraints,
- Collection predicates,
- Collection negatedPredicates) {
- this.className = className;
- this.objects = objects;
- this.forbiddenMethods = forbiddenMethods;
- this.events = events;
- this.usagePattern = usagePattern;
- this.constraints = constraints;
- this.predicates = predicates;
- this.negatedPredicates = negatedPredicates;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof CrySLRule) {
- return ((CrySLRule) obj).getClassName().equals(className);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return 31 * className.hashCode();
- }
-
- /**
- * @return the className
- */
- public String getClassName() {
- return className;
- }
-
- /**
- * @return the objects
- */
- public Collection> getObjects() {
- return objects;
- }
-
- /**
- * @return the forbiddenMethods
- */
- public Collection getForbiddenMethods() {
- return forbiddenMethods;
- }
-
- /**
- * @return the events
- */
- public Collection getEvents() {
- return events;
- }
-
- /**
- * @return the usagePattern
- */
- public StateMachineGraph getUsagePattern() {
- return usagePattern;
- }
-
- /**
- * @return the constraints
- */
- public Collection getConstraints() {
- return constraints;
- }
-
- /**
- * @return the predicates
- */
- public Collection getPredicates() {
- return predicates;
- }
-
- /**
- * @return the negated predicates
- */
- public Collection getNegatedPredicates() {
- return negatedPredicates;
- }
-
- /**
- * @return the constraints
- */
- public Collection getRequiredPredicates() {
- Collection requires = new LinkedList<>();
- for (ISLConstraint con : constraints) {
- if (con instanceof CrySLPredicate) {
- requires.add((CrySLPredicate) con);
- }
- }
- return requires;
- }
-
- @Override
- public String toString() {
- StringBuilder outputSB = new StringBuilder();
-
- outputSB.append(this.className);
-
- outputSB.append("\nforbiddenMethods:");
- for (CrySLForbiddenMethod forMethSig : this.forbiddenMethods) {
- outputSB.append(forMethSig);
- outputSB.append(", ");
- }
-
- outputSB.append("\nEvents:");
- for (CrySLMethod method : events) {
- outputSB.append(method);
- outputSB.append(", ");
- }
-
- outputSB.append("\nUsage Pattern:");
- outputSB.append(this.usagePattern);
-
- outputSB.append("\nConstraints:");
- for (ISLConstraint constraint : this.constraints) {
- outputSB.append(constraint);
- outputSB.append(", ");
- }
-
- if (this.predicates != null) {
- outputSB.append("\nPredicates:");
- for (CrySLPredicate predicate : this.predicates) {
- outputSB.append(predicate);
- outputSB.append(", ");
- }
- }
-
- if (this.negatedPredicates != null) {
- outputSB.append("\nNegated predicates:");
- for (CrySLPredicate predicate : this.negatedPredicates) {
- outputSB.append(predicate);
- outputSB.append(", ");
- }
- }
-
- return outputSB.toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLSplitter.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLSplitter.java
deleted file mode 100644
index 171ce4a0f..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLSplitter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package crypto.rules;
-
-public class CrySLSplitter {
-
- private final int index;
- private final String split;
-
- public CrySLSplitter(int ind, String spl) {
- this.index = ind;
- this.split = spl;
- }
-
- public int getIndex() {
- return index;
- }
-
- public String getSplitter() {
- return split;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof CrySLSplitter)) return false;
-
- CrySLSplitter splitter = (CrySLSplitter) other;
- return this.index == splitter.getIndex() && this.split.equals(splitter.getSplitter());
- }
-
- public String toString() {
- return ".split(" + split + ")[" + index + "]";
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/CrySLValueConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/CrySLValueConstraint.java
deleted file mode 100644
index e42d23219..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/CrySLValueConstraint.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package crypto.rules;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CrySLValueConstraint extends CrySLLiteral {
-
- CrySLObject var;
- List valueRange;
-
- public CrySLValueConstraint(CrySLObject name, List values) {
- var = name;
- valueRange = values;
- }
-
- /**
- * @return the varName
- */
- public String getVarName() {
- return var.getVarName();
- }
-
- /**
- * @return the varName
- */
- public CrySLObject getVar() {
- return var;
- }
-
- /**
- * @return the valueRange
- */
- public List getValueRange() {
- return valueRange;
- }
-
- public String toString() {
- StringBuilder vCSB = new StringBuilder();
- vCSB.append("VC:");
- vCSB.append(var);
- vCSB.append(" - ");
- for (String value : valueRange) {
- vCSB.append(value);
- vCSB.append(",");
- }
- return vCSB.toString();
- }
-
- @Override
- public List getInvolvedVarNames() {
- List varNames = new ArrayList<>();
- varNames.add(var.getVarName());
- return varNames;
- }
-
- @Override
- public String getName() {
- return toString();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/FiniteStateMachine.java b/CryptoAnalysis/src/main/java/crypto/rules/FiniteStateMachine.java
deleted file mode 100644
index 83cde1c51..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/FiniteStateMachine.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-
-public interface FiniteStateMachine {
- Transition getInitialTransition();
-
- Collection getAcceptingStates();
-
- Collection extends Transition> getAllTransitions();
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/ICrySLPredicateParameter.java b/CryptoAnalysis/src/main/java/crypto/rules/ICrySLPredicateParameter.java
deleted file mode 100644
index bf378b46b..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/ICrySLPredicateParameter.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package crypto.rules;
-
-public interface ICrySLPredicateParameter {
-
- String getName();
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/ISLConstraint.java b/CryptoAnalysis/src/main/java/crypto/rules/ISLConstraint.java
deleted file mode 100644
index f0c9a0264..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/ISLConstraint.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package crypto.rules;
-
-import java.util.List;
-
-public interface ISLConstraint extends ICrySLPredicateParameter {
-
- List getInvolvedVarNames();
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraph.java b/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraph.java
deleted file mode 100644
index c8c78b772..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraph.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package crypto.rules;
-
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.stream.Collectors;
-
-public final class StateMachineGraph implements FiniteStateMachine {
-
- private StateNode startNode;
- private final Collection nodes;
- private final Collection edges;
- private final Collection initialEdges;
- private int nodeNameCounter = 0;
-
- public StateMachineGraph() {
- nodes = new HashSet<>();
- edges = new ArrayList<>();
- initialEdges = new ArrayList<>();
- }
-
- public StateNode createNewNode() {
- StateNode node = new StateNode(String.valueOf(this.nodeNameCounter++), false, false);
- this.nodes.add(node);
- return node;
- }
-
- public boolean createNewEdge(Collection methods, StateNode left, StateNode right) {
- return this.addEdge(new TransitionEdge(methods, left, right));
- }
-
- private Boolean addEdge(TransitionEdge edge) {
- final StateNode right = edge.getRight();
- final StateNode left = edge.getLeft();
- if (!(nodes.parallelStream().anyMatch(e -> e.equals(left))
- || nodes.parallelStream().anyMatch(e -> e.equals(right)))) {
- return false;
- }
- if (edges.contains(edge)) {
- return false;
- }
- edges.add(edge);
-
- if (left.isInitialState()) {
- initialEdges.add(edge);
- }
-
- return true;
- }
-
- public void wrapUpCreation() {
- getAcceptingStates().parallelStream()
- .forEach(
- e -> {
- e.setHopsToAccepting(0);
- updateHops(e);
- });
- }
-
- public Collection getAllOutgoingEdges(StateNode node) {
- return edges.parallelStream()
- .filter(edge -> edge.from().equals(node))
- .collect(Collectors.toSet());
- }
-
- public void addAllOutgoingEdgesFromOneNodeToOtherNodes(
- StateNode node, Collection otherNodes) {
- Collection edgesFromNode =
- edges.parallelStream()
- .filter(e -> node.equals(e.from()))
- .collect(Collectors.toList());
- otherNodes.forEach(
- otherNode ->
- edgesFromNode.forEach(
- edge ->
- this.createNewEdge(
- edge.getLabel(), otherNode, edge.getLeft())));
- }
-
- public StateNode aggregateNodesToOneNode(Collection endNodes, StateNode newNode) {
- this.aggregateNodesToOtherNodes(endNodes, Lists.newArrayList(newNode));
- return newNode;
- }
-
- public Collection aggregateNodesToOtherNodes(
- Collection nodesToAggr, Collection startNodes) {
- Collection edgesToAnyAggrNode =
- edges.parallelStream()
- .filter(e -> nodesToAggr.contains(e.to()))
- .collect(Collectors.toList());
- // Add new edges to newNode instead of Aggr Node
- startNodes.forEach(
- node ->
- edgesToAnyAggrNode.forEach(
- edgeToAggrNode ->
- this.createNewEdge(
- edgeToAggrNode.getLabel(),
- edgeToAggrNode.getLeft(),
- node)));
- nodesToAggr.removeAll(startNodes);
- removeNodesWithAllEdges(nodesToAggr);
- return startNodes;
- }
-
- private void removeNodesWithAllEdges(Collection nodesToRemove) {
- nodesToRemove.forEach(this::removeNodeWithAllEdges);
- }
-
- private void removeNodeWithAllEdges(StateNode node) {
- removeAllEdgesHavingNode(node);
- nodes.remove(node);
- }
-
- private void removeAllEdgesHavingNode(StateNode node) {
- Collection filteredEdges =
- edges.parallelStream()
- .filter(e -> node.equals(e.to()) || node.equals(e.from()))
- .collect(Collectors.toList());
- edges.removeAll(filteredEdges);
- }
-
- private void updateHops(StateNode node) {
- int newPath = node.getHopsToAccepting() + 1;
- getAllTransitions().parallelStream()
- .forEach(
- e -> {
- StateNode theNewRight = e.getLeft();
- if (e.getRight().equals(node)
- && theNewRight.getHopsToAccepting() > newPath) {
- theNewRight.setHopsToAccepting(newPath);
- updateHops(theNewRight);
- }
- });
- }
-
- public Boolean addNode(StateNode node) {
- if (node.isInitialState()) {
- this.startNode = node;
- }
- return nodes.parallelStream().anyMatch(n -> n.getName().equals(node.getName()))
- ? false
- : nodes.add(node);
- }
-
- public String toString() {
- StringBuilder graphSB = new StringBuilder();
- for (StateNode node : nodes) {
- graphSB.append(node.toString());
- graphSB.append(System.lineSeparator());
- }
-
- for (TransitionEdge te : edges) {
- graphSB.append(te.toString());
- graphSB.append(System.lineSeparator());
- }
-
- return graphSB.toString();
- }
-
- public Collection getNodes() {
- return nodes;
- }
-
- public StateNode getStartNode() {
- return startNode;
- }
-
- public Collection getEdges() {
- return edges;
- }
-
- public TransitionEdge getInitialTransition() {
- throw new UnsupportedOperationException(
- "There is no single initial transition. Use getInitialTransitions()");
- }
-
- public Collection getInitialTransitions() {
- return initialEdges;
- }
-
- public Collection getAcceptingStates() {
- return nodes.parallelStream().filter(StateNode::getAccepting).collect(Collectors.toList());
- }
-
- public Collection getAllTransitions() {
- return getEdges();
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraphReader.java b/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraphReader.java
deleted file mode 100644
index 89dbff309..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/StateMachineGraphReader.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package crypto.rules;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
-public class StateMachineGraphReader {
- public static StateMachineGraph readFromFile(File file) {
- StateMachineGraph smg = null;
- try {
- FileInputStream fileIn = new FileInputStream(file);
- ObjectInputStream in = new ObjectInputStream(fileIn);
- smg = (StateMachineGraph) in.readObject();
- System.err.println(smg);
- in.close();
- fileIn.close();
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- return smg;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/StateNode.java b/CryptoAnalysis/src/main/java/crypto/rules/StateNode.java
deleted file mode 100644
index 7655bb99f..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/StateNode.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package crypto.rules;
-
-public class StateNode {
-
- private final String name;
-
- private final Boolean init;
- private Boolean accepting;
- private int hopsToAccepting = Integer.MAX_VALUE;
-
- public StateNode(String name) {
- this(name, false, false);
- }
-
- public StateNode(String name, Boolean init) {
- this(name, init, false);
- }
-
- public StateNode(String name, Boolean init, Boolean accepting) {
- this.name = name;
- this.init = init;
- this.accepting = accepting;
- }
-
- public String getName() {
- return name;
- }
-
- public Boolean getInit() {
- return init;
- }
-
- public Boolean getAccepting() {
- return accepting;
- }
-
- public void makeAccepting() {
- this.accepting = true;
- }
-
- public void setAccepting(Boolean accepting) {
- this.accepting = accepting;
- }
-
- public String toString() {
- StringBuilder nodeSB = new StringBuilder();
- nodeSB.append("Name: ");
- nodeSB.append(name);
- nodeSB.append(" (");
- if (!accepting) {
- nodeSB.append(hopsToAccepting + "hops to ");
- }
- nodeSB.append("accepting)");
- return nodeSB.toString();
- }
-
- public boolean isErrorState() {
- return !accepting;
- }
-
- public boolean isInitialState() {
- return init;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((accepting == null) ? 0 : accepting.hashCode());
- result = prime * result + ((init == null) ? 0 : init.hashCode());
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) return true;
- if (obj == null) return false;
- if (getClass() != obj.getClass()) return false;
- StateNode other = (StateNode) obj;
- if (accepting == null) {
- if (other.accepting != null) return false;
- } else if (!accepting.equals(other.accepting)) return false;
- if (init == null) {
- if (other.init != null) return false;
- } else if (!init.equals(other.init)) return false;
- if (name == null) {
- if (other.name != null) return false;
- } else if (!name.equals(other.name)) return false;
- return true;
- }
-
- public void setHopsToAccepting(int hops) {
- hopsToAccepting = hops;
- }
-
- public int getHopsToAccepting() {
- return hopsToAccepting;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/Transition.java b/CryptoAnalysis/src/main/java/crypto/rules/Transition.java
deleted file mode 100644
index c0ae332a4..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/Transition.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-
-public interface Transition {
- State from();
-
- State to();
-
- Collection getLabel();
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/rules/TransitionEdge.java b/CryptoAnalysis/src/main/java/crypto/rules/TransitionEdge.java
deleted file mode 100644
index bd61ae494..000000000
--- a/CryptoAnalysis/src/main/java/crypto/rules/TransitionEdge.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package crypto.rules;
-
-import java.util.Collection;
-
-public class TransitionEdge implements Transition {
-
- private final StateNode left;
- private final StateNode right;
- private final Collection methods;
-
- public TransitionEdge(Collection _methods, StateNode _left, StateNode _right) {
- left = _left;
- right = _right;
- methods = _methods;
- }
-
- public StateNode getLeft() {
- return left;
- }
-
- public StateNode getRight() {
- return right;
- }
-
- public Collection getLabel() {
- return methods;
- }
-
- @Override
- public String toString() {
- return "Left: "
- + this.left.getName()
- + " ===="
- + methods
- + "====> Right:"
- + this.right.getName();
- }
-
- public StateNode from() {
- return left;
- }
-
- public StateNode to() {
- return right;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((methods == null) ? 0 : methods.hashCode());
- result = prime * result + ((left == null) ? 0 : left.hashCode());
- result = prime * result + ((right == null) ? 0 : right.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) return true;
- if (obj == null) return false;
- if (getClass() != obj.getClass()) return false;
- TransitionEdge other = (TransitionEdge) obj;
- if (methods == null) {
- if (other.methods != null) return false;
- } else if (!methods.equals(other.methods)) return false;
- if (left == null) {
- if (other.left != null) return false;
- } else if (!left.equals(other.left)) return false;
- if (right == null) {
- if (other.right != null) return false;
- } else if (!right.equals(other.right)) return false;
- return true;
- }
-}
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/ForwardSeedQuery.java b/CryptoAnalysis/src/main/java/crypto/typestate/ForwardSeedQuery.java
index 0e1284e85..f5100ac07 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/ForwardSeedQuery.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/ForwardSeedQuery.java
@@ -3,7 +3,7 @@
import boomerang.WeightedForwardQuery;
import boomerang.scene.ControlFlowGraph;
import boomerang.scene.Val;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import typestate.TransitionFunction;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/LabeledMatcherTransition.java b/CryptoAnalysis/src/main/java/crypto/typestate/LabeledMatcherTransition.java
index 8f4af9040..78cc40e39 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/LabeledMatcherTransition.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/LabeledMatcherTransition.java
@@ -1,8 +1,8 @@
package crypto.typestate;
import boomerang.scene.DeclaredMethod;
-import crypto.rules.CrySLMethod;
import crypto.utils.MatcherUtils;
+import crysl.rule.CrySLMethod;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/MatcherTransitionCollection.java b/CryptoAnalysis/src/main/java/crypto/typestate/MatcherTransitionCollection.java
index ea0aeb6cf..0aa61cb1c 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/MatcherTransitionCollection.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/MatcherTransitionCollection.java
@@ -3,10 +3,10 @@
import boomerang.scene.ControlFlowGraph;
import boomerang.scene.InvokeExpr;
import boomerang.scene.Statement;
-import crypto.rules.CrySLMethod;
-import crypto.rules.StateMachineGraph;
-import crypto.rules.StateNode;
-import crypto.rules.TransitionEdge;
+import crysl.rule.CrySLMethod;
+import crysl.rule.StateMachineGraph;
+import crysl.rule.StateNode;
+import crysl.rule.TransitionEdge;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/ReportingErrorStateNode.java b/CryptoAnalysis/src/main/java/crypto/typestate/ReportingErrorStateNode.java
index 635078948..9b090ee23 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/ReportingErrorStateNode.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/ReportingErrorStateNode.java
@@ -1,6 +1,6 @@
package crypto.typestate;
-import crypto.rules.CrySLMethod;
+import crysl.rule.CrySLMethod;
import java.util.Collection;
import typestate.finiteautomata.State;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/RuleTransitions.java b/CryptoAnalysis/src/main/java/crypto/typestate/RuleTransitions.java
index 4b3bc7714..c7d20a1ea 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/RuleTransitions.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/RuleTransitions.java
@@ -1,7 +1,7 @@
package crypto.typestate;
import boomerang.scene.ControlFlowGraph;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import typestate.TransitionFunction;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysis.java b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysis.java
index 29760e236..bf041a297 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysis.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysis.java
@@ -9,7 +9,7 @@
import boomerang.scene.ControlFlowGraph;
import boomerang.scene.DataFlowScope;
import boomerang.scene.Val;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import ideal.IDEALAnalysis;
import ideal.IDEALAnalysisDefinition;
import ideal.IDEALResultHandler;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysisScope.java b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysisScope.java
index 1e44cad51..a9131d18e 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysisScope.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateAnalysisScope.java
@@ -16,11 +16,11 @@
import boomerang.scene.Method;
import boomerang.scene.Statement;
import boomerang.scene.Val;
-import crypto.rules.CrySLMethod;
-import crypto.rules.CrySLPredicate;
-import crypto.rules.CrySLRule;
-import crypto.rules.ICrySLPredicateParameter;
import crypto.utils.MatcherUtils;
+import crysl.rule.CrySLMethod;
+import crysl.rule.CrySLPredicate;
+import crysl.rule.CrySLRule;
+import crysl.rule.ICrySLPredicateParameter;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateDefinition.java b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateDefinition.java
index eb3ee8848..ed39b3f1c 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/TypestateDefinition.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/TypestateDefinition.java
@@ -3,7 +3,7 @@
import boomerang.debugger.Debugger;
import boomerang.scene.CallGraph;
import boomerang.scene.DataFlowScope;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import ideal.IDEALSeedSolver;
import java.util.Collection;
import typestate.TransitionFunction;
diff --git a/CryptoAnalysis/src/main/java/crypto/typestate/WrappedState.java b/CryptoAnalysis/src/main/java/crypto/typestate/WrappedState.java
index b4c3f090b..74740fe84 100644
--- a/CryptoAnalysis/src/main/java/crypto/typestate/WrappedState.java
+++ b/CryptoAnalysis/src/main/java/crypto/typestate/WrappedState.java
@@ -1,6 +1,6 @@
package crypto.typestate;
-import crypto.rules.StateNode;
+import crysl.rule.StateNode;
import typestate.finiteautomata.State;
public class WrappedState implements State {
diff --git a/CryptoAnalysis/src/main/java/crypto/utils/MatcherUtils.java b/CryptoAnalysis/src/main/java/crypto/utils/MatcherUtils.java
index 829b93dce..a57e82bb3 100644
--- a/CryptoAnalysis/src/main/java/crypto/utils/MatcherUtils.java
+++ b/CryptoAnalysis/src/main/java/crypto/utils/MatcherUtils.java
@@ -2,8 +2,8 @@
import boomerang.scene.DeclaredMethod;
import boomerang.scene.Type;
-import crypto.rules.CrySLMethod;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLMethod;
+import crysl.rule.CrySLRule;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/test/java/test/TestDataFlowScope.java b/CryptoAnalysis/src/test/java/test/TestDataFlowScope.java
index c76261c83..57576abb3 100644
--- a/CryptoAnalysis/src/test/java/test/TestDataFlowScope.java
+++ b/CryptoAnalysis/src/test/java/test/TestDataFlowScope.java
@@ -6,7 +6,7 @@
import boomerang.scene.WrappedClass;
import boomerang.scene.jimple.JimpleDeclaredMethod;
import boomerang.scene.jimple.JimpleMethod;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
import java.util.HashSet;
diff --git a/CryptoAnalysis/src/test/java/test/UsagePatternResultsListener.java b/CryptoAnalysis/src/test/java/test/UsagePatternResultsListener.java
index 81b51c8ed..dbaa88eaa 100644
--- a/CryptoAnalysis/src/test/java/test/UsagePatternResultsListener.java
+++ b/CryptoAnalysis/src/test/java/test/UsagePatternResultsListener.java
@@ -15,7 +15,7 @@
import crypto.extractparameter.CallSiteWithExtractedValue;
import crypto.extractparameter.ExtractParameterQuery;
import crypto.listener.IResultsListener;
-import crypto.rules.ISLConstraint;
+import crysl.rule.ISLConstraint;
import java.util.Collection;
import java.util.Map;
import test.assertions.ExtractedValueAssertion;
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/BufferedBlockCipherTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/BufferedBlockCipherTest.java
deleted file mode 100644
index aee2b2317..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/BufferedBlockCipherTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package test.finitestatemachine;
-
-public class BufferedBlockCipherTest extends FiniteStateMachineTestingFramework {
-
- public BufferedBlockCipherTest() {
- super("BufferedBlockCipher");
- this.order =
- new Simple(
- new E("BufferedBlockCipher"),
- new Plus(
- new Simple(new E("init"), new E("processByte"), new E("doFinal"))));
- }
- // Cons, (Inits, Procs, DOFINALS)+
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/CipherTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/CipherTest.java
deleted file mode 100644
index 613aadf20..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/CipherTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package test.finitestatemachine;
-
-public class CipherTest extends FiniteStateMachineTestingFramework {
-
- public CipherTest() {
- super("Cipher");
- this.order =
- new Simple(
- new E("getInstance"),
- new Plus(new E("init")),
- new Or(
- new Plus(new E("wrap")),
- new Plus(
- new Or(
- new E("doFinal"),
- new Simple(
- new Plus(new E("update")),
- new E("doFinal"))))));
- }
- // Gets, Inits+, WKB+ | (FINWOU | (Updates+, DOFINALS))+
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/ECElGamalDecryptorTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/ECElGamalDecryptorTest.java
deleted file mode 100644
index 397e81c01..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/ECElGamalDecryptorTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package test.finitestatemachine;
-
-public class ECElGamalDecryptorTest extends FiniteStateMachineTestingFramework {
-
- public ECElGamalDecryptorTest() {
- super("ECElGamalDecryptor");
- order =
- new Simple(
- new E("ECElGamalDecryptor"),
- new Plus(new Simple(new E("init"), new Plus(new E("decrypt")))));
- }
- // Cons, (Inits, Decrypts+)+
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/FiniteStateMachineTestingFramework.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/FiniteStateMachineTestingFramework.java
deleted file mode 100644
index 0101a89b9..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/FiniteStateMachineTestingFramework.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package test.finitestatemachine;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import crypto.cryslhandler.RulesetReader;
-import crypto.rules.CrySLRule;
-import crypto.rules.StateMachineGraph;
-import crypto.rules.StateNode;
-import crypto.rules.TransitionEdge;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.junit.Before;
-import test.TestConstants;
-
-public abstract class FiniteStateMachineTestingFramework {
-
- private StateMachineGraph smg;
- private String crySLRule;
- protected Order order;
- protected static int maxRepeat;
-
- public FiniteStateMachineTestingFramework(String crySLRule) {
- this.crySLRule = crySLRule;
- }
-
- // uncomment "@Test" to test the StatemachineBuilder.
- // These tests require a lot of memory and runtime and are thus excluded to not run each time.
- // Further, the tests solely test the StatemachineBuilder and thereby only require to be
- // executed when changing the Builder.
- // @Test
- public void simulate() {
- if (order != null) {
- benchmark();
- }
- }
-
- public void benchmark() {
- // valid paths
- maxRepeat = 1;
- List> allPossiblePathsMaxRepeat1 = order.get();
- maxRepeat = 3;
- List> allPossiblePathsMaxRepeat3 = order.get();
- for (List path : allPossiblePathsMaxRepeat3) {
- assertInSMG(path);
- }
- // invalid paths
- assertRandomInvalidPaths(allPossiblePathsMaxRepeat1, allPossiblePathsMaxRepeat3);
- }
-
- public void assertRandomInvalidPaths(
- List> pathsWithSmallRepeat, List> pathsWithLargeRepeat) {
- for (List path : pathsWithSmallRepeat) {
- if (path.size() > 1) {
- for (int i = 0; i < 10; i++) {
- List events = Lists.newArrayList(path);
- switch ((new Random()).nextInt(2)) {
- case 0:
- // delete an event
- int rand = (new Random()).nextInt(events.size());
- events.remove(rand);
- break;
- case 1:
- // switch two events
- int rand1 = (new Random()).nextInt(events.size());
- String event = events.remove(rand1);
- int rand2 = (new Random()).nextInt(events.size());
- events.add(rand2, event);
- break;
- }
- if (!pathsWithLargeRepeat.contains(events)) {
- assertNotInSMG(events);
- }
- }
- }
- }
- }
-
- public void assertInSMG(List methodPath) {
- if (!isPathOfMethodsInSMG(methodPath)) {
- throw new AssertionError(
- "Order of calls are not in SMG but should be: " + methodPath.toString());
- }
- ;
- }
-
- public void assertNotInSMG(List methodPath) {
- if (!methodPath.isEmpty() && isPathOfMethodsInSMG(methodPath)) {
- // the initial state is always accepting.
- throw new AssertionError(
- "Order of calls are in SMG but should probably not be: "
- + methodPath.toString());
- }
- ;
- }
-
- private boolean isPathOfMethodsInSMG(List methodPath) {
- final Set current = Sets.newHashSet();
- // current.add(smg.getInitialTransition().getLeft());
- for (String event : methodPath) {
- List matchingEdges =
- smg.getAllTransitions().stream()
- .filter(
- edge ->
- current.contains(edge.getLeft())
- && edge.getLabel().stream()
- .anyMatch(
- label ->
- label.getName()
- .contains(
- event)))
- .collect(Collectors.toList());
- if (matchingEdges.size() == 0) {
- // found no matching edge
- return false;
- }
- current.clear();
- matchingEdges.forEach(edge -> current.add(edge.getRight()));
- }
- return current.stream().anyMatch(node -> node.getAccepting());
- }
-
- @Before
- public void createSMG() {
- RulesetReader reader = new RulesetReader();
-
- try {
- Collection rules = reader.readRulesFromPath(TestConstants.JCA_RULESET_PATH);
-
- for (CrySLRule rule : rules) {
- if (rule.getClassName().equals(crySLRule)) {
- smg = rule.getUsagePattern();
- }
- }
- } catch (IOException e) {
- throw new RuntimeException(e.getMessage());
- }
- }
-
- //
- // Classes of type Order are able to generate all possible paths of events
- // up to a certain recursion depth for * and +
- //
-
- public interface Order {
- List> get();
- }
-
- public class Simple implements Order {
- private Order[] order;
-
- public Simple(Order... order) {
- this.order = order;
- }
-
- public List> get() {
- List> result = Lists.newArrayList();
- result.add(Lists.newArrayList());
- for (Order o : order) {
- List> possibleNextSteps = o.get();
- List> possiblePathesWithNextSteps = Lists.newArrayList();
- for (List possiblePathesUpToThisOrderIteration : result) {
- for (List nextSteps : possibleNextSteps) {
- List tmp = Lists.newArrayList(possiblePathesUpToThisOrderIteration);
- tmp.addAll(nextSteps);
- possiblePathesWithNextSteps.add(tmp);
- }
- }
- result = possiblePathesWithNextSteps;
- }
- return result;
- }
- }
-
- public class Or implements Order {
- private Order[] order;
-
- public Or(Order... order) {
- this.order = order;
- }
-
- public List> get() {
- List> result = Lists.newArrayList();
- for (Order o : order) {
- result.addAll(o.get());
- }
- return result;
- }
- }
-
- public static class Plus implements Order {
- private Order order;
-
- public Plus(Order order) {
- this.order = order;
- }
-
- public List> get() {
- List> result = Lists.newArrayList();
- result.add(Lists.newArrayList());
- for (int i = 0; i < FiniteStateMachineTestingFramework.maxRepeat; i++) {
- List> newPathes = Lists.newArrayList();
- for (List possibleStartPaths : result) {
- for (List possibleRepeats : order.get()) {
- List clone = Lists.newArrayList(possibleStartPaths);
- clone.addAll(possibleRepeats);
- newPathes.add(clone);
- }
- }
- result.addAll(newPathes);
- }
- result.remove(0); // empty path should not be in result
- return result;
- }
- }
-
- public class Opt implements Order {
- private Order order;
-
- public Opt(Order order) {
- this.order = order;
- }
-
- public List> get() {
- List> result = Lists.newArrayList();
- result.add(Lists.newArrayList());
- result.addAll(order.get());
- return result;
- }
- }
-
- public class Star implements Order {
- private Order order;
-
- public Star(Order order) {
- this.order = new Opt(new Plus(order));
- }
-
- public List> get() {
- return order.get();
- }
- }
-
- public class E implements Order {
- private String event;
-
- public E(String event) {
- this.event = event;
- }
-
- public List> get() {
- List> result = Lists.newArrayList();
- result.add(Lists.newArrayList(event));
- return result;
- }
- }
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/HMacTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/HMacTest.java
deleted file mode 100644
index 412325ece..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/HMacTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package test.finitestatemachine;
-
-public class HMacTest extends FiniteStateMachineTestingFramework {
-
- public HMacTest() {
- super("HMac");
- this.order =
- new Simple(
- new E("HMac"),
- new Plus(
- new Simple(
- new E("init"),
- new Plus(new E("update")),
- new E("doFinal"))));
- }
- // Cons, (Init, Updates+, Finals)+
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyFactoryTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyFactoryTest.java
deleted file mode 100644
index d1fbc0f31..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyFactoryTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package test.finitestatemachine;
-
-public class KeyFactoryTest extends FiniteStateMachineTestingFramework {
-
- public KeyFactoryTest() {
- super("KeyFactory");
- this.order =
- new Simple(
- new E("getInstance"),
- new Star(
- new Or(
- new Star(new E("generatePrivate")),
- new Star(new E("generatePublic")))));
- }
- // Gets, (GenPriv* | GenPubl*)*
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyStoreTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyStoreTest.java
deleted file mode 100644
index 402937c67..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/KeyStoreTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package test.finitestatemachine;
-
-public class KeyStoreTest extends FiniteStateMachineTestingFramework {
-
- public KeyStoreTest() {
- super("KeyStore");
- this.order =
- new Simple(
- new E("getInstance"),
- new E("load"),
- new Star(
- new Or(
- new Simple(new Opt(new E("getEntry")), new E("getKey")),
- new Simple(new E("setEntry"), new E("store")))));
- }
- // Gets, Loads, ((GetEntry?, GetKey) | (SetEntry, Stores))*
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/MessageDigestTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/MessageDigestTest.java
deleted file mode 100644
index 6c7881eeb..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/MessageDigestTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package test.finitestatemachine;
-
-public class MessageDigestTest extends FiniteStateMachineTestingFramework {
-
- public MessageDigestTest() {
- super("MessageDigest");
- this.order =
- new Simple(
- new E("getInstance"),
- new Plus(
- new Or(
- new E("digest"),
- new Simple(new Plus(new E("update")), new E("digest")))));
- }
- // Gets, (DWOU | (Updates+, Digests))+
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/SHA256DigestTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/SHA256DigestTest.java
deleted file mode 100644
index 301021079..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/SHA256DigestTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package test.finitestatemachine;
-
-public class SHA256DigestTest extends FiniteStateMachineTestingFramework {
-
- public SHA256DigestTest() {
- super("SHA256Digest");
-
- this.order =
- new Simple(
- new E("SHA256Digest"),
- new Star(new Simple(new Plus(new E("update")), new E("doFinal"))));
- }
- // Cons, (Updates+, Finals)*
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/SSLEngineTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/SSLEngineTest.java
deleted file mode 100644
index af6203373..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/SSLEngineTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package test.finitestatemachine;
-
-public class SSLEngineTest extends FiniteStateMachineTestingFramework {
-
- public SSLEngineTest() {
- super("SSLEngine");
- this.order =
- new Or(
- new Simple(new E("setEnabledCipherSuites"), new E("setEnabledProtocols")),
- new Simple(new E("setEnabledProtocols"), new E("setEnabledCipherSuites")));
- }
- // (EnableCipher, EnableProtocol) | (EnableProtocol, EnableCipher)
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/SecretKey.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/SecretKey.java
deleted file mode 100644
index 0e88463a5..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/SecretKey.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package test.finitestatemachine;
-
-public class SecretKey extends FiniteStateMachineTestingFramework {
-
- public SecretKey() {
- super("SecretKey");
- this.order = new Simple(new Star(new E("getEncoded")), new Opt(new E("destroy")));
- }
- // GetEnc*, Destroy?
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/SecureRandom.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/SecureRandom.java
deleted file mode 100644
index aee117c70..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/SecureRandom.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package test.finitestatemachine;
-
-public class SecureRandom extends FiniteStateMachineTestingFramework {
-
- public SecureRandom() {
- super("SecureRandom");
-
- this.order =
- new Simple(
- new E("getInstance"),
- new Star(
- new Simple(
- new Opt(new E("setSeed")),
- new Star(new E("generateSeed")))));
- }
- // Ins, (Seeds?, Ends*)*
-
-}
diff --git a/CryptoAnalysis/src/test/java/test/finitestatemachine/SignatureTest.java b/CryptoAnalysis/src/test/java/test/finitestatemachine/SignatureTest.java
deleted file mode 100644
index df63d4ec4..000000000
--- a/CryptoAnalysis/src/test/java/test/finitestatemachine/SignatureTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package test.finitestatemachine;
-
-public class SignatureTest extends FiniteStateMachineTestingFramework {
-
- public SignatureTest() {
- super("Signature");
- this.order =
- new Simple(
- new E("getInstance"),
- new Or(
- new Simple(
- new Plus(new E("initSign")),
- new Plus(
- new Simple(
- new Plus(new E("update")),
- new Plus(new E("sign"))))),
- new Simple(
- new Plus(new E("initVerify")),
- new Plus(
- new Simple(
- new Star(new E("update")),
- new Plus(new E("verify")))))));
- }
- // THIS HAS TO MANY REPEATITIONS
- // The Test framework is not able to generate all possible paths for the following
- // Gets, ((InitSigns+, (Updates+, Signs+)+ )+ | (InitVerifies+, (Updates*, Verifies+)+ )+ )
-
- // We simplify it to
- // Gets, ( InitSigns+, (Updates+, Signs+)+ | InitVerifies+, (Updates*, Verifies+)+ )
-}
diff --git a/CryptoAnalysis/src/test/java/tests/crysl/RulesetReaderTest.java b/CryptoAnalysis/src/test/java/tests/crysl/RulesetReaderTest.java
deleted file mode 100644
index b13941338..000000000
--- a/CryptoAnalysis/src/test/java/tests/crysl/RulesetReaderTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package tests.crysl;
-
-import crypto.cryslhandler.RulesetReader;
-import crypto.rules.CrySLRule;
-import java.io.IOException;
-import java.util.Collection;
-import org.apache.commons.lang3.time.StopWatch;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class RulesetReaderTest {
-
- private static final String emptyZipFilePath = "src/test/resources/crySL/empty.zip";
- private static final String jcaRulesetZipFilePath =
- "src/test/resources/crySL/JavaCryptographicArchitecture-3.0.1-ruleset.zip";
- private static final String junkRuleSet = "src/test/resources/crySL/rulesetWithJunk.zip";
-
- @Test
- public void testJunkThrows() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromPath(junkRuleSet);
-
- Assert.assertEquals(48, rules.size());
- }
-
- @Test
- public void testNumberOfRules() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromPath(jcaRulesetZipFilePath);
-
- Assert.assertEquals(49, rules.size());
- }
-
- @Test
- public void testRulesZipFile() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromZipArchive(jcaRulesetZipFilePath);
-
- Assert.assertEquals(49, rules.size());
- }
-
- @Test(expected = IOException.class)
- public void testFileNotExists() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromPath("notExist");
- Assert.assertEquals(0, rules.size());
- }
-
- @Test
- public void testFileNoCrySLFiles() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromPath(emptyZipFilePath);
-
- Assert.assertEquals(0, rules.size());
- }
-
- @Test
- public void testRunTwiceSameResult() throws IOException {
- RulesetReader reader = new RulesetReader();
- Collection rules = reader.readRulesFromPath(jcaRulesetZipFilePath);
- Assert.assertEquals(49, rules.size());
-
- rules = reader.readRulesFromPath(jcaRulesetZipFilePath);
- Assert.assertEquals(49, rules.size());
- }
-
- @Test
- @Ignore
- public void TestPerformanceReducesSignificantlySecondTime() throws IOException {
- StopWatch watch = new StopWatch();
- watch.start();
- RulesetReader reader = new RulesetReader();
- reader.readRulesFromZipArchive(jcaRulesetZipFilePath);
- watch.stop();
- long firstRun = watch.getTime();
- watch.reset();
- watch.start();
- reader.readRulesFromZipArchive(jcaRulesetZipFilePath);
- watch.stop();
- long secondRun = watch.getTime();
- Assert.assertTrue(secondRun * 100 < firstRun);
- System.out.println("First: " + firstRun + "; Second: " + secondRun);
- }
-}
diff --git a/CryptoAnalysis/src/test/resources/crySL/JavaCryptographicArchitecture-3.0.1-ruleset.zip b/CryptoAnalysis/src/test/resources/crySL/JavaCryptographicArchitecture-3.0.1-ruleset.zip
deleted file mode 100644
index a9f61457b..000000000
Binary files a/CryptoAnalysis/src/test/resources/crySL/JavaCryptographicArchitecture-3.0.1-ruleset.zip and /dev/null differ
diff --git a/CryptoAnalysis/src/test/resources/crySL/Multiple-rulesets.zip b/CryptoAnalysis/src/test/resources/crySL/Multiple-rulesets.zip
deleted file mode 100644
index 1eb076c36..000000000
Binary files a/CryptoAnalysis/src/test/resources/crySL/Multiple-rulesets.zip and /dev/null differ
diff --git a/CryptoAnalysis/src/test/resources/crySL/empty.zip b/CryptoAnalysis/src/test/resources/crySL/empty.zip
deleted file mode 100644
index 15cb0ecb3..000000000
Binary files a/CryptoAnalysis/src/test/resources/crySL/empty.zip and /dev/null differ
diff --git a/CryptoAnalysis/src/test/resources/crySL/rulesetWithJunk.zip b/CryptoAnalysis/src/test/resources/crySL/rulesetWithJunk.zip
deleted file mode 100644
index 8bfa12533..000000000
Binary files a/CryptoAnalysis/src/test/resources/crySL/rulesetWithJunk.zip and /dev/null differ
diff --git a/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/AndroidDataFlowScope.java b/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/AndroidDataFlowScope.java
index ee047e4eb..65e4b07f9 100644
--- a/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/AndroidDataFlowScope.java
+++ b/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/AndroidDataFlowScope.java
@@ -3,7 +3,7 @@
import boomerang.scene.DeclaredMethod;
import boomerang.scene.Method;
import crypto.analysis.CryptoAnalysisDataFlowScope;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.util.Collection;
public class AndroidDataFlowScope extends CryptoAnalysisDataFlowScope {
diff --git a/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/FlowDroidSetup.java b/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/FlowDroidSetup.java
index ce8b5ef3e..09c56e4e5 100644
--- a/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/FlowDroidSetup.java
+++ b/HeadlessAndroidScanner/src/main/java/de/fraunhofer/iem/android/FlowDroidSetup.java
@@ -4,7 +4,7 @@
import boomerang.scene.jimple.SootCallGraph;
import com.google.common.base.Stopwatch;
import crypto.preanalysis.TransformerSetup;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/FrameworkSetup.java b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/FrameworkSetup.java
index 2df383617..25ca3e501 100644
--- a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/FrameworkSetup.java
+++ b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/FrameworkSetup.java
@@ -2,7 +2,7 @@
import boomerang.scene.CallGraph;
import com.google.common.base.Stopwatch;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import de.fraunhofer.iem.scanner.ScannerSettings;
import java.util.Collection;
import org.slf4j.Logger;
diff --git a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/OpalSetup.java b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/OpalSetup.java
index 028a11f6d..c2caab662 100644
--- a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/OpalSetup.java
+++ b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/OpalSetup.java
@@ -1,7 +1,7 @@
package de.fraunhofer.iem.framework;
import boomerang.scene.CallGraph;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import de.fraunhofer.iem.scanner.ScannerSettings;
import java.util.Collection;
diff --git a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootSetup.java b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootSetup.java
index 146055a8c..e460fe3f9 100644
--- a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootSetup.java
+++ b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootSetup.java
@@ -5,7 +5,7 @@
import com.google.common.collect.Lists;
import crypto.exceptions.CryptoAnalysisException;
import crypto.preanalysis.TransformerSetup;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import de.fraunhofer.iem.scanner.ScannerSettings;
import java.io.File;
import java.util.ArrayList;
diff --git a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootUpSetup.java b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootUpSetup.java
index 0d370c95b..6b8304c74 100644
--- a/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootUpSetup.java
+++ b/HeadlessJavaScanner/src/main/java/de/fraunhofer/iem/framework/SootUpSetup.java
@@ -1,7 +1,7 @@
package de.fraunhofer.iem.framework;
import boomerang.scene.CallGraph;
-import crypto.rules.CrySLRule;
+import crysl.rule.CrySLRule;
import de.fraunhofer.iem.scanner.ScannerSettings;
import java.util.Collection;
diff --git a/README.md b/README.md
index 3e1de9547..dea79faf2 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ CogniCryptSAST uses Maven as build tool. You can compile and build th
```mvn clean package -DskipTests=true```.
-The packaged `jar` artifacts including all dependencies can be found in `/apps`. Building requires at least Java 11.
+The packaged `jar` artifacts including all dependencies can be found in `/apps`. Building requires at least Java 17.
## CogniCryptSAST for Java Applications
diff --git a/action.yml b/action.yml
index 1e2bbebf3..f45fe4b99 100644
--- a/action.yml
+++ b/action.yml
@@ -48,7 +48,7 @@ runs:
with:
distribution: 'adopt'
java-package: jdk
- java-version: '11'
+ java-version: '17'
- name: Checkout rules
uses: actions/checkout@v4
diff --git a/pom.xml b/pom.xml
index be1d9bee8..52a346733 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,12 +54,12 @@
UTF-8
3.4.2
- 11
+ 17
true
3.2.2
4.6.0
- 3.0.2
+ 4.0.0
@@ -100,6 +100,11 @@
${spdsVersion}
test