Skip to content

Commit 0820dd8

Browse files
authored
Merge pull request #403 from rakshitkr/latest-codegen-fix
Fixed some bugs in codegenerator plugin
2 parents 3129de9 + 5eef158 commit 0820dd8

8 files changed

Lines changed: 336 additions & 335 deletions

File tree

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/crysl/templates/encryption/SecureEncryptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public javax.crypto.SecretKey getKey(char[] pwd) {
2020
byte[] salt = new byte[32];
2121
javax.crypto.SecretKey encryptionKey = null;
2222
int keysize = 128;
23-
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("java.security.PBEKeySpec")
24-
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("java.security.SecretKey")
25-
.includeClass("javax.crypto.SecretKeySpec").addParameter(encryptionKey, "this").generate();
23+
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("javax.crypto.spec.PBEKeySpec")
24+
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("javax.crypto.SecretKey")
25+
.includeClass("javax.crypto.spec.SecretKeySpec").addParameter(encryptionKey, "this").generate();
2626

2727
return encryptionKey;
2828
}

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/crysl/templates/encryptionfiles/SecureEncryptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public javax.crypto.SecretKey getKey(char[] pwd) {
2424
byte[] salt = new byte[32];
2525
javax.crypto.SecretKey encryptionKey = null;
2626
int keysize = 128;
27-
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("java.security.PBEKeySpec")
28-
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("java.security.SecretKey")
29-
.includeClass("javax.crypto.SecretKeySpec").addParameter(encryptionKey, "this").generate();
27+
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("javax.crypto.spec.PBEKeySpec")
28+
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("javax.crypto.SecretKey")
29+
.includeClass("javax.crypto.spec.SecretKeySpec").addParameter(encryptionKey, "this").generate();
3030

3131
return encryptionKey;
3232
}

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/crysl/templates/encryptionstrings/SecureEncryptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public javax.crypto.SecretKey getKey(char[] pwd) {
2424
byte[] salt = new byte[32];
2525
javax.crypto.SecretKey encryptionKey = null;
2626
int keysize = 128;
27-
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("java.security.PBEKeySpec")
28-
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("java.security.SecretKey")
29-
.includeClass("javax.crypto.SecretKeySpec").addParameter(encryptionKey, "this").generate();
27+
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("javax.crypto.spec.PBEKeySpec")
28+
.addParameter(pwd, "password").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("javax.crypto.SecretKey")
29+
.includeClass("javax.crypto.spec.SecretKeySpec").addParameter(encryptionKey, "this").generate();
3030

3131
return encryptionKey;
3232
}

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/crysl/templates/securepassword/PasswordHasher.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public static java.lang.String createPWHash(char[] pwd) throws GeneralSecurityEx
2323
byte[] pwdHashBytes = null;
2424
int keysize = 160;
2525

26-
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("java.security.PBEKeySpec")
27-
.addParameter(pwd, "password").addParameter(salt, "salt").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("java.security.SecretKey").addParameter(pwdHashBytes, "keyMaterial").generate();
26+
CrySLCodeGenerator.getInstance().includeClass("java.security.SecureRandom").addParameter(salt, "next").includeClass("javax.crypto.spec.PBEKeySpec")
27+
.addParameter(pwd, "password").addParameter(salt, "salt").addParameter(keysize, "keylength").includeClass("javax.crypto.SecretKeyFactory").includeClass("javax.crypto.SecretKey").addParameter(pwdHashBytes, "keyMaterial").generate();
2828

2929
java.lang.String pwdHash = toBase64(salt) + ":" + toBase64(pwdHashBytes);
3030
return pwdHash;
@@ -36,8 +36,8 @@ public static boolean verifyPWHash(char[] pwd, java.lang.String pwdhash) throws
3636
byte[] res = null;
3737
int keysize = 160;
3838

39-
CrySLCodeGenerator.getInstance().includeClass("java.security.PBEKeySpec").addParameter(pwd, "password").addParameter(salt, "salt").addParameter(keysize, "keylength")
40-
.includeClass("javax.crypto.SecretKeyFactory").includeClass("java.security.SecretKey").addParameter(res, "keyMaterial").generate();
39+
CrySLCodeGenerator.getInstance().includeClass("javax.crypto.spec.PBEKeySpec").addParameter(pwd, "password").addParameter(salt, "salt").addParameter(keysize, "keylength")
40+
.includeClass("javax.crypto.SecretKeyFactory").includeClass("javax.crypto.SecretKey").addParameter(res, "keyMaterial").generate();
4141

4242
Boolean areEqual = slowEquals(res, fromBase64(parts[1]));
4343
return areEqual;

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/generator/CodeGenCrySLRule.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ public class CodeGenCrySLRule extends CrySLRule {
2727
private static final long serialVersionUID = -7488186084564628280L;
2828
private List<CrySLMethod> requiredMethods;
2929
private List<CodeGenCrySLObject> requiredPars;
30-
private CrySLObject requiredRetObj;
30+
private CodeGenCrySLObject requiredRetObj;
3131

32-
public CodeGenCrySLRule(String _className, List<Entry<String, String>> defObjects, List<CrySLForbiddenMethod> _forbiddenMethods, StateMachineGraph _usagePattern, List<ISLConstraint> _constraints, List<CrySLPredicate> _predicates, List<CodeGenCrySLObject> pars, CrySLObject reqRet) {
32+
public CodeGenCrySLRule(String _className, List<Entry<String, String>> defObjects, List<CrySLForbiddenMethod> _forbiddenMethods, StateMachineGraph _usagePattern, List<ISLConstraint> _constraints, List<CrySLPredicate> _predicates, List<CodeGenCrySLObject> pars, CodeGenCrySLObject reqRet) {
3333
super(_className, defObjects, _forbiddenMethods, _usagePattern, _constraints, _predicates);
3434
requiredPars = pars;
3535
requiredRetObj = reqRet;
3636
}
3737

38-
public CodeGenCrySLRule(CrySLRule rule, List<CodeGenCrySLObject> pars, CrySLObject reqRet) {
38+
public CodeGenCrySLRule(CrySLRule rule, List<CodeGenCrySLObject> pars, CodeGenCrySLObject reqRet) {
3939
this(rule.getClassName(), rule.getObjects(), rule.getForbiddenMethods(), rule.getUsagePattern(), rule.getConstraints(), rule.getPredicates(), pars, reqRet);
4040
}
4141

@@ -58,7 +58,7 @@ public List<CodeGenCrySLObject> getRequiredPars() {
5858
return requiredPars;
5959
}
6060

61-
public CrySLObject getRequiredRetObj() {
61+
public CodeGenCrySLObject getRequiredRetObj() {
6262
return requiredRetObj;
6363
}
6464

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/generator/CrySLBasedCodeGenerator.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,10 @@ public boolean generateCodeTemplates(Configuration chosenConfig, String pathToFo
260260
}
261261
if (toBeEnsuredPred == null) {
262262
for (CrySLPredicate reqPred : rule.getPredicates()) {
263-
CrySLObject a = ((CodeGenCrySLRule) rule).getRequiredRetObj();
263+
CodeGenCrySLObject a = rule.getRequiredRetObj();
264264
if (reqPred.getParameters().size() > 0) {
265-
boolean baseMatch = Utils.isSubType(((CrySLObject) reqPred.getParameters().get(0)).getJavaType(), a.getJavaType());
265+
boolean baseMatch = Utils.isSubType(((CrySLObject) reqPred.getParameters().get(0)).getJavaType(), a.getJavaType())
266+
&& reqPred.getParameters().get(0).getName().equals(a.getCrySLVariable());
266267
if (!baseMatch) {
267268
continue;
268269
}
@@ -683,11 +684,11 @@ private Class<?>[] collectParameterTypes(List<Entry<String, String>> parameters)
683684
} else {
684685
try {
685686
methodParameter[i] = Class.forName(parameter.getValue());
686-
i++;
687687
} catch (ClassNotFoundException e) {
688688
Activator.getDefault().logError(e, "No class found for type: " + parameter.getValue().toString());
689689
}
690690
}
691+
i++;
691692
}
692693
return methodParameter;
693694
}
@@ -743,7 +744,7 @@ else if (methodName.equals(lastInvokedMethod) && returnValueType.equals(voidStri
743744
}
744745
// Not the last invoked method and return type is not equal to "void".
745746
else if (!methodName.equals(lastInvokedMethod) && !returnValueType.equals(voidString)) {
746-
methodInvocation = returnValueType + " = " + instanceName + "." + currentInvokedMethod;
747+
methodInvocation = retObjInTemplate.getName() + " = " + instanceName + "." + currentInvokedMethod;
747748
generated = true;
748749
}
749750
}
@@ -1226,12 +1227,13 @@ public GeneratorClass setUpTemplateClass(String pathToTemplateFile) {
12261227
final ASTVisitor astVisitor = new ASTVisitor(true) {
12271228

12281229
GeneratorMethod curMethod = null;
1229-
CrySLObject retObj = null;
1230+
CodeGenCrySLObject retObj = null;
12301231
List<CodeGenCrySLObject> pars = new ArrayList<>();
12311232
Map<SimpleName, CrySLObject> preCGVars = new HashMap<SimpleName, CrySLObject>();
12321233
Map<SimpleName, CrySLObject> postCGVars = new HashMap<SimpleName, CrySLObject>();
12331234

12341235
List<CodeGenCrySLRule> rules = new ArrayList<CodeGenCrySLRule>();
1236+
List<CrySLRule> rulesFromSootRunner = SootRunner.getRules(getDeveloperProject().project);
12351237

12361238
@SuppressWarnings({ "unchecked", "rawtypes" })
12371239
@Override
@@ -1248,19 +1250,17 @@ public boolean visit(MethodInvocation node) {
12481250
if (efqn.equals(varfqn)) {
12491251
CrySLObject crySLObject = preCGVars.get(var);
12501252
if(pars.isEmpty()) {
1251-
retObj = crySLObject;
1253+
retObj = new CodeGenCrySLObject(crySLObject, (String) ((StringLiteral) arguments.get(1)).resolveConstantExpressionValue());
12521254
}
12531255
pars.add(new CodeGenCrySLObject(crySLObject, (String) ((StringLiteral) arguments.get(1)).resolveConstantExpressionValue()));
12541256
break;
12551257
}
12561258
}
12571259
} else if ("includeClass".equals(calledMethodName)) {
12581260
String rule = Utils.filterQuotes(arguments.get(0).toString());
1259-
List<CrySLRule> rulesFromSootRunner = SootRunner.getRules(getDeveloperProject().project);
1260-
String simpleRuleName = rule.substring(rule.lastIndexOf(".") + 1);
12611261
CrySLRule crySLRule = null;//CrySLUtils.getCrySLRule(simpleRuleName);
12621262
for (CrySLRule crySLRuleFromSootRunner : rulesFromSootRunner) {
1263-
if(crySLRuleFromSootRunner.getClassName().contains(simpleRuleName)) {
1263+
if(crySLRuleFromSootRunner.getClassName().equals(rule)) {
12641264
crySLRule = crySLRuleFromSootRunner;
12651265
}
12661266
}

0 commit comments

Comments
 (0)