wolfcrypt-jni/src/main/java/com/wolfssl/wolfcrypt/FeatureDetect.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() { }
}