Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions src/main/java/com/ibm/crypto/plus/provider/DHParameters.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
public final class DHParameters extends AlgorithmParametersSpi implements java.io.Serializable {
private static final long serialVersionUID = 7137508373627164657L;

private OpenJCEPlusProvider provider;

// The prime (p)
private BigInteger p;

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

public DHParameters(OpenJCEPlusProvider provider) {
this.provider = provider;
}
public DHParameters() {}

@Override
protected void engineInit(AlgorithmParameterSpec paramSpec)
Expand Down Expand Up @@ -143,7 +139,7 @@ int getL() {

@Override
protected String engineToString() {
StringBuffer strbuf = new StringBuffer(provider.getName() + " Diffie-Hellman Parameters:\n"
StringBuffer strbuf = new StringBuffer("OpenJCEPlusProvider Diffie-Hellman Parameters:\n"
+ "p:\n" + this.p.toString() + "\n" + "g:\n" + this.g.toString());
if (this.l != 0)
strbuf.append("\nl:\n" + " " + this.l);
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/ibm/crypto/plus/provider/DHPrivateKey.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ private void initDHPrivateKey(OpenJCEPlusProvider provider, BigInteger x, DHPara
this.x = x;

if (dhp == null) {
this.dhParams = new DHParameters(provider);
this.dhParams = new DHParameters();
try {
this.dhParams.engineInit(new DHParameterSpec(p, g, l));
} catch (InvalidParameterSpecException e) {
Expand Down Expand Up @@ -194,7 +194,7 @@ private byte[] convertOCKPrivateKeyBytes(byte[] encodedKey) throws IOException {
this.key = val.getData().getOctetString();
parseKeyBits();

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

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/ibm/crypto/plus/provider/DHPublicKey.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ final class DHPublicKey extends X509Key
int l) throws InvalidKeyException {
this.provider = provider;
this.y = y;
dhParams = new DHParameters(provider);
dhParams = new DHParameters();
try {
dhParams.engineInit(new DHParameterSpec(p, g, l));
byte[] keyArray = new DerValue(DerValue.tag_Integer, this.y.toByteArray()).toByteArray();
Expand Down Expand Up @@ -198,7 +198,7 @@ private byte[] convertOCKPublicKeyBytes(byte[] encodedKey) throws IOException {
throw new InvalidKeyException("Excess key data");
}

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

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/ibm/crypto/plus/provider/HKDFKeyDerivation.java
Original file line number Diff line number Diff line change
Expand Up @@ -290,20 +290,35 @@ private byte[] getKeyBytes(Key key) throws InvalidKeyException {
}

public static final class HKDFSHA256 extends HKDFKeyDerivation {
public HKDFSHA256(OpenJCEPlusProvider provider, KDFParameters kdfParameters)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA256, kdfParameters);
}

public HKDFSHA256(OpenJCEPlusProvider provider)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA256, null);
}
}

public static final class HKDFSHA384 extends HKDFKeyDerivation {
public HKDFSHA384(OpenJCEPlusProvider provider, KDFParameters kdfParameters)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA384, kdfParameters);
}

public HKDFSHA384(OpenJCEPlusProvider provider)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA384, null);
}
}

public static final class HKDFSHA512 extends HKDFKeyDerivation {
public HKDFSHA512(OpenJCEPlusProvider provider, KDFParameters kdfParameters)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA512, kdfParameters);
}

public HKDFSHA512(OpenJCEPlusProvider provider)
throws InvalidAlgorithmParameterException {
super(provider, SupportedHmac.SHA512, null);
Expand Down
117 changes: 0 additions & 117 deletions src/main/java/com/ibm/crypto/plus/provider/OpenJCEPlus.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,11 @@

import com.ibm.crypto.plus.provider.ock.OCKContext;
import com.ibm.crypto.plus.provider.ock.OCKException;
import java.lang.reflect.Constructor;
import java.security.InvalidParameterException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.ProviderException;
import java.security.PublicKey;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.crypto.SecretKey;

public final class OpenJCEPlus extends OpenJCEPlusProvider {

Expand Down Expand Up @@ -1180,115 +1172,6 @@ private void registerAlgorithms(Provider jce) {
"com.ibm.crypto.plus.provider.PQCSignatureImpl$MLDSA87", aliases));
}

private static class OpenJCEPlusService extends Service {

OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
String[] aliases) {
this(provider, type, algorithm, className, aliases, null);
}

OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
String[] aliases, Map<String, String> attributes) {
super(provider, type, algorithm, className, toList(aliases), attributes);

if (debug != null) {
debug.println("Constructing OpenJCEPlusService: " + provider + ", " + type
+ ", " + algorithm + ", " + className);
}
}

private static List<String> toList(String[] aliases) {
return (aliases == null) ? null : Arrays.asList(aliases);
}

@Override
public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
Provider provider = getProvider();
String className = getClassName();
try {
Class<?> cls = Class.forName(className);

// Call the constructor that takes an OpenJCEPlusProvider if
// available
//
try {
Class<?>[] parameters = new Class<?>[1];
parameters[0] = Class
.forName("com.ibm.crypto.plus.provider.OpenJCEPlusProvider");
Constructor<?> constr = cls.getConstructor(parameters);

return constr.newInstance(new Object[] {provider});
} catch (java.lang.NoSuchMethodException e) {
}
} catch (Exception clex) {
throw new NoSuchAlgorithmException(clex);
}

return super.newInstance(constructorParameter);
}

@Override
public boolean supportsParameter(Object parameter) {

if (parameter == null) {
return false;
}
if (parameter instanceof Key == false) {
throw new InvalidParameterException("Parameter must be a Key");
}
Key key = (Key) parameter;

if (key instanceof SecretKey) {

String keyType = ((SecretKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("RAW") || keyType.equalsIgnoreCase("PKCS5_DERIVED_KEY")
|| keyType.equalsIgnoreCase("PKCS5_KEY")) {
return true;
} else {
return false;
}

} else if (key instanceof PrivateKey) {
String keyType = ((PrivateKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("PKCS#8")) {
return true;
} else {
return false;
}
} else if (key instanceof PublicKey) {
String keyType = ((PublicKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("X.509")) {
return true;
} else {
return false;
}
}

return false;
}

@Override
public String toString() {

return (super.toString() + "\n" + "provider = " + this.getProvider().getName() + "\n"
+ "algorithm = " + this.getAlgorithm());

}

}

// Return the instance of this class or create one if needed.
//
static OpenJCEPlus getInstance() {
Expand Down
116 changes: 0 additions & 116 deletions src/main/java/com/ibm/crypto/plus/provider/OpenJCEPlusFIPS.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,12 @@

import com.ibm.crypto.plus.provider.ock.OCKContext;
import com.ibm.crypto.plus.provider.ock.OCKException;
import java.lang.reflect.Constructor;
import java.security.InvalidParameterException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.ProviderException;
import java.security.PublicKey;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.crypto.SecretKey;

public final class OpenJCEPlusFIPS extends OpenJCEPlusProvider {

Expand Down Expand Up @@ -697,115 +690,6 @@ private void registerAlgorithms(Provider jce) {

}

private static class OpenJCEPlusService extends Service {

OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
String[] aliases) {
this(provider, type, algorithm, className, aliases, null);
}

OpenJCEPlusService(Provider provider, String type, String algorithm, String className,
String[] aliases, Map<String, String> attributes) {
super(provider, type, algorithm, className, toList(aliases), attributes);

if (debug != null) {
debug.println("Constructing OpenJCEPlusService: " + provider + ", " + type
+ ", " + algorithm + ", " + className);
}
}

private static List<String> toList(String[] aliases) {
return (aliases == null) ? null : Arrays.asList(aliases);
}

@Override
public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
Provider provider = getProvider();
String className = getClassName();
try {
Class<?> cls = Class.forName(className);

// Call the constructor that takes an OpenJCEPlusProvider if
// available
//
try {
Class<?>[] parameters = new Class<?>[1];
parameters[0] = Class
.forName("com.ibm.crypto.plus.provider.OpenJCEPlusProvider");
Constructor<?> constr = cls.getConstructor(parameters);

return constr.newInstance(new Object[] {provider});
} catch (java.lang.NoSuchMethodException e) {
}
} catch (Exception clex) {
throw new NoSuchAlgorithmException(clex);
}

return super.newInstance(constructorParameter);
}

@Override
public boolean supportsParameter(Object parameter) {

if (parameter == null) {
return false;
}
if (parameter instanceof Key == false) {
throw new InvalidParameterException("Parameter must be a Key");
}
Key key = (Key) parameter;

if (key instanceof SecretKey) {

String keyType = ((SecretKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("RAW") || keyType.equalsIgnoreCase("PKCS5_DERIVED_KEY")
|| keyType.equalsIgnoreCase("PKCS5_KEY")) {
return true;
} else {
return false;
}

} else if (key instanceof PrivateKey) {
String keyType = ((PrivateKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("PKCS#8")) {
return true;
} else {
return false;
}
} else if (key instanceof PublicKey) {
String keyType = ((PublicKey) key).getFormat();
if (keyType == null) {
// this happens when encoding is not supported
return true;
}
if (keyType.equalsIgnoreCase("X.509")) {
return true;
} else {
return false;
}
}

return false;

}

@Override
public String toString() {

return (super.toString() + "\n" + "provider = " + this.getProvider().getName() + "\n"
+ "algorithm = " + this.getAlgorithm());

}
}

// Return the instance of this class or create one if needed.
//
static OpenJCEPlusFIPS getInstance() {
Expand Down
Loading