Skip to content

Commit f40eefc

Browse files
Jami CogswellJami Cogswell
authored andcommitted
use CompileTimeConstantExpr instead of StringLiteral
1 parent 65f7474 commit f40eefc

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

java/ql/lib/semmle/code/java/security/InsufficientKeySize.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,5 +187,7 @@ private module Symmetric {
187187
/** An instance of a generator that specifies an encryption algorithm. */
188188
abstract private class GeneratorAlgoSpec extends CryptoAlgoSpec {
189189
/** Returns an uppercase string representing the algorithm name specified by this generator object. */
190-
string getAlgoName() { result = this.getAlgoSpec().(StringLiteral).getValue().toUpperCase() }
190+
string getAlgoName() {
191+
result = this.getAlgoSpec().(CompileTimeConstantExpr).getStringValue().toUpperCase()
192+
}
191193
}

java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java
3333
KeyGenerator keyGen5 = KeyGenerator.getInstance("AES"); // MISSING: test KeyGenerator variable as argument
3434
testSymmetricVariable(size2, keyGen5); // test with variable as key size
3535
testSymmetricInt(64); // test with int literal as key size
36+
37+
/* Test with variable as algo name argument in `getInstance` method. */
38+
final String algoName1 = "AES"; // compile-time constant
39+
KeyGenerator keyGen6 = KeyGenerator.getInstance(algoName1);
40+
keyGen6.init(64); // $ hasInsufficientKeySize
41+
42+
String algoName2 = "AES"; // not a compile-time constant
43+
KeyGenerator keyGen7 = KeyGenerator.getInstance(algoName2);
44+
keyGen7.init(64); // $ MISSING: hasInsufficientKeySize
3645
}
3746

3847
// RSA (Asymmetric): minimum recommended key size is 2048
@@ -70,6 +79,15 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java
7079
/* Test getting key size as return value of another method */
7180
KeyPairGenerator keyPairGen8 = KeyPairGenerator.getInstance("RSA");
7281
keyPairGen8.initialize(getRSAKeySize()); // $ hasInsufficientKeySize
82+
83+
/* Test with variable as algo name argument in `getInstance` method. */
84+
final String algoName1 = "RSA"; // compile-time constant
85+
KeyPairGenerator keyPairGen9 = KeyPairGenerator.getInstance(algoName1);
86+
keyPairGen9.initialize(1024); // $ hasInsufficientKeySize
87+
88+
String algoName2 = "RSA"; // not a compile-time constant
89+
KeyPairGenerator keyPairGen10 = KeyPairGenerator.getInstance(algoName2);
90+
keyPairGen10.initialize(1024); // $ MISSING: hasInsufficientKeySize
7391
}
7492

7593
// DSA (Asymmetric): minimum recommended key size is 2048
@@ -92,6 +110,15 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java
92110
/* Test `AlgorithmParameterGenerator` */
93111
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DSA");
94112
paramGen.init(1024); // $ hasInsufficientKeySize
113+
114+
/* Test with variable as algo name argument in `getInstance` method. */
115+
final String algoName1 = "DSA"; // compile-time constant
116+
AlgorithmParameterGenerator paramGen1 = AlgorithmParameterGenerator.getInstance(algoName1);
117+
paramGen1.init(1024); // $ hasInsufficientKeySize
118+
119+
String algoName2 = "DSA"; // not a compile-time constant
120+
AlgorithmParameterGenerator paramGen2 = AlgorithmParameterGenerator.getInstance(algoName2);
121+
paramGen2.init(1024); // $ MISSING: hasInsufficientKeySize
95122
}
96123

97124
// DH (Asymmetric): minimum recommended key size is 2048
@@ -173,6 +200,17 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java
173200
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("EC"); // MISSING: test KeyGenerator variable as argument
174201
testAsymmetricEcIntVariable(size, keyPairGen); // test with variable as key size
175202
testAsymmetricEcIntLiteral(128); // test with int literal as key size
203+
204+
/* Test with variable as curve name argument in `ECGenParameterSpec` constructor. */
205+
final String curveName1 = "secp112r1"; // compile-time constant
206+
KeyPairGenerator keyPairGen16 = KeyPairGenerator.getInstance("EC");
207+
ECGenParameterSpec ecSpec11 = new ECGenParameterSpec(curveName1); // $ hasInsufficientKeySize
208+
keyPairGen16.initialize(ecSpec11);
209+
210+
String curveName2 = "secp112r1"; // not a compile-time constant
211+
KeyPairGenerator keyPairGen17 = KeyPairGenerator.getInstance("EC");
212+
ECGenParameterSpec ecSpec12 = new ECGenParameterSpec(curveName2); // $ hasInsufficientKeySize
213+
keyPairGen17.initialize(ecSpec12);
176214
}
177215
}
178216

0 commit comments

Comments
 (0)