Skip to content

Commit c4f2607

Browse files
Pass constructor parameters in Service initialization (#994)
Current code ignores parameters that need to be passed to the constructor of a service that needs to be initialized. This change is rectifying this and ensuring parameters are appropriately forwarded to the service's constructor. Currently no service in this version supports it, so it cannot be tested. Signed-off-by: Kostas Tsiounis <[email protected]>
1 parent b8bcaba commit c4f2607

File tree

6 files changed

+179
-243
lines changed

6 files changed

+179
-243
lines changed

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
public final class DHParameters extends AlgorithmParametersSpi implements java.io.Serializable {
2525
private static final long serialVersionUID = 7137508373627164657L;
2626

27-
private OpenJCEPlusProvider provider;
28-
2927
// The prime (p)
3028
private BigInteger p;
3129

@@ -35,9 +33,7 @@ public final class DHParameters extends AlgorithmParametersSpi implements java.i
3533
// The private-value length (l)
3634
private int l;
3735

38-
public DHParameters(OpenJCEPlusProvider provider) {
39-
this.provider = provider;
40-
}
36+
public DHParameters() {}
4137

4238
@Override
4339
protected void engineInit(AlgorithmParameterSpec paramSpec)
@@ -143,7 +139,7 @@ int getL() {
143139

144140
@Override
145141
protected String engineToString() {
146-
StringBuffer strbuf = new StringBuffer(provider.getName() + " Diffie-Hellman Parameters:\n"
142+
StringBuffer strbuf = new StringBuffer("OpenJCEPlusProvider Diffie-Hellman Parameters:\n"
147143
+ "p:\n" + this.p.toString() + "\n" + "g:\n" + this.g.toString());
148144
if (this.l != 0)
149145
strbuf.append("\nl:\n" + " " + this.l);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private void initDHPrivateKey(OpenJCEPlusProvider provider, BigInteger x, DHPara
8080
this.x = x;
8181

8282
if (dhp == null) {
83-
this.dhParams = new DHParameters(provider);
83+
this.dhParams = new DHParameters();
8484
try {
8585
this.dhParams.engineInit(new DHParameterSpec(p, g, l));
8686
} catch (InvalidParameterSpecException e) {
@@ -203,7 +203,7 @@ private byte[] convertOCKPrivateKeyBytes(byte[] encodedKey) throws IOException {
203203
this.key = val.getData().getOctetString();
204204
parseKeyBits();
205205

206-
dhParams = new DHParameters(provider);
206+
dhParams = new DHParameters();
207207
dhParams.engineInit((l == -1) ? new DHParameterSpec(p, g, x.bitLength())
208208
: new DHParameterSpec(p, g, l));
209209

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ final class DHPublicKey extends X509Key
5555
int l) throws InvalidKeyException {
5656
this.provider = provider;
5757
this.y = y;
58-
dhParams = new DHParameters(provider);
58+
dhParams = new DHParameters();
5959
try {
6060
dhParams.engineInit(new DHParameterSpec(p, g, l));
6161
byte[] keyArray = new DerValue(DerValue.tag_Integer, this.y.toByteArray()).toByteArray();
@@ -204,7 +204,7 @@ private byte[] convertOCKPublicKeyBytes(byte[] encodedKey) throws IOException {
204204
throw new InvalidKeyException("Excess key data");
205205
}
206206

207-
dhParams = new DHParameters(provider);
207+
dhParams = new DHParameters();
208208
dhParams.engineInit((l == -1) ? new DHParameterSpec(p, g, y.bitLength())
209209
: new DHParameterSpec(p, g, l));
210210

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

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,12 @@
1010

1111
import com.ibm.crypto.plus.provider.ock.OCKContext;
1212
import com.ibm.crypto.plus.provider.ock.OCKException;
13-
import java.lang.reflect.Constructor;
1413
import java.security.AccessController;
15-
import java.security.InvalidParameterException;
16-
import java.security.Key;
1714
import java.security.NoSuchAlgorithmException;
18-
import java.security.PrivateKey;
1915
import java.security.Provider;
2016
import java.security.ProviderException;
21-
import java.security.PublicKey;
22-
import java.util.Arrays;
2317
import java.util.HashMap;
24-
import java.util.List;
2518
import java.util.Map;
26-
import javax.crypto.SecretKey;
2719

2820
@SuppressWarnings({"removal", "deprecation"})
2921
public final class OpenJCEPlus extends OpenJCEPlusProvider {
@@ -976,115 +968,6 @@ private void registerAlgorithms(Provider jce) {
976968

977969
}
978970

979-
private static class OpenJCEPlusService extends Service {
980-
981-
OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
982-
String[] aliases) {
983-
this(provider, type, algorithm, className, aliases, null);
984-
}
985-
986-
OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
987-
String[] aliases, Map<String, String> attributes) {
988-
super(provider, type, algorithm, className, toList(aliases), attributes);
989-
990-
if (debug != null) {
991-
debug.println("Constructing OpenJCEPlusService: " + provider + ", " + type
992-
+ ", " + algorithm + ", " + className);
993-
}
994-
}
995-
996-
private static List<String> toList(String[] aliases) {
997-
return (aliases == null) ? null : Arrays.asList(aliases);
998-
}
999-
1000-
@Override
1001-
public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
1002-
Provider provider = getProvider();
1003-
String className = getClassName();
1004-
try {
1005-
Class<?> cls = Class.forName(className);
1006-
1007-
// Call the constructor that takes an OpenJCEPlusProvider if
1008-
// available
1009-
//
1010-
try {
1011-
Class<?>[] parameters = new Class<?>[1];
1012-
parameters[0] = Class
1013-
.forName("com.ibm.crypto.plus.provider.OpenJCEPlusProvider");
1014-
Constructor<?> constr = cls.getConstructor(parameters);
1015-
1016-
return constr.newInstance(new Object[] {provider});
1017-
} catch (java.lang.NoSuchMethodException e) {
1018-
}
1019-
} catch (Exception clex) {
1020-
throw new NoSuchAlgorithmException(clex);
1021-
}
1022-
1023-
return super.newInstance(constructorParameter);
1024-
}
1025-
1026-
@Override
1027-
public boolean supportsParameter(Object parameter) {
1028-
1029-
if (parameter == null) {
1030-
return false;
1031-
}
1032-
if (parameter instanceof Key == false) {
1033-
throw new InvalidParameterException("Parameter must be a Key");
1034-
}
1035-
Key key = (Key) parameter;
1036-
1037-
if (key instanceof SecretKey) {
1038-
1039-
String keyType = ((SecretKey) key).getFormat();
1040-
if (keyType == null) {
1041-
// this happens when encoding is not supported
1042-
return true;
1043-
}
1044-
if (keyType.equalsIgnoreCase("RAW") || keyType.equalsIgnoreCase("PKCS5_DERIVED_KEY")
1045-
|| keyType.equalsIgnoreCase("PKCS5_KEY")) {
1046-
return true;
1047-
} else {
1048-
return false;
1049-
}
1050-
1051-
} else if (key instanceof PrivateKey) {
1052-
String keyType = ((PrivateKey) key).getFormat();
1053-
if (keyType == null) {
1054-
// this happens when encoding is not supported
1055-
return true;
1056-
}
1057-
if (keyType.equalsIgnoreCase("PKCS#8")) {
1058-
return true;
1059-
} else {
1060-
return false;
1061-
}
1062-
} else if (key instanceof PublicKey) {
1063-
String keyType = ((PublicKey) key).getFormat();
1064-
if (keyType == null) {
1065-
// this happens when encoding is not supported
1066-
return true;
1067-
}
1068-
if (keyType.equalsIgnoreCase("X.509")) {
1069-
return true;
1070-
} else {
1071-
return false;
1072-
}
1073-
}
1074-
1075-
return false;
1076-
}
1077-
1078-
@Override
1079-
public String toString() {
1080-
1081-
return (super.toString() + "\n" + "provider = " + this.getProvider().getName() + "\n"
1082-
+ "algorithm = " + this.getAlgorithm());
1083-
1084-
}
1085-
1086-
}
1087-
1088971
// Return the instance of this class or create one if needed.
1089972
//
1090973
static OpenJCEPlus getInstance() {

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

Lines changed: 0 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,13 @@
1010

1111
import com.ibm.crypto.plus.provider.ock.OCKContext;
1212
import com.ibm.crypto.plus.provider.ock.OCKException;
13-
import java.lang.reflect.Constructor;
1413
import java.security.AccessController;
15-
import java.security.InvalidParameterException;
16-
import java.security.Key;
1714
import java.security.NoSuchAlgorithmException;
18-
import java.security.PrivateKey;
1915
import java.security.Provider;
2016
import java.security.ProviderException;
21-
import java.security.PublicKey;
22-
import java.util.Arrays;
2317
import java.util.HashMap;
2418
import java.util.List;
2519
import java.util.Map;
26-
import javax.crypto.SecretKey;
2720

2821
@SuppressWarnings({"removal", "deprecation"})
2922
public final class OpenJCEPlusFIPS extends OpenJCEPlusProvider {
@@ -698,115 +691,6 @@ private void registerAlgorithms(Provider jce) {
698691

699692
}
700693

701-
private static class OpenJCEPlusService extends Service {
702-
703-
OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
704-
String[] aliases) {
705-
this(provider, type, algorithm, className, aliases, null);
706-
}
707-
708-
OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
709-
String[] aliases, Map<String, String> attributes) {
710-
super(provider, type, algorithm, className, toList(aliases), attributes);
711-
712-
if (debug != null) {
713-
debug.println("Constructing OpenJCEPlusService: " + provider + ", " + type
714-
+ ", " + algorithm + ", " + className);
715-
}
716-
}
717-
718-
private static List<String> toList(String[] aliases) {
719-
return (aliases == null) ? null : Arrays.asList(aliases);
720-
}
721-
722-
@Override
723-
public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
724-
Provider provider = getProvider();
725-
String className = getClassName();
726-
try {
727-
Class<?> cls = Class.forName(className);
728-
729-
// Call the constructor that takes an OpenJCEPlusProvider if
730-
// available
731-
//
732-
try {
733-
Class<?>[] parameters = new Class<?>[1];
734-
parameters[0] = Class
735-
.forName("com.ibm.crypto.plus.provider.OpenJCEPlusProvider");
736-
Constructor<?> constr = cls.getConstructor(parameters);
737-
738-
return constr.newInstance(new Object[] {provider});
739-
} catch (java.lang.NoSuchMethodException e) {
740-
}
741-
} catch (Exception clex) {
742-
throw new NoSuchAlgorithmException(clex);
743-
}
744-
745-
return super.newInstance(constructorParameter);
746-
}
747-
748-
@Override
749-
public boolean supportsParameter(Object parameter) {
750-
751-
if (parameter == null) {
752-
return false;
753-
}
754-
if (parameter instanceof Key == false) {
755-
throw new InvalidParameterException("Parameter must be a Key");
756-
}
757-
Key key = (Key) parameter;
758-
759-
if (key instanceof SecretKey) {
760-
761-
String keyType = ((SecretKey) key).getFormat();
762-
if (keyType == null) {
763-
// this happens when encoding is not supported
764-
return true;
765-
}
766-
if (keyType.equalsIgnoreCase("RAW") || keyType.equalsIgnoreCase("PKCS5_DERIVED_KEY")
767-
|| keyType.equalsIgnoreCase("PKCS5_KEY")) {
768-
return true;
769-
} else {
770-
return false;
771-
}
772-
773-
} else if (key instanceof PrivateKey) {
774-
String keyType = ((PrivateKey) key).getFormat();
775-
if (keyType == null) {
776-
// this happens when encoding is not supported
777-
return true;
778-
}
779-
if (keyType.equalsIgnoreCase("PKCS#8")) {
780-
return true;
781-
} else {
782-
return false;
783-
}
784-
} else if (key instanceof PublicKey) {
785-
String keyType = ((PublicKey) key).getFormat();
786-
if (keyType == null) {
787-
// this happens when encoding is not supported
788-
return true;
789-
}
790-
if (keyType.equalsIgnoreCase("X.509")) {
791-
return true;
792-
} else {
793-
return false;
794-
}
795-
}
796-
797-
return false;
798-
799-
}
800-
801-
@Override
802-
public String toString() {
803-
804-
return (super.toString() + "\n" + "provider = " + this.getProvider().getName() + "\n"
805-
+ "algorithm = " + this.getAlgorithm());
806-
807-
}
808-
}
809-
810694
// Return the instance of this class or create one if needed.
811695
//
812696
static OpenJCEPlusFIPS getInstance() {

0 commit comments

Comments
 (0)