338 lines
10 KiB
Java
338 lines
10 KiB
Java
/* FeatureDetect.java
|
|
*
|
|
* Copyright (C) 2006-2025 wolfSSL Inc.
|
|
*
|
|
* This file is part of wolfSSL.
|
|
*
|
|
* wolfSSL is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* wolfSSL is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
|
*/
|
|
|
|
package com.wolfssl.wolfcrypt;
|
|
|
|
/**
|
|
* Native feature detection class
|
|
* Used to expose native preprocessor values to Java
|
|
*/
|
|
public class FeatureDetect {
|
|
|
|
/**
|
|
* Tests if MD5 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Md5Enabled();
|
|
|
|
/**
|
|
* Tests if SHA-1 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean ShaEnabled();
|
|
|
|
/**
|
|
* Tests if SHA-224 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Sha224Enabled();
|
|
|
|
/**
|
|
* Tests if SHA-256 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Sha256Enabled();
|
|
|
|
/**
|
|
* Tests if SHA-384 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Sha384Enabled();
|
|
|
|
/**
|
|
* Tests if SHA-512 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Sha512Enabled();
|
|
|
|
/**
|
|
* Tests if AES is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean AesEnabled();
|
|
|
|
/**
|
|
* Tests if AES-128 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Aes128Enabled();
|
|
|
|
/**
|
|
* Tests if AES-192 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Aes192Enabled();
|
|
|
|
/**
|
|
* Tests if AES-256 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Aes256Enabled();
|
|
|
|
/**
|
|
* Tests if AES-CBC is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean AesCbcEnabled();
|
|
|
|
|
|
/**
|
|
* Tests if AES-GCM is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean AesGcmEnabled();
|
|
|
|
/**
|
|
* Tests if AES-GCM stream mode (WOLFSSL_AESGCM_STREAM) is compiled into
|
|
* native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean AesGcmStreamEnabled();
|
|
|
|
/**
|
|
* Tests if 3DES is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Des3Enabled();
|
|
|
|
/**
|
|
* Tests if ChaCha is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean ChaChaEnabled();
|
|
|
|
/**
|
|
* Tests if HMAC is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacEnabled();
|
|
|
|
/**
|
|
* Tests if HMAC-MD5 is compiled into the native wolfSSL library and
|
|
* available for use.
|
|
*
|
|
* For FIPS 140-3, even if MD5 is compiled into the
|
|
* library, HMAC-MD5 is not available and will throw BAD_FUNC_ARG.
|
|
* Use this helper to prevent people from calling it in the first place.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacMd5Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA1 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacShaEnabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA224 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha224Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA256 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha256Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA384 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha384Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA512 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha512Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA3-224 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha3_224Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA3-256 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha3_256Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA3-384 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha3_384Enabled();
|
|
|
|
/**
|
|
* Tests if HMAC-SHA3-512 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false.
|
|
*/
|
|
public static native boolean HmacSha3_512Enabled();
|
|
|
|
/**
|
|
* Tests if PKCS#5 PBKDF1 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if PBKDF1 is enabled (HAVE_PBKDF1, !NO_PWDBASED),
|
|
* otherwise false.
|
|
*/
|
|
public static native boolean Pbkdf1Enabled();
|
|
|
|
/**
|
|
* Tests if PKCS#5 v2.1 PBKDF2 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if PBKDF2 is enabled (HAVE_PBKDF2, !NO_PWDBASED, !NO_HMAC),
|
|
* otherwise false.
|
|
*/
|
|
public static native boolean Pbkdf2Enabled();
|
|
|
|
/**
|
|
* Tests if PKCS#12 PBKDF is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if PKCS#12 PBKDF is enabled (HAVE_PKCS12, !NO_PWDBASED),
|
|
* otherwise false.
|
|
*/
|
|
public static native boolean Pkcs12PbkdfEnabled();
|
|
|
|
/**
|
|
* Tests if RSA is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean RsaEnabled();
|
|
|
|
/**
|
|
* Tests if RSA key generation is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean RsaKeyGenEnabled();
|
|
|
|
/**
|
|
* Tests if DH is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean DhEnabled();
|
|
|
|
/**
|
|
* Tests if ECC is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean EccEnabled();
|
|
|
|
/**
|
|
* Tests if ECC key generation is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean EccKeyGenEnabled();
|
|
|
|
/**
|
|
* Tests if ECDHE / wc_ecc_shared_secret() is compiled into the native
|
|
* wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean EccDheEnabled();
|
|
|
|
/**
|
|
* Tests if Curve25519 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Curve25519Enabled();
|
|
|
|
/**
|
|
* Tests if Ed25519 is compiled into the native wolfSSL library.
|
|
*
|
|
* @return true if enabled, otherwise false if not compiled in.
|
|
*/
|
|
public static native boolean Ed25519Enabled();
|
|
|
|
/**
|
|
* Loads JNI library.
|
|
*
|
|
* The native library is expected to be called "wolfcryptjni", and must be
|
|
* on the system library search path.
|
|
*
|
|
* "wolfcryptjni" links against the wolfSSL native C library ("wolfssl"),
|
|
* and for Windows compatibility "wolfssl" needs to be explicitly loaded
|
|
* first here.
|
|
*/
|
|
static {
|
|
int fipsLoaded = 0;
|
|
|
|
String osName = System.getProperty("os.name");
|
|
if (osName != null && osName.toLowerCase().contains("win")) {
|
|
try {
|
|
/* Default wolfCrypt FIPS library on Windows is compiled
|
|
* as "wolfssl-fips" by Visual Studio solution */
|
|
System.loadLibrary("wolfssl-fips");
|
|
fipsLoaded = 1;
|
|
} catch (UnsatisfiedLinkError e) {
|
|
/* wolfCrypt FIPS not available */
|
|
}
|
|
|
|
if (fipsLoaded == 0) {
|
|
/* FIPS library not loaded, try normal libwolfssl */
|
|
System.loadLibrary("wolfssl");
|
|
}
|
|
}
|
|
|
|
/* Load wolfcryptjni library */
|
|
System.loadLibrary("wolfcryptjni");
|
|
}
|
|
|
|
/** Default FeatureDetect constructor */
|
|
public FeatureDetect() { }
|
|
}
|
|
|