[ 
https://issues.apache.org/jira/browse/CRYPTO-169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17787684#comment-17787684
 ] 

Sebb commented on CRYPTO-169:
-----------------------------

I think there is a problem with the recent changes to OpenSslCryptoRandom.
It seems wrong for the static block to raise an Exception.

This means that the method OpenSslCryptoRandom.isNativeCodeEnabled() cannot be 
used if the class does not load.

Rather than checking for errors in the static block, they should be checked by 
the methods of the class as necessary.

> Unable to load native library on Apple Silicon (M1 Mac)
> -------------------------------------------------------
>
>                 Key: CRYPTO-169
>                 URL: https://issues.apache.org/jira/browse/CRYPTO-169
>             Project: Commons Crypto
>          Issue Type: Bug
>            Reporter: L. C. Hsieh
>            Priority: Major
>         Attachments: image-2023-10-21-17-51-41-260.png, 
> image-2023-10-21-17-52-02-237.png, image-2023-10-21-17-53-16-898.png, 
> image-2023-10-21-17-59-13-866.png, image-2023-10-22-23-58-57-254.png
>
>
> Recently as trying to upgrade commons-crypto from 1.1.0 to 1.2.0 in Spark 
> (SPARK-45617), got the following error in one test:
> ```
> [info]   Cause: java.security.GeneralSecurityException: Native library is not 
> loaded
> [info]   at 
> org.apache.commons.crypto.random.OpenSslCryptoRandom.checkNative(OpenSslCryptoRandom.java:79)
> [info]   at 
> org.apache.commons.crypto.random.OpenSslCryptoRandom.<clinit>(OpenSslCryptoRandom.java:65)
>        
> [info]   at java.base/java.lang.Class.forName0(Native Method)                 
>         
> [info]   at java.base/java.lang.Class.forName(Class.java:467)               
> [info]   at 
> org.apache.commons.crypto.utils.ReflectionUtils.getClassByNameOrNull(ReflectionUtils.java:93)
> [info]   at 
> org.apache.commons.crypto.utils.ReflectionUtils.getClassByName(ReflectionUtils.java:64)
> [info]   at 
> org.apache.commons.crypto.random.CryptoRandomFactory.getCryptoRandom(CryptoRandomFactory.java:189)
> [info]   at 
> org.apache.spark.security.CryptoStreamUtils$.createInitializationVector(CryptoStreamUtils.scala:138)
> [info]   at 
> org.apache.spark.security.CryptoStreamUtils$.createCryptoOutputStream(CryptoStreamUtils.scala:56)
> [info]   at 
> org.apache.spark.serializer.SerializerManager.$anonfun$wrapForEncryption$3(SerializerManager.scala:151)
>  
> ```
> I did a quick check. commons-crypto-1.2.0.jar only contain x86_64 Mac native 
> library, it doesn't provide pre-built native library for Apple Silicon.
> But I also checked commons-crypto-1.1.0.jar which Spark uses currently. It 
> also doesn't provide native library for Apple Silicon.
> Since they both don't contain native library for Apple Silicon, why 
> commons-crypto-1.2.0 doesn't work and what makes the difference between 
> commons-crypto-1.1.0 and commons-crypto-1.2.0?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to