Skip to content

Commit e76ac02

Browse files
authored
Update the isAssignableFrom checks (#157)
According to https://bugs.openjdk.org/browse/JDK-8279800, isAssignableFrom means is-parent-of and you can only cast an object of a child class to that of a parent class. Signed-off-by: Tao Liu <tao.liu@ibm.com>
1 parent eb20faa commit e76ac02

21 files changed

+228
-36
lines changed

src/main/java/com/ibm/crypto/plus/provider/AESKeyFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec)
8484
&& (key.getFormat().equalsIgnoreCase("RAW"))) {
8585

8686
// Check if requested key spec is amongst the valid ones
87-
if (SecretKeySpec.class.isAssignableFrom(keySpec)) {
87+
if (keySpec.isAssignableFrom(SecretKeySpec.class)) {
8888
return new SecretKeySpec(key.getEncoded(), key.getAlgorithm());
8989
} else {
9090
throw new InvalidKeySpecException("Inappropriate key specification");

src/main/java/com/ibm/crypto/plus/provider/AESParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
7979
throws InvalidParameterSpecException {
8080
try {
8181
Class<?> ivParamSpec = Class.forName("javax.crypto.spec.IvParameterSpec");
82-
if (ivParamSpec.isAssignableFrom(paramSpec)) {
82+
if (paramSpec.isAssignableFrom(ivParamSpec)) {
8383
return paramSpec.cast(new IvParameterSpec(this.iv));
8484
} else {
8585
throw new InvalidParameterSpecException("Inappropriate parameter specification");

src/main/java/com/ibm/crypto/plus/provider/CCMParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ protected void engineInit(byte[] encoded, String decodingMethod) throws IOExcept
146146
@Override
147147
protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> paramSpec)
148148
throws InvalidParameterSpecException {
149-
if (CCMParameterSpec.class.isAssignableFrom(paramSpec)) {
149+
if (paramSpec.isAssignableFrom(CCMParameterSpec.class)) {
150150
if (initialized == true) {
151151
CCMParameterSpec tmpSpec = new CCMParameterSpec(this.tagLen, this.iv);
152152
return paramSpec.cast(tmpSpec);

src/main/java/com/ibm/crypto/plus/provider/ChaCha20KeyFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec)
8484
&& (key.getFormat().equalsIgnoreCase("RAW"))) {
8585

8686
// Check if requested key spec is amongst the valid ones
87-
if (SecretKeySpec.class.isAssignableFrom(keySpec)) {
87+
if (keySpec.isAssignableFrom(SecretKeySpec.class)) {
8888
return new SecretKeySpec(key.getEncoded(), key.getAlgorithm());
8989
} else {
9090
throw new InvalidKeySpecException("Inappropriate key specification");

src/main/java/com/ibm/crypto/plus/provider/ChaCha20Parameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
6363
throws InvalidParameterSpecException {
6464
try {
6565
Class<?> chaCha20ParamSpec = Class.forName("javax.crypto.spec.ChaCha20ParameterSpec");
66-
if (chaCha20ParamSpec.isAssignableFrom(paramSpec)) {
66+
if (paramSpec.isAssignableFrom(chaCha20ParamSpec)) {
6767
return paramSpec.cast(new ChaCha20ParameterSpec(this.nonce, this.counter));
6868
} else {
6969
throw new InvalidParameterSpecException("Inappropriate parameter specification");

src/main/java/com/ibm/crypto/plus/provider/ChaCha20Poly1305Parameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
7373
throws InvalidParameterSpecException {
7474
try {
7575
Class<?> ivParamSpec = Class.forName("javax.crypto.spec.IvParameterSpec");
76-
if (ivParamSpec.isAssignableFrom(paramSpec)) {
76+
if (paramSpec.isAssignableFrom(ivParamSpec)) {
7777
return paramSpec.cast(new IvParameterSpec(this.nonce));
7878
} else {
7979
throw new InvalidParameterSpecException("Inappropriate parameter specification");

src/main/java/com/ibm/crypto/plus/provider/DESedeKeyFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec)
9090
&& (key.getFormat().equalsIgnoreCase("RAW"))) {
9191

9292
// Check if requested key spec is amongst the valid ones
93-
if (DESedeKeySpec.class.isAssignableFrom(keySpec)) {
93+
if (keySpec.isAssignableFrom(DESedeKeySpec.class)) {
9494
return new DESedeKeySpec(key.getEncoded());
9595

9696
} else {

src/main/java/com/ibm/crypto/plus/provider/DESedeParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
7070
throws InvalidParameterSpecException {
7171
try {
7272
Class<?> ivParamSpec = Class.forName("javax.crypto.spec.IvParameterSpec");
73-
if (ivParamSpec.isAssignableFrom(paramSpec)) {
73+
if (paramSpec.isAssignableFrom(ivParamSpec)) {
7474
return paramSpec.cast(new IvParameterSpec(this.iv));
7575
} else {
7676
throw new InvalidParameterSpecException("Inappropriate parameter specification");

src/main/java/com/ibm/crypto/plus/provider/DHKeyFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
139139
Class<?> dhPubKeySpec = Class.forName("javax.crypto.spec.DHPublicKeySpec");
140140
Class<?> x509KeySpec = Class.forName("java.security.spec.X509EncodedKeySpec");
141141

142-
if (dhPubKeySpec.isAssignableFrom(keySpec)) {
142+
if (keySpec.isAssignableFrom(dhPubKeySpec)) {
143143
javax.crypto.interfaces.DHPublicKey dhPubKey = (javax.crypto.interfaces.DHPublicKey) key;
144144
params = dhPubKey.getParams();
145145
return keySpec.cast(
146146
new DHPublicKeySpec(dhPubKey.getY(), params.getP(), params.getG()));
147147

148-
} else if (x509KeySpec.isAssignableFrom(keySpec)) {
148+
} else if (keySpec.isAssignableFrom(x509KeySpec)) {
149149
return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
150150

151151
} else {
@@ -158,13 +158,13 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
158158
Class<?> dhPrivKeySpec = Class.forName("javax.crypto.spec.DHPrivateKeySpec");
159159
Class<?> pkcs8KeySpec = Class.forName("java.security.spec.PKCS8EncodedKeySpec");
160160

161-
if (dhPrivKeySpec.isAssignableFrom(keySpec)) {
161+
if (keySpec.isAssignableFrom(dhPrivKeySpec)) {
162162
javax.crypto.interfaces.DHPrivateKey dhPrivKey = (javax.crypto.interfaces.DHPrivateKey) key;
163163
params = dhPrivKey.getParams();
164164
return keySpec.cast(
165165
new DHPrivateKeySpec(dhPrivKey.getX(), params.getP(), params.getG()));
166166

167-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
167+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec)) {
168168
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
169169

170170
} else {

src/main/java/com/ibm/crypto/plus/provider/DHParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
9090
throws InvalidParameterSpecException {
9191
try {
9292
Class<?> dhParamSpec = Class.forName("javax.crypto.spec.DHParameterSpec");
93-
if (dhParamSpec.isAssignableFrom(paramSpec)) {
93+
if (paramSpec.isAssignableFrom(dhParamSpec)) {
9494
return paramSpec.cast(new DHParameterSpec(this.p, this.g, this.l));
9595
} else {
9696
throw new InvalidParameterSpecException("Inappropriate parameter Specification");

src/main/java/com/ibm/crypto/plus/provider/DSAKeyFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,13 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
121121
Class<?> dsaPubKeySpec = Class.forName("java.security.spec.DSAPublicKeySpec");
122122
Class<?> x509KeySpec = Class.forName("java.security.spec.X509EncodedKeySpec");
123123

124-
if (dsaPubKeySpec.isAssignableFrom(keySpec)) {
124+
if (keySpec.isAssignableFrom(dsaPubKeySpec)) {
125125
java.security.interfaces.DSAPublicKey dsaPubKey = (java.security.interfaces.DSAPublicKey) key;
126126
params = dsaPubKey.getParams();
127127
return keySpec.cast(new DSAPublicKeySpec(dsaPubKey.getY(), params.getP(),
128128
params.getQ(), params.getG()));
129129

130-
} else if (x509KeySpec.isAssignableFrom(keySpec)) {
130+
} else if (keySpec.isAssignableFrom(x509KeySpec)) {
131131
return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
132132

133133
} else {
@@ -140,13 +140,13 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
140140
Class<?> dsaPrivKeySpec = Class.forName("java.security.spec.DSAPrivateKeySpec");
141141
Class<?> pkcs8KeySpec = Class.forName("java.security.spec.PKCS8EncodedKeySpec");
142142

143-
if (dsaPrivKeySpec.isAssignableFrom(keySpec)) {
143+
if (keySpec.isAssignableFrom(dsaPrivKeySpec)) {
144144
java.security.interfaces.DSAPrivateKey dsaPrivKey = (java.security.interfaces.DSAPrivateKey) key;
145145
params = dsaPrivKey.getParams();
146146
return keySpec.cast(new DSAPrivateKeySpec(dsaPrivKey.getX(), params.getP(),
147147
params.getQ(), params.getG()));
148148

149-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
149+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec)) {
150150
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
151151

152152
} else {

src/main/java/com/ibm/crypto/plus/provider/DSAParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> p
9595
throws InvalidParameterSpecException {
9696
try {
9797
Class<?> dsaParamSpec = Class.forName("java.security.spec.DSAParameterSpec");
98-
if (dsaParamSpec.isAssignableFrom(paramSpec)) {
98+
if (paramSpec.isAssignableFrom(dsaParamSpec)) {
9999
return paramSpec.cast(new DSAParameterSpec(this.p, this.q, this.g));
100100
} else {
101101
throw new InvalidParameterSpecException("Inappropriate parameter Specification");

src/main/java/com/ibm/crypto/plus/provider/ECKeyFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
9999
Class<?> ecPubKeySpec = Class.forName("java.security.spec.ECPublicKeySpec");
100100
Class<?> x509KeySpec = Class.forName("java.security.spec.X509EncodedKeySpec");
101101

102-
if (ecPubKeySpec.isAssignableFrom(keySpec)) {
102+
if (keySpec.isAssignableFrom(ecPubKeySpec)) {
103103
java.security.interfaces.ECPublicKey ecPubKey = (java.security.interfaces.ECPublicKey) key;
104104

105105
return keySpec.cast(new ECPublicKeySpec(ecPubKey.getW(), ecPubKey.getParams()));
106106

107-
} else if (x509KeySpec.isAssignableFrom(keySpec)) {
107+
} else if (keySpec.isAssignableFrom(x509KeySpec)) {
108108
return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
109109

110110
} else {
@@ -117,12 +117,12 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
117117
Class<?> ecPrivKeySpec = Class.forName("java.security.spec.ECPrivateKeySpec");
118118
Class<?> pkcs8KeySpec = Class.forName("java.security.spec.PKCS8EncodedKeySpec");
119119

120-
if (ecPrivKeySpec.isAssignableFrom(keySpec)) {
120+
if (keySpec.isAssignableFrom(ecPrivKeySpec)) {
121121
java.security.interfaces.ECPrivateKey ecPrivKey = (java.security.interfaces.ECPrivateKey) key;
122122
return keySpec
123123
.cast(new ECPrivateKeySpec(ecPrivKey.getS(), ecPrivKey.getParams()));
124124

125-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
125+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec)) {
126126
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
127127

128128
} else {

src/main/java/com/ibm/crypto/plus/provider/GCMParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ protected void engineInit(byte[] encoded, String decodingMethod) throws IOExcept
100100
@Override
101101
protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> paramSpec)
102102
throws InvalidParameterSpecException {
103-
if (GCMParameterSpec.class.isAssignableFrom(paramSpec)) {
103+
if (paramSpec.isAssignableFrom(GCMParameterSpec.class)) {
104104
if (authenticationData != null) {
105105
// create one with authenticationData
106106
if (tagLen != -1) {

src/main/java/com/ibm/crypto/plus/provider/OAEPParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ protected void engineInit(byte[] encoded, String decodingMethod) throws IOExcept
150150

151151
protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> paramSpec)
152152
throws InvalidParameterSpecException {
153-
if (OAEPParameterSpec.class.isAssignableFrom(paramSpec)) {
153+
if (paramSpec.isAssignableFrom(OAEPParameterSpec.class)) {
154154
return paramSpec.cast(
155155
new OAEPParameterSpec(mdName, "MGF1", mgfSpec, new PSource.PSpecified(p)));
156156
} else {

src/main/java/com/ibm/crypto/plus/provider/PSSParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ protected byte[] engineGetEncoded(String encodingMethod) throws IOException {
721721
*/
722722
protected <T extends AlgorithmParameterSpec> T engineGetParameterSpec(Class<T> paramSpecClass)
723723
throws InvalidParameterSpecException {
724-
if (java.security.spec.PSSParameterSpec.class.isAssignableFrom(paramSpecClass)) {
724+
if (paramSpecClass.isAssignableFrom(java.security.spec.PSSParameterSpec.class)) {
725725
return paramSpecClass.cast(new PSSParameterSpec(this.hashAlgorithm.getName(),
726726
this.maskGenAlgorithm.getName(),
727727
this.mgfParameterSpec,

src/main/java/com/ibm/crypto/plus/provider/RSAKeyFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
257257
// Determine valid key specs
258258
Class<?> rsaPubKeySpec = Class.forName("java.security.spec.RSAPublicKeySpec");
259259
Class<?> x509KeySpec = Class.forName("java.security.spec.X509EncodedKeySpec");
260-
if (rsaPubKeySpec.isAssignableFrom(keySpec)) {
260+
if (keySpec.isAssignableFrom(rsaPubKeySpec)) {
261261
java.security.interfaces.RSAPublicKey rsaPubKey = (java.security.interfaces.RSAPublicKey) key;
262262
return keySpec.cast(new RSAPublicKeySpec(rsaPubKey.getModulus(),
263263
rsaPubKey.getPublicExponent(), rsaPubKey.getParams()));
264-
} else if (x509KeySpec.isAssignableFrom(keySpec)) {
264+
} else if (keySpec.isAssignableFrom(x509KeySpec)) {
265265
return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
266266
} else {
267267
throw new InvalidKeySpecException("Inappropriate key specification");
@@ -278,9 +278,9 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
278278
rsaPrivCrtKey.getPrimeExponentP(), rsaPrivCrtKey.getPrimeExponentQ(),
279279
rsaPrivCrtKey.getCrtCoefficient(), rsaPrivCrtKey.getParams()));
280280

281-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
281+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec)) {
282282
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
283-
} else if (rsaPrivKeySpec.isAssignableFrom(keySpec)) {
283+
} else if (keySpec.isAssignableFrom(rsaPrivKeySpec)) {
284284
java.security.interfaces.RSAPrivateKey rsaPrivKey = (java.security.interfaces.RSAPrivateKey) key;
285285
return keySpec.cast(new RSAPrivateKeySpec(rsaPrivKey.getModulus(),
286286
rsaPrivKey.getPrivateExponent(), rsaPrivKey.getParams()));
@@ -291,11 +291,11 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
291291
// Determine valid key specs
292292
Class<?> rsaPrivKeySpec = Class.forName("java.security.spec.RSAPrivateKeySpec");
293293
Class<?> pkcs8KeySpec = Class.forName("java.security.spec.PKCS8EncodedKeySpec");
294-
if (rsaPrivKeySpec.isAssignableFrom(keySpec)) {
294+
if (keySpec.isAssignableFrom(rsaPrivKeySpec)) {
295295
java.security.interfaces.RSAPrivateKey rsaPrivKey = (java.security.interfaces.RSAPrivateKey) key;
296296
return keySpec.cast(new RSAPrivateKeySpec(rsaPrivKey.getModulus(),
297297
rsaPrivKey.getPrivateExponent(), rsaPrivKey.getParams()));
298-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
298+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec)) {
299299
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
300300
} else {
301301
throw new InvalidKeySpecException("Inappropriate key specification");

src/main/java/com/ibm/crypto/plus/provider/XDHKeyFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
126126
Class<?> xecPubKeySpec = Class.forName("java.security.spec.XECPublicKeySpec");
127127
Class<?> x509KeySpec = Class.forName("java.security.spec.X509EncodedKeySpec");
128128

129-
if (xecPubKeySpec.isAssignableFrom(keySpec)) {
129+
if (keySpec.isAssignableFrom(xecPubKeySpec)) {
130130
XECPublicKey xecPubKey = (XECPublicKey) key;
131131
params = xecPubKey.getParams();
132132

@@ -138,7 +138,7 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
138138

139139
BigInteger u = xecPubKey.getU();
140140
return keySpec.cast(new XECPublicKeySpec(params, u));
141-
} else if (x509KeySpec.isAssignableFrom(keySpec))
141+
} else if (keySpec.isAssignableFrom(x509KeySpec))
142142
return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
143143
else
144144
throw new InvalidKeySpecException("Inappropriate key specification");
@@ -149,7 +149,7 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
149149
Class<?> xecPrivKeySpec = Class.forName("java.security.spec.XECPrivateKeySpec");
150150
Class<?> pkcs8KeySpec = Class.forName("java.security.spec.PKCS8EncodedKeySpec");
151151

152-
if (xecPrivKeySpec.isAssignableFrom(keySpec)) {
152+
if (keySpec.isAssignableFrom(xecPrivKeySpec)) {
153153
XECPrivateKey xecPrivKey = (XECPrivateKey) key;
154154
params = xecPrivKey.getParams();
155155

@@ -161,7 +161,7 @@ protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
161161

162162
Optional<byte[]> scalar = xecPrivKey.getScalar();
163163
return keySpec.cast(new XECPrivateKeySpec(params, scalar.get()));
164-
} else if (pkcs8KeySpec.isAssignableFrom(keySpec))
164+
} else if (keySpec.isAssignableFrom(pkcs8KeySpec))
165165
return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
166166
else
167167
throw new InvalidKeySpecException("Inappropriate key specification");

0 commit comments

Comments
 (0)