terl / lazysodium-java

A Java implementation of the Libsodium crypto library. For the lazy dev.

Home Page:https://github.com/terl/lazysodium-java/wiki

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Lazysodium 5.1.1 doesn't load libsodium for Rocky Linux 8

marseg opened this issue · comments

Hi there,

I have an issue with starting my app that uses Lazysodium. And this issue is reproduces only on Rocky Linux OS but not other ones that I'd tried (ubuntu, macos):

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.goterl.lazysodium.LazySodiumJava]: Factory method 'lazySodium' threw exception; nested exception is com.goterl.resourceloader.ResourceLoaderException: Failed to load the bundled library from resources by relative path (linux64/libsodium.so)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 25 common frames omitted
Caused by: com.goterl.resourceloader.ResourceLoaderException: Failed to load the bundled library from resources by relative path (linux64/libsodium.so)
at com.goterl.resourceloader.SharedLibraryLoader.load(SharedLibraryLoader.java:66)
at com.goterl.lazysodium.utils.LibraryLoader.loadBundledLibrary(LibraryLoader.java:134)
at com.goterl.lazysodium.utils.LibraryLoader.loadLibrary(LibraryLoader.java:95)
at com.goterl.lazysodium.SodiumJava.(SodiumJava.java:34)
at com.goterl.lazysodium.SodiumJava.(SodiumJava.java:23)
at com.pps.payop.withdrawal.PayOpWithdrawalConfiguration.lazySodium(PayOpWithdrawalConfiguration.java:53)
at com.pps.payop.withdrawal.PayOpWithdrawalConfiguration$$EnhancerBySpringCGLIB$$a7ddb078.CGLIB$lazySodium$6()
at com.pps.payop.withdrawal.PayOpWithdrawalConfiguration$$EnhancerBySpringCGLIB$$a7ddb078$$FastClassBySpringCGLIB$$f724769a.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
at com.pps.payop.withdrawal.PayOpWithdrawalConfiguration$$EnhancerBySpringCGLIB$$a7ddb078.lazySodium()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 26 common frames omitted
Caused by: java.io.IOException: Failed to list contents of file:/home/pps/core/pps-4.30.0-SNAPSHOT.jar!/BOOT-INF/lib/lazysodium-java-5.1.1.jar!/linux64/libsodium.so
at com.goterl.resourceloader.ResourceLoader.doCopyDirectory(ResourceLoader.java:362)
at com.goterl.resourceloader.ResourceLoader.copyDirectory(ResourceLoader.java:354)
at com.goterl.resourceloader.ResourceLoader.getFileFromFileSystem(ResourceLoader.java:248)
at com.goterl.resourceloader.ResourceLoader.copyToTempDirectory(ResourceLoader.java:88)
at com.goterl.resourceloader.SharedLibraryLoader.load(SharedLibraryLoader.java:53)

Is this problem specific for this OS?
Or could you help me out somehow with this problem?

Thanks in advance,
Siarhei

Because Lazysodium bundles native binaries inside its resources folder, this exception is due to LazySodium failing to extract those binaries out of a nested JAR situation.

You could try to instantiate LazySodium by providing an absolute path to your own native binaries that you store somewhere. There is a constructor param to handle this.

Though I think this PR fixes the situation entirely terl/resource-loader#12