package net.i2p.router.tasks;
import java.security.GeneralSecurityException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import net.i2p.crypto.CryptoCheck;
import net.i2p.crypto.SigType;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
/**
* Warn about unavailable crypto to router and wrapper logs
*
* @since 0.9.15
*/
public class CryptoChecker {
private static String JRE6 = "http://www.oracle.com/technetwork/java/javase/downloads/index.html";
// these two are US-only and can change?
//private static String JRE7 = "http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html";
//private static String JRE8 = "http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html";
/**
* @param ctx if null, logs only to System.out (called from main)
*/
public static void warnUnavailableCrypto(RouterContext ctx) {
if (SystemVersion.isAndroid())
return;
boolean unavail = false;
Log log = null;
for (SigType t : SigType.values()) {
if (!t.isAvailable()) {
if (!unavail) {
unavail = true;
if (ctx != null)
log = ctx.logManager().getLog(CryptoChecker.class);
}
String s = "Crypto " + t + " is not available";
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println("Warning: " + s);
}
}
if (unavail) {
String s = "Java version: " + System.getProperty("java.version") +
" OS: " + System.getProperty("os.name") + ' ' +
System.getProperty("os.arch") + ' ' +
System.getProperty("os.version");
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println("Warning: " + s);
if (!SystemVersion.isJava7()) {
s = "Please consider upgrading to Java 7";
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println(s);
} else if (SystemVersion.isJava9()) {
s = "Java 9 support is beta, check for Java updates";
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println("Warning: " + s);
}
if (!CryptoCheck.isUnlimited() && !SystemVersion.isJava9()) {
s = "Please consider installing the Java Cryptography Unlimited Strength Jurisdiction Policy Files from ";
//if (SystemVersion.isJava8())
// s += JRE8;
//else if (SystemVersion.isJava7())
// s += JRE7;
//else
s += JRE6;
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println(s);
}
s = "This crypto will be required in a future release";
if (log != null)
log.logAlways(Log.WARN, s);
System.out.println("Warning: " + s);
} else if (ctx == null) {
// called from main()
System.out.println("All crypto available");
}
}
public static void main(String[] args) {
warnUnavailableCrypto(null);
}
}