Support JDK 7 by loading bouncycastle
parent
5e80998d53
commit
8c2a7ed45f
|
@ -21,8 +21,8 @@ import com.google.protobuf.Message;
|
||||||
|
|
||||||
import meerkat.crypto.DigitalSignature;
|
import meerkat.crypto.DigitalSignature;
|
||||||
import meerkat.protobuf.Crypto.Signature;
|
import meerkat.protobuf.Crypto.Signature;
|
||||||
import org.bouncycastle.util.io.pem.*;
|
|
||||||
import org.bouncycastle.openssl.*;
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,7 +30,7 @@ import org.bouncycastle.openssl.*;
|
||||||
* <p>
|
* <p>
|
||||||
* This class is not thread-safe (each thread should have its own instance).
|
* This class is not thread-safe (each thread should have its own instance).
|
||||||
*/
|
*/
|
||||||
public class ECDSASignature implements DigitalSignature {
|
public class ECDSASignature extends GlobalCryptoSetup implements DigitalSignature {
|
||||||
final Logger logger = LoggerFactory.getLogger(getClass());
|
final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
final public static String KEYSTORE_TYPE = "PKCS12";
|
final public static String KEYSTORE_TYPE = "PKCS12";
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
package meerkat.crypto.concrete;
|
||||||
|
|
||||||
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.security.Security;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that performs required crypto setup
|
||||||
|
*/
|
||||||
|
public class GlobalCryptoSetup {
|
||||||
|
final static Logger logger = LoggerFactory.getLogger(GlobalCryptoSetup.class);
|
||||||
|
|
||||||
|
static boolean loadedBouncyCastle = false;
|
||||||
|
|
||||||
|
public static boolean hasSecp256k1Curve() {
|
||||||
|
// For now we just check if the java version is at least 8
|
||||||
|
String[] version = System.getProperty("java.version").split("\\.");
|
||||||
|
int major = Integer.parseInt(version[0]);
|
||||||
|
int minor = Integer.parseInt(version[1]);
|
||||||
|
return ((major > 1) || ((major > 0) && (minor > 7)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void doSetup() {
|
||||||
|
// Make bouncycastle our default provider if we're running on a JVM version < 8
|
||||||
|
// (earlier version don't support the EC curve we use for signatures)
|
||||||
|
if (!hasSecp256k1Curve() && !loadedBouncyCastle) {
|
||||||
|
loadedBouncyCastle = true;
|
||||||
|
Security.insertProviderAt(new BouncyCastleProvider(), 1);
|
||||||
|
logger.info("Using BouncyCastle instead of native provider to support secp256k1 named curve");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GlobalCryptoSetup() {
|
||||||
|
doSetup();
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ import java.security.NoSuchAlgorithmException;
|
||||||
/**
|
/**
|
||||||
* Created by talm on 11/9/15.
|
* Created by talm on 11/9/15.
|
||||||
*/
|
*/
|
||||||
public class SHA256Digest implements Digest {
|
public class SHA256Digest extends GlobalCryptoSetup implements Digest {
|
||||||
final Logger logger = LoggerFactory.getLogger(getClass());
|
final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
public static final String SHA256 = "SHA-256";
|
public static final String SHA256 = "SHA-256";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue