+ Class<?> clss = null;
+ try {
+ clss = Class.forName("org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider");
+ } catch (ClassNotFoundException e) {
+ log.warn("Bouncy Castle FIPS provider could not be initialised,"
+ + " we assume the non-FIPS provider is configured externally. (" + e + ")");
+ try {
+ clss = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+ } catch (ClassNotFoundException e1) {
+ // silent
+ }
+ }
+ if (clss != null) {
+ try {
+ Provider provider = (Provider) clss.getDeclaredConstructor().newInstance();
+ Security.addProvider(provider);
+ BC_SECURITY_PROVIDER = provider.getName();
+ } catch (IllegalAccessException | InstantiationException | IllegalArgumentException
+ | InvocationTargetException | NoSuchMethodException | SecurityException e) {
+ throw new IllegalStateException("Cannot load Bouncy Castle provider " + clss, e);
+ }
+ } else {
+ throw new IllegalStateException("Cannot load any Bouncy Castle provider");
+ }