You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2016/07/07 16:31:44 UTC
commons-crypto git commit: If JNA cannot find the correct library,
ensure the details are caught
Repository: commons-crypto
Updated Branches:
refs/heads/master 088b2b7e8 -> 5f1cc557f
If JNA cannot find the correct library, ensure the details are caught
Don't try to create classes if the JNA libray is not enabled
Project: http://git-wip-us.apache.org/repos/asf/commons-crypto/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-crypto/commit/5f1cc557
Tree: http://git-wip-us.apache.org/repos/asf/commons-crypto/tree/5f1cc557
Diff: http://git-wip-us.apache.org/repos/asf/commons-crypto/diff/5f1cc557
Branch: refs/heads/master
Commit: 5f1cc557f5d24008dccb12abf38335aa4d6b6e38
Parents: 088b2b7
Author: Sebb <se...@apache.org>
Authored: Thu Jul 7 17:31:39 2016 +0100
Committer: Sebb <se...@apache.org>
Committed: Thu Jul 7 17:31:39 2016 +0100
----------------------------------------------------------------------
.../apache/commons/crypto/jna/OpenSslJna.java | 9 +++++++++
.../commons/crypto/jna/OpenSslJnaCipher.java | 3 +++
.../crypto/jna/OpenSslJnaCryptoRandom.java | 9 ++++++---
.../commons/crypto/jna/OpenSslNativeJna.java | 20 ++++++++++++++++++--
4 files changed, 36 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5f1cc557/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java
index cfdff2e..b5c90a1 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java
@@ -32,4 +32,13 @@ public final class OpenSslJna {
public static Class<? extends CryptoRandom> getRandomClass() {
return OpenSslJnaCryptoRandom.class;
}
+
+ public static boolean isEnabled() {
+ return OpenSslNativeJna.INIT_OK;
+ }
+
+ public static Throwable initialisationError() {
+ return OpenSslNativeJna.INIT_ERROR;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5f1cc557/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java
index 6824230..285fbe7 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java
@@ -61,6 +61,9 @@ class OpenSslJnaCipher implements CryptoCipher {
*/
public OpenSslJnaCipher(Properties props, String transformation)
throws GeneralSecurityException {
+ if (!OpenSslJna.isEnabled()) {
+ throw new GeneralSecurityException("Could not enable JNA access", OpenSslJna.initialisationError());
+ }
this.transformation = transformation;
Transform transform = tokenizeTransformation(transformation);
algMode = AlgorithmMode.get(transform.algorithm, transform.mode);
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5f1cc557/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
index d2e4406..aa245e6 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
@@ -18,6 +18,7 @@
package org.apache.commons.crypto.jna;
import java.nio.ByteBuffer;
+import java.security.GeneralSecurityException;
import java.security.NoSuchAlgorithmException;
import java.util.Properties;
import java.util.Random;
@@ -54,11 +55,13 @@ class OpenSslJnaCryptoRandom extends Random implements CryptoRandom {
* Constructs a {@link OpenSslJnaCryptoRandom}.
*
* @param props the configuration properties (not used)
- * @throws NoSuchAlgorithmException if no Provider supports a
- * SecureRandomSpi implementation for the specified algorithm.
+ * @throws GeneralSecurityException if could not enable JNA access
*/
public OpenSslJnaCryptoRandom(Properties props)
- throws NoSuchAlgorithmException {
+ throws GeneralSecurityException {
+ if (!OpenSslJna.isEnabled()) {
+ throw new GeneralSecurityException("Could not enable JNA access", OpenSslJna.initialisationError());
+ }
boolean rdrandLoaded = false;
try {
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5f1cc557/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java
index 6adddb2..f75566e 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java
@@ -31,9 +31,25 @@ class OpenSslNativeJna {
static final int OOSL_JNA_ENCRYPT_MODE = 1;
static final int OOSL_JNA_DECRYPT_MODE = 0;
+ static final boolean INIT_OK;
+
+ static final Throwable INIT_ERROR;
+
static {
- Native.register("crypto");
- ERR_load_crypto_strings();
+ boolean ok = false;
+ Throwable thrown = null;
+ try {
+ Native.register("crypto");
+ ERR_load_crypto_strings();
+ ok = true;
+ } catch (Exception e) {
+ thrown = e;
+ } catch (UnsatisfiedLinkError e) {
+ thrown = e;
+ } finally {
+ INIT_OK = ok;
+ INIT_ERROR = thrown;
+ }
}
//misc