diff --git a/examples/Client.java b/examples/Client.java index bb0327a..ae37d27 100644 --- a/examples/Client.java +++ b/examples/Client.java @@ -82,107 +82,132 @@ public class Client { String host = "localhost"; int port = 11111; - /* pull in command line options from user */ - for (int i = 0; i < args.length; i++) - { - String arg = args[i]; - - if (arg.equals("-?")) { - printUsage(); - - } else if (arg.equals("-h")) { - if (args.length < i+2) - printUsage(); - host = args[++i]; - - } else if (arg.equals("-p")) { - if (args.length < i+2) - printUsage(); - port = Integer.parseInt(args[++i]); - - } else if (arg.equals("-v")) { - if (args.length < i+2) - printUsage(); - sslVersion = Integer.parseInt(args[++i]); - if (sslVersion < 0 || sslVersion > 3) { - printUsage(); - } - - } else if (arg.equals("-l")) { - if (args.length < i+2) - printUsage(); - cipherList = args[++i]; - - } else if (arg.equals("-c")) { - if (args.length < i+2) - printUsage(); - clientCert = args[++i]; - - } else if (arg.equals("-k")) { - if (args.length < i+2) - printUsage(); - clientKey = args[++i]; - - } else if (arg.equals("-b")) { - if (args.length < i+2) - printUsage(); - benchmark = Integer.parseInt(args[++i]); - if (benchmark < 0 || benchmark > 1000000) - printUsage(); - - } else if (arg.equals("-A")) { - if (args.length < i+2) - printUsage(); - caCert = args[++i]; - - } else if (arg.equals("-d")) { - verifyPeer = 0; - - } else if (arg.equals("-u")) { - doDTLS = 1; - - } else if (arg.equals("-s")) { - usePsk = 1; - - } else if (arg.equals("-iocb")) { - useIOCallbacks = true; - - } else if (arg.equals("-logtest")) { - logCallback = 1; - - } else if (arg.equals("-o")) { - useOcsp = 1; - - } else if (arg.equals("-O")) { - if (args.length < i+2) - printUsage(); - useOcsp = 1; - ocspUrl = args[++i]; - - } else if (arg.equals("-U")) { - useAtomic = 1; - - } else if (arg.equals("-P")) { - pkCallbacks = 1; - - } else { - printUsage(); - } - } - - /* sort out DTLS versus TLS versions */ - if (doDTLS == 1) { - if (sslVersion == 3) - sslVersion = -2; - else - sslVersion = -1; - } - try { /* load JNI library */ WolfSSL.loadLibrary(); + /* pull in command line options from user */ + for (int i = 0; i < args.length; i++) + { + String arg = args[i]; + + if (arg.equals("-?")) { + printUsage(); + + } else if (arg.equals("-h")) { + if (args.length < i+2) + printUsage(); + host = args[++i]; + + } else if (arg.equals("-p")) { + if (args.length < i+2) + printUsage(); + port = Integer.parseInt(args[++i]); + + } else if (arg.equals("-v")) { + if (args.length < i+2) + printUsage(); + sslVersion = Integer.parseInt(args[++i]); + if (sslVersion < 0 || sslVersion > 3) { + printUsage(); + } + + } else if (arg.equals("-l")) { + if (args.length < i+2) + printUsage(); + cipherList = args[++i]; + + } else if (arg.equals("-c")) { + if (args.length < i+2) + printUsage(); + clientCert = args[++i]; + + } else if (arg.equals("-k")) { + if (args.length < i+2) + printUsage(); + clientKey = args[++i]; + + } else if (arg.equals("-b")) { + if (args.length < i+2) + printUsage(); + benchmark = Integer.parseInt(args[++i]); + if (benchmark < 0 || benchmark > 1000000) + printUsage(); + + } else if (arg.equals("-A")) { + if (args.length < i+2) + printUsage(); + caCert = args[++i]; + + } else if (arg.equals("-d")) { + verifyPeer = 0; + + } else if (arg.equals("-u")) { + doDTLS = 1; + + } else if (arg.equals("-s")) { + if (WolfSSL.isEnabledPSK() == 0) { + System.out.println("PSK support not enabled in " + + "wolfSSL"); + System.exit(1); + } + usePsk = 1; + + } else if (arg.equals("-iocb")) { + useIOCallbacks = true; + + } else if (arg.equals("-logtest")) { + logCallback = 1; + + } else if (arg.equals("-o")) { + if (WolfSSL.isEnabledOCSP() == 0) { + System.out.println("OCSP support not enabled in " + + "wolfSSL"); + System.exit(1); + } + useOcsp = 1; + + } else if (arg.equals("-O")) { + if (WolfSSL.isEnabledOCSP() == 0) { + System.out.println("OCSP support not enabled in " + + "wolfSSL"); + System.exit(1); + } + if (args.length < i+2) + printUsage(); + useOcsp = 1; + ocspUrl = args[++i]; + + } else if (arg.equals("-U")) { + if (WolfSSL.isEnabledAtomicUser() == 0) { + System.out.println("Atomic User support not enabled " + + "in wolfSSL"); + System.exit(1); + } + useAtomic = 1; + + } else if (arg.equals("-P")) { + if (WolfSSL.isEnabledPKCallbacks() == 0) { + System.out.println("Public Key callback support not " + + "enabled in wolfSSL"); + System.exit(1); + } + pkCallbacks = 1; + + } else { + printUsage(); + } + } + + /* sort out DTLS versus TLS versions */ + if (doDTLS == 1) { + if (sslVersion == 3) + sslVersion = -2; + else + sslVersion = -1; + } + /* init library */ WolfSSL sslLib = new WolfSSL(); sslLib.debuggingON(); @@ -531,17 +556,23 @@ public class Client { "../certs/ca-cert.pem"); System.out.println("-b \tBenchmark connections and print" + " stats"); - System.out.println("-s\t\tUse pre shared keys"); + if (WolfSSL.isEnabledPSK() == 1) + System.out.println("-s\t\tUse pre shared keys"); System.out.println("-d\t\tDisable peer checks"); - System.out.println("-u\t\tUse UDP DTLS, add -v 2 for DTLSv1 (default)" + - ", -v 3 for DTLSv1.2"); + if (WolfSSL.isEnabledDTLS() == 1) + System.out.println("-u\t\tUse UDP DTLS, add -v 2 for DTLSv1 " + + "(default), -v 3 for DTLSv1.2"); System.out.println("-iocb\t\tEnable test I/O callbacks"); System.out.println("-logtest\tEnable test logging callback"); - System.out.println("-o\t\tPerform OCSP lookup on peer certificate"); - System.out.println("-O \tPerform OCSP lookup using " + - "as responder"); - System.out.println("-U\t\tEnable Atomic User Record Layer Callbacks"); - System.out.println("-P\t\tPublic Key Callbacks"); + if (WolfSSL.isEnabledOCSP() == 1) { + System.out.println("-o\t\tPerform OCSP lookup on peer certificate"); + System.out.println("-O \tPerform OCSP lookup using " + + "as responder"); + } + if (WolfSSL.isEnabledAtomicUser() == 1) + System.out.println("-U\t\tEnable Atomic User Record Layer Callbacks"); + if (WolfSSL.isEnabledPKCallbacks() == 1) + System.out.println("-P\t\tPublic Key Callbacks"); System.exit(1); } diff --git a/examples/Server.java b/examples/Server.java index d9d637d..3e6d436 100644 --- a/examples/Server.java +++ b/examples/Server.java @@ -84,101 +84,136 @@ public class Server { /* server info */ int port = 11111; - /* pull in command line options from user */ - for (int i = 0; i < args.length; i++) - { - String arg = args[i]; - - if (arg.equals("-?")) { - printUsage(); - - } else if (arg.equals("-p")) { - if (args.length < i+2) - printUsage(); - port = Integer.parseInt(args[++i]); - - } else if (arg.equals("-v")) { - if (args.length < i+2) - printUsage(); - sslVersion = Integer.parseInt(args[++i]); - if (sslVersion < 0 || sslVersion > 3) { - printUsage(); - } - - } else if (arg.equals("-l")) { - if (args.length < i+2) - printUsage(); - cipherList = args[++i]; - - } else if (arg.equals("-c")) { - if (args.length < i+2) - printUsage(); - serverCert = args[++i]; - - } else if (arg.equals("-k")) { - if (args.length < i+2) - printUsage(); - serverKey = args[++i]; - - } else if (arg.equals("-A")) { - if (args.length < i+2) - printUsage(); - caCert = args[++i]; - - } else if (arg.equals("-d")) { - verifyPeer = 0; - - } else if (arg.equals("-u")) { - doDTLS = 1; - - } else if (arg.equals("-s")) { - usePsk = 1; - - } else if (arg.equals("-iocb")) { - useIOCallbacks = true; - - } else if (arg.equals("-logtest")) { - logCallback = 1; - - } else if (arg.equals("-o")) { - useOcsp = 1; - - } else if (arg.equals("-O")) { - if (args.length < i+2) - printUsage(); - useOcsp = 1; - ocspUrl = args[i++]; - - } else if (arg.equals("-U")) { - useAtomic = 1; - - } else if (arg.equals("-P")) { - pkCallbacks = 1; - - } else if (arg.equals("-m")) { - crlDirMonitor = 1; - - } else if (arg.equals("-I")) { - sendPskIdentityHint = 0; - - } else { - printUsage(); - } - } - - /* sort out DTLS versus TLS versions */ - if (doDTLS == 1) { - if (sslVersion == 3) - sslVersion = -2; - else - sslVersion = -1; - } - try { /* load JNI library */ WolfSSL.loadLibrary(); + /* pull in command line options from user */ + for (int i = 0; i < args.length; i++) + { + String arg = args[i]; + + if (arg.equals("-?")) { + printUsage(); + + } else if (arg.equals("-p")) { + if (args.length < i+2) + printUsage(); + port = Integer.parseInt(args[++i]); + + } else if (arg.equals("-v")) { + if (args.length < i+2) + printUsage(); + sslVersion = Integer.parseInt(args[++i]); + if (sslVersion < 0 || sslVersion > 3) { + printUsage(); + } + + } else if (arg.equals("-l")) { + if (args.length < i+2) + printUsage(); + cipherList = args[++i]; + + } else if (arg.equals("-c")) { + if (args.length < i+2) + printUsage(); + serverCert = args[++i]; + + } else if (arg.equals("-k")) { + if (args.length < i+2) + printUsage(); + serverKey = args[++i]; + + } else if (arg.equals("-A")) { + if (args.length < i+2) + printUsage(); + caCert = args[++i]; + + } else if (arg.equals("-d")) { + verifyPeer = 0; + + } else if (arg.equals("-u")) { + doDTLS = 1; + + } else if (arg.equals("-s")) { + if (WolfSSL.isEnabledPSK() == 0) { + System.out.println("PSK support not enabled in " + + "wolfSSL"); + System.exit(1); + } + usePsk = 1; + + } else if (arg.equals("-iocb")) { + useIOCallbacks = true; + + } else if (arg.equals("-logtest")) { + logCallback = 1; + + } else if (arg.equals("-o")) { + if (WolfSSL.isEnabledOCSP() == 0) { + System.out.println("OCSP support not enabled in " + + "wolfSSL"); + System.exit(1); + } + useOcsp = 1; + + } else if (arg.equals("-O")) { + if (WolfSSL.isEnabledOCSP() == 0) { + System.out.println("OCSP support not enabled in " + + "wolfSSL"); + System.exit(1); + } + if (args.length < i+2) + printUsage(); + useOcsp = 1; + ocspUrl = args[i++]; + + } else if (arg.equals("-U")) { + if (WolfSSL.isEnabledAtomicUser() == 0) { + System.out.println("Atomic User support not enabled " + + "in wolfSSL"); + System.exit(1); + } + useAtomic = 1; + + } else if (arg.equals("-P")) { + if (WolfSSL.isEnabledPKCallbacks() == 0) { + System.out.println("Public Key callback support not " + + "enabled in wolfSSL"); + System.exit(1); + } + pkCallbacks = 1; + + } else if (arg.equals("-m")) { + if (WolfSSL.isEnabledCRLMonitor() == 0) { + System.out.println("CRL monitor support not enabled " + + "in wolfSSL"); + System.exit(1); + } + crlDirMonitor = 1; + + } else if (arg.equals("-I")) { + if (WolfSSL.isEnabledPSK() == 0) { + System.out.println("PSK support not enabled in " + + "wolfSSL"); + System.exit(1); + } + sendPskIdentityHint = 0; + + } else { + printUsage(); + } + } + + /* sort out DTLS versus TLS versions */ + if (doDTLS == 1) { + if (sslVersion == 3) + sslVersion = -2; + else + sslVersion = -1; + } + /* init library */ WolfSSL sslLib = new WolfSSL(); sslLib.debuggingON(); @@ -558,17 +593,24 @@ public class Server { System.out.println("-A \tCertificate Authority file,\tdefault " + "../certs/client-cert.pem"); System.out.println("-d\t\tDisable peer checks"); - System.out.println("-s\t\tUse pre shared keys"); - System.out.println("-u\t\tUse UDP DTLS, add -v 2 for DTLSv1 (default)" + - ", -v 3 for DTLSv1.2"); + if (WolfSSL.isEnabledPSK() == 1) + System.out.println("-s\t\tUse pre shared keys"); + if (WolfSSL.isEnabledDTLS() == 1) + System.out.println("-u\t\tUse UDP DTLS, add -v 2 for DTLSv1 (default)" + + ", -v 3 for DTLSv1.2"); System.out.println("-iocb\t\tEnable test I/O callbacks"); System.out.println("-logtest\tEnable test logging callback"); - System.out.println("-o\t\tPerform OCSP lookup on peer certificate"); - System.out.println("-O \tPerform OCSP lookup using " + - "as responder"); - System.out.println("-U\t\tAtomic User Record Layer Callbacks"); - System.out.println("-P\t\tPublic Key Callbacks"); - System.out.println("-m\t\tEnable CRL directory monitor"); + if (WolfSSL.isEnabledOCSP() == 1) { + System.out.println("-o\t\tPerform OCSP lookup on peer certificate"); + System.out.println("-O \tPerform OCSP lookup using " + + "as responder"); + } + if (WolfSSL.isEnabledAtomicUser() == 1) + System.out.println("-U\t\tAtomic User Record Layer Callbacks"); + if (WolfSSL.isEnabledPKCallbacks() == 1) + System.out.println("-P\t\tPublic Key Callbacks"); + if (WolfSSL.isEnabledCRLMonitor() == 1) + System.out.println("-m\t\tEnable CRL directory monitor"); System.exit(1); } diff --git a/native/com_wolfssl_WolfSSL.c b/native/com_wolfssl_WolfSSL.c index a0dffe3..074c4e5 100644 --- a/native/com_wolfssl_WolfSSL.c +++ b/native/com_wolfssl_WolfSSL.c @@ -419,3 +419,63 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledCRL #endif } +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledCRLMonitor + (JNIEnv* jenv, jclass jcl) +{ +#ifdef HAVE_CRL_MONITOR + return 1; +#else + return 0; +#endif +} + +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledOCSP + (JNIEnv* jenv, jclass jcl) +{ +#ifdef HAVE_OCSP + return 1; +#else + return 0; +#endif +} + +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledPSK + (JNIEnv* jenv, jclass jcl) +{ +#ifndef NO_PSK + return 1; +#else + return 0; +#endif +} + +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledDTLS + (JNIEnv* jenv, jclass jcl) +{ +#ifdef WOLFSSL_DTLS + return 1; +#else + return 0; +#endif +} + +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledAtomicUser + (JNIEnv* jenv, jclass jcl) +{ +#ifdef ATOMIC_USER + return 1; +#else + return 0; +#endif +} + +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledPKCallbacks + (JNIEnv* jenv, jclass jcl) +{ +#ifdef HAVE_PK_CALLBACKS + return 1; +#else + return 0; +#endif +} + diff --git a/native/com_wolfssl_WolfSSL.h b/native/com_wolfssl_WolfSSL.h index cc9ec32..e9021b4 100644 --- a/native/com_wolfssl_WolfSSL.h +++ b/native/com_wolfssl_WolfSSL.h @@ -399,6 +399,54 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_getHmacMaxSize JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledCRL (JNIEnv *, jclass); +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledCRLMonitor + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledCRLMonitor + (JNIEnv *, jclass); + +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledOCSP + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledOCSP + (JNIEnv *, jclass); + +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledPSK + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledPSK + (JNIEnv *, jclass); + +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledDTLS + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledDTLS + (JNIEnv *, jclass); + +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledAtomicUser + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledAtomicUser + (JNIEnv *, jclass); + +/* + * Class: com_wolfssl_WolfSSL + * Method: isEnabledPKCallbacks + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_isEnabledPKCallbacks + (JNIEnv *, jclass); + #ifdef __cplusplus } #endif diff --git a/src/java/com/wolfssl/WolfSSL.java b/src/java/com/wolfssl/WolfSSL.java index 1ce8d7a..8726328 100644 --- a/src/java/com/wolfssl/WolfSSL.java +++ b/src/java/com/wolfssl/WolfSSL.java @@ -587,6 +587,8 @@ public class WolfSSL { */ public static native int getHmacMaxSize(); + /* ------------------------- isEnabled methods -------------------------- */ + /** * Checks if CRL support is enabled in wolfSSL native library. * @@ -594,5 +596,48 @@ public class WolfSSL { */ public static native int isEnabledCRL(); + /** + * Checks if CRL Monitor support is enabled in wolfSSL native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledCRLMonitor(); + + /** + * Checks if OCSP support is enabled in wolfSSL native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledOCSP(); + + /** + * Checks if PSK support is enabled in wolfSSL native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledPSK(); + + /** + * Checks if DTLS support is enabled in wolfSSL native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledDTLS(); + + /** + * Checks if Atomic User support is enabled in wolfSSL native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledAtomicUser(); + + /** + * Checks if Public Key Callback support is enabled in wolfSSL + * native library. + * + * @return 1 if enabled, 0 if not compiled in + */ + public static native int isEnabledPKCallbacks(); + } /* end WolfSSL */