You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/12/13 02:46:23 UTC
[commons-crypto] branch master updated: Bullet-proofing
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-crypto.git
The following commit(s) were added to refs/heads/master by this push:
new 79106e1 Bullet-proofing
79106e1 is described below
commit 79106e181ee875897f1922cfba2778defc34bae7
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Dec 12 21:46:19 2022 -0500
Bullet-proofing
---
.../commons/crypto/jna/OpenSslJnaCryptoRandom.java | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
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 a8b4be9..babb712 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
@@ -84,7 +84,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
rdrandEnabled = rdrandLoaded;
if (!rdrandLoaded) {
- closeRdrandEngine();
+ closeRdrandEngine(false);
}
}
@@ -107,7 +107,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
final int byteLength = bytes.length;
final ByteBuffer buf = ByteBuffer.allocateDirect(byteLength);
- throwOnError(OpenSslNativeJna.RAND_bytes(buf, byteLength));
+ throwOnError(OpenSslNativeJna.RAND_bytes(buf, byteLength), false);
buf.rewind();
buf.get(bytes, 0, byteLength);
}
@@ -119,7 +119,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
*/
@Override
public void close() {
- closeRdrandEngine();
+ closeRdrandEngine(true);
OpenSslNativeJna.ENGINE_cleanup();
//cleanup locks
@@ -129,12 +129,13 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
/**
* Closes the rdrand engine.
+ * @param closing true when called while closing.
*/
- private void closeRdrandEngine() {
+ private void closeRdrandEngine(final boolean closing) {
if (rdrandEngine != null) {
- throwOnError(OpenSslNativeJna.ENGINE_finish(rdrandEngine));
- throwOnError(OpenSslNativeJna.ENGINE_free(rdrandEngine));
+ throwOnError(OpenSslNativeJna.ENGINE_finish(rdrandEngine), closing);
+ throwOnError(OpenSslNativeJna.ENGINE_free(rdrandEngine), closing);
}
}
@@ -149,12 +150,15 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
/**
* @param retVal the result value of error.
+ * @param closing true when called while closing.
*/
- private void throwOnError(final int retVal) {
+ private void throwOnError(final int retVal, final boolean closing) {
if (retVal != 1) {
final NativeLong err = OpenSslNativeJna.ERR_peek_error();
final String errdesc = OpenSslNativeJna.ERR_error_string(err, null);
- close();
+ if (!closing) {
+ close();
+ }
throw new IllegalStateException("return code " + retVal + " from OpenSSL. Err code is " + err + ": " + errdesc);
}
}