]> git.argeo.org Git - gpl/argeo-slc.git/blob - suite/org.argeo.slc.tool/src/org/argeo/slc/tool/graalvm/BouncyCastleFeature.java
75c42fec2028d37ea06e51403f3b39b1657a7dda
[gpl/argeo-slc.git] / suite / org.argeo.slc.tool / src / org / argeo / slc / tool / graalvm / BouncyCastleFeature.java
1 package org.argeo.slc.tool.graalvm;
2
3 import java.security.Security;
4
5 import org.bouncycastle.jce.provider.BouncyCastleProvider;
6 import org.graalvm.nativeimage.ImageSingletons;
7 import org.graalvm.nativeimage.hosted.Feature;
8 import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
9 import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport;
10
11 import com.oracle.svm.core.annotate.AutomaticFeature;
12
13 import net.i2p.crypto.eddsa.EdDSASecurityProvider;
14
15 /**
16 * BounvyCastle JCE provider needs to be registered at build time.
17 *
18 * @see https://github.com/oracle/graal/issues/2800#issuecomment-702480444
19 * @see https://github.com/micronaut-projects/micronaut-oracle-cloud/pull/17/files#r498585779
20 */
21 @AutomaticFeature
22 public class BouncyCastleFeature implements Feature {
23
24 @Override
25 public void afterRegistration(AfterRegistrationAccess access) {
26 RuntimeClassInitialization.initializeAtBuildTime("org.bouncycastle");
27 Security.addProvider(new BouncyCastleProvider());
28
29 RuntimeClassInitialization.initializeAtBuildTime("net.i2p.crypto.eddsa");
30 Security.addProvider(new EdDSASecurityProvider());
31
32 // required for Tomcat JNI DLL to load properly
33 RuntimeClassInitialization.initializeAtBuildTime("org.apache.tomcat.jni");
34
35 RuntimeClassInitializationSupport rci = ImageSingletons.lookup(RuntimeClassInitializationSupport.class);
36 rci.rerunInitialization("org.bouncycastle.jcajce.provider.drbg.DRBG$Default", "dependency with native random");
37 rci.rerunInitialization("org.bouncycastle.jcajce.provider.drbg.DRBG$NonceAndIV",
38 "dependency with native random");
39 }
40
41 }