X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=graalvm%2Forg.argeo.slc.graalvm%2Fsrc%2Forg%2Fargeo%2Fslc%2Fgraalvm%2Ffeature%2FArgeoToolFeature.java;fp=graalvm%2Forg.argeo.slc.graalvm%2Fsrc%2Forg%2Fargeo%2Fslc%2Fgraalvm%2Ffeature%2FArgeoToolFeature.java;h=2213e0683ea5b9c84bb0d6dbc00a7cad8b570559;hb=3716c0d3e3fdd5bb7813d9e736edcfc28fa94da6;hp=0000000000000000000000000000000000000000;hpb=d68361ee9ecfc6388c852059de417cabd1d175bb;p=gpl%2Fargeo-slc.git diff --git a/graalvm/org.argeo.slc.graalvm/src/org/argeo/slc/graalvm/feature/ArgeoToolFeature.java b/graalvm/org.argeo.slc.graalvm/src/org/argeo/slc/graalvm/feature/ArgeoToolFeature.java new file mode 100644 index 000000000..2213e0683 --- /dev/null +++ b/graalvm/org.argeo.slc.graalvm/src/org/argeo/slc/graalvm/feature/ArgeoToolFeature.java @@ -0,0 +1,36 @@ +package org.argeo.slc.graalvm.feature; + +import java.security.Security; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.hosted.Feature; +import org.graalvm.nativeimage.hosted.RuntimeClassInitialization; +import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport; + +import net.i2p.crypto.eddsa.EdDSASecurityProvider; + +/** Required native image customisations. */ +public class ArgeoToolFeature implements Feature { + + @Override + public void afterRegistration(AfterRegistrationAccess access) { + // JCE providers need to be registered at build time. + // https://github.com/oracle/graal/issues/2800#issuecomment-702480444 + // https://github.com/micronaut-projects/micronaut-oracle-cloud/pull/17/files#r498585779 + RuntimeClassInitialization.initializeAtBuildTime("org.bouncycastle"); + Security.addProvider(new BouncyCastleProvider()); + + RuntimeClassInitialization.initializeAtBuildTime("net.i2p.crypto.eddsa"); + Security.addProvider(new EdDSASecurityProvider()); + + // required for Tomcat JNI DLL to load properly + RuntimeClassInitialization.initializeAtBuildTime("org.apache.tomcat.jni"); + + RuntimeClassInitializationSupport rci = ImageSingletons.lookup(RuntimeClassInitializationSupport.class); + rci.rerunInitialization("org.bouncycastle.jcajce.provider.drbg.DRBG$Default", "dependency with native random"); + rci.rerunInitialization("org.bouncycastle.jcajce.provider.drbg.DRBG$NonceAndIV", + "dependency with native random"); + } + +}