This is an automated email from the ASF dual-hosted git repository. sebb 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 05dd7ec6 Implement OpenSSL_version_num for JNA 05dd7ec6 is described below commit 05dd7ec670aad409b80feff1d5bf01dca571c0af Author: Sebb <s...@apache.org> AuthorDate: Sat Dec 2 12:52:00 2023 +0000 Implement OpenSSL_version_num for JNA --- src/changes/changes.xml | 1 + .../apache/commons/crypto/jna/LibreSsl20XNativeJna.java | 6 +++++- .../org/apache/commons/crypto/jna/OpenSsl11XNativeJna.java | 10 ++++++++++ .../org/apache/commons/crypto/jna/OpenSsl30XNativeJna.java | 10 ++++++++++ .../commons/crypto/jna/OpenSslInterfaceNativeJna.java | 2 ++ .../java/org/apache/commons/crypto/jna/OpenSslJna.java | 14 ++------------ .../org/apache/commons/crypto/jna/OpenSslNativeJna.java | 4 ++++ 7 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f47b0133..4c7a09c8 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -100,6 +100,7 @@ <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump commons-parent from 56 to 64 #225.</action> <action type="update" dev="ggregory" due-to="Gary Gregory">Bump com.sun.xml.bind:jaxb-impl from 2.3.7 to 2.3.8.</action> <!-- ADD --> + <action type="add" dev="sebb">Implement OpenSSL_version_num for JNA</action> <action issue="CRYPTO-177" type="add" dev="sebb">Cipher and Random Factory classes don't include JNA</action> <action issue="CRYPTO-172" type="add" dev="sebb" due-to="Ludovic Henry">Add support for Linux-riscv64 #264</action> <action issue="CRYPTO-174" type="add" dev="sebb">Allow override of SSL library name for Windows</action> diff --git a/src/main/java/org/apache/commons/crypto/jna/LibreSsl20XNativeJna.java b/src/main/java/org/apache/commons/crypto/jna/LibreSsl20XNativeJna.java index 5deb4c86..d0a3ef16 100644 --- a/src/main/java/org/apache/commons/crypto/jna/LibreSsl20XNativeJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/LibreSsl20XNativeJna.java @@ -286,7 +286,6 @@ final class LibreSsl20XNativeJna implements OpenSslInterfaceNativeJna { public static native PointerByReference RAND_SSLeay(); /** - * TODO (does not appear to be used yet) * @return OPENSSL_VERSION_NUMBER which is a numeric release version identifier */ public static native NativeLong SSLeay(); @@ -429,6 +428,11 @@ final class LibreSsl20XNativeJna implements OpenSslInterfaceNativeJna { return SSLeay_version(i); } + @Override + public long _OpenSSL_version_num() { + return SSLeay().longValue(); + } + @Override public int _RAND_bytes(final ByteBuffer buf, final int length) { return RAND_bytes(buf, length) ; diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSsl11XNativeJna.java b/src/main/java/org/apache/commons/crypto/jna/OpenSsl11XNativeJna.java index e70971f5..6a6ef980 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSsl11XNativeJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSsl11XNativeJna.java @@ -239,6 +239,11 @@ final class OpenSsl11XNativeJna implements OpenSslInterfaceNativeJna { */ public static native String OpenSSL_version(int type); + /** + * @return OPENSSL_VERSION_NUMBER which is a numeric release version identifier + */ + public static native NativeLong OpenSSL_version_num(); + /** * Generates random data * @@ -385,6 +390,11 @@ final class OpenSsl11XNativeJna implements OpenSslInterfaceNativeJna { return OpenSSL_version(i); } + @Override + public long _OpenSSL_version_num() { + return OpenSSL_version_num().longValue(); + } + @Override public int _RAND_bytes(final ByteBuffer buf, final int length) { return RAND_bytes(buf, length) ; diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSsl30XNativeJna.java b/src/main/java/org/apache/commons/crypto/jna/OpenSsl30XNativeJna.java index 5db9d4f4..85aa17b3 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSsl30XNativeJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSsl30XNativeJna.java @@ -241,6 +241,11 @@ final class OpenSsl30XNativeJna implements OpenSslInterfaceNativeJna { */ public static native String OpenSSL_version(int type); + /** + * @return OPENSSL_VERSION_NUMBER which is a numeric release version identifier + */ + public static native NativeLong OpenSSL_version_num(); + /** * Generates random data * @@ -387,6 +392,11 @@ final class OpenSsl30XNativeJna implements OpenSslInterfaceNativeJna { return OpenSSL_version(i); } + @Override + public long _OpenSSL_version_num() { + return OpenSSL_version_num().longValue(); + } + @Override public int _RAND_bytes(final ByteBuffer buf, final int length) { return RAND_bytes(buf, length) ; diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslInterfaceNativeJna.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslInterfaceNativeJna.java index a9c895fc..caf190b8 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSslInterfaceNativeJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslInterfaceNativeJna.java @@ -89,6 +89,8 @@ interface OpenSslInterfaceNativeJna { String _OpenSSL_version(final int i); + long _OpenSSL_version_num(); + int _RAND_bytes(final ByteBuffer buf, final int length); PointerByReference _RAND_get_rand_method(); 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 bccfe827..ed8b5f2b 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJna.java @@ -106,25 +106,15 @@ public final class OpenSslJna { System.err.flush(); // helpful for stack traces to not mix in other output. throw initialisationError; // propagate to make error obvious } + info("OpenSSL library loaded OK, version: 0x%s", Long.toHexString(OpenSslNativeJna.OpenSSL_version_num())); for (int i = 0; i <= Utils.OPENSSL_VERSION_MAX_INDEX; i++) { - String data = OpenSSLVersion(i); + String data = OpenSslNativeJna.OpenSSLVersion(i); if (!"not available".equals(data)) { info("OpenSSLVersion(%d): %s", i, data); } } } - /** - * Retrieves version/build information about OpenSSL library. - * - * @param type type can be OPENSSL_VERSION, OPENSSL_CFLAGS, OPENSSL_BUILT_ON... - * @return A pointer to a constant string describing the version of the - * OpenSSL library or giving information about the library build. - */ - static String OpenSSLVersion(final int type) { - return OpenSslNativeJna.OpenSSLVersion(type); - } - /** * Constructs a new instance. * 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 fb8fdacf..3d78aebd 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java @@ -200,6 +200,10 @@ final class OpenSslNativeJna { return JnaImplementation._OpenSSL_version(i); } + public static long OpenSSL_version_num() { + return JnaImplementation._OpenSSL_version_num(); + } + public static int RAND_bytes(final ByteBuffer buf, final int length) { return JnaImplementation._RAND_bytes(buf, length); }