@@ -56,7 +56,7 @@ We acknowledge that some parties may want to begin deploying post-quantum crypto
5656
5757
5858## Building
59- Builds have been tested on Linux (Ubuntu 18 .04 LTS, 19.10, and 20.04) and macOS Mojave with OpenJDK 8, 9, 11 .
59+ Builds are tested in GitHub Actions on Linux (Ubuntu 24 .04 with OpenJDK 21) and macOS ( [ macos-latest runner ] ( https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories ) , at macOS Sonoma with Java 21 as of liboqs-java 0.2.0 release) .
6060
6161### Pre-requisites
6262To build the Java OQS wrapper you need a Java Development Kit (JDK), such as [ OpenJDK] ( https://openjdk.java.net/ ) >= 8 and [ Apache Maven] ( https://maven.apache.org/ ) .
@@ -88,13 +88,13 @@ To build the `liboqs-java` wrapper type for different operating systems add the
8888
8989For instance, to build ` liboqs-java ` for MacOS, type:
9090```
91- $ mvn package -P macosx -Dliboqs.include.dir="/usr/local/include" -Dliboqs.lib.dir="/usr/local/lib"
91+ mvn package -P macosx -Dliboqs.include.dir="/usr/local/include" -Dliboqs.lib.dir="/usr/local/lib"
9292```
9393The above command will compile the C and Java files and also run the unit tests.
9494
9595To build without running the default unit tests you can use the ` -Dmaven.test.skip=true ` command line option as follows:
9696```
97- $ mvn package -P macosx -Dliboqs.include.dir="/usr/local/include" -Dliboqs.lib.dir="/usr/local/lib" -Dmaven.test.skip=true
97+ mvn package -P macosx -Dliboqs.include.dir="/usr/local/include" -Dliboqs.lib.dir="/usr/local/lib" -Dmaven.test.skip=true
9898```
9999
100100The default profile for building is ` linux ` , so when building on Linux the ` -P <OS> ` command line option may be omitted.
@@ -118,7 +118,6 @@ The examples include:
118118
1191191 . ** Rand example:**
120120 Print random bytes from
121- * NIST-KAT
122121 * OpenSSL
123122 * System (default)
124123
@@ -128,20 +127,20 @@ The examples include:
128127
129128To compile and run the KEM example, type:
130129```
131- $ javac -cp target/liboqs-java.jar examples/KEMExample.java
132- $ java -cp target/liboqs-java.jar:examples/ KEMExample
130+ javac -cp target/liboqs-java.jar examples/KEMExample.java
131+ java -cp target/liboqs-java.jar:examples/ KEMExample
133132```
134133
135134```
136135Supported KEMs:
137- BIKE-L1 BIKE-L3 Classic-McEliece-348864 Classic-McEliece-348864f Classic-McEliece-460896 Classic-McEliece-460896f Classic-McEliece-6688128 Classic-McEliece-6688128f Classic-McEliece-6960119 Classic-McEliece-6960119f Classic-McEliece-8192128 Classic-McEliece-8192128f HQC-128 HQC-192 HQC-256 Kyber512 Kyber768 Kyber1024 Kyber512-90s Kyber768-90s Kyber1024-90s NTRU-HPS-2048-509 NTRU-HPS-2048-677 NTRU-HPS-4096-821 NTRU-HRSS-701 ntrulpr653 ntrulpr761 ntrulpr857 sntrup653 sntrup761 sntrup857 LightSaber-KEM Saber-KEM FireSaber-KEM FrodoKEM-640-AES FrodoKEM-640-SHAKE FrodoKEM-976-AES FrodoKEM-976-SHAKE FrodoKEM-1344-AES FrodoKEM-1344-SHAKE SIDH-p434 SIDH-p503 SIDH-p610 SIDH-p751 SIDH-p434-compressed SIDH-p503-compressed SIDH-p610-compressed SIDH-p751-compressed SIKE-p434 SIKE-p503 SIKE-p610 SIKE-p751 SIKE-p434-compressed SIKE-p503-compressed SIKE-p610-compressed SIKE-p751-compressed
136+ BIKE-L1 BIKE-L3 BIKE-L5 Classic-McEliece-348864 Classic-McEliece-348864f Classic-McEliece-460896 Classic-McEliece-460896f Classic-McEliece-6688128 Classic-McEliece-6688128f Classic-McEliece-6960119 Classic-McEliece-6960119f Classic-McEliece-8192128 Classic-McEliece-8192128f HQC-128 HQC-192 HQC-256 Kyber512 Kyber768 Kyber1024 ML-KEM-512 ML-KEM-768 ML-KEM-1024 sntrup761 FrodoKEM-640-AES FrodoKEM-640-SHAKE FrodoKEM-976-AES FrodoKEM-976-SHAKE FrodoKEM-1344-AES FrodoKEM-1344-SHAKE
138137
139138Enabled KEMs:
140- BIKE-L1 BIKE-L3 Classic-McEliece-348864 Classic-McEliece-348864f Classic-McEliece-460896 Classic-McEliece-460896f Classic-McEliece-6688128 Classic-McEliece-6688128f Classic-McEliece-6960119 Classic-McEliece-6960119f Classic-McEliece-8192128 Classic-McEliece-8192128f HQC-128 HQC-192 HQC-256 Kyber512 Kyber768 Kyber1024 Kyber512-90s Kyber768-90s Kyber1024-90s NTRU-HPS-2048-509 NTRU-HPS-2048-677 NTRU-HPS-4096-821 NTRU-HRSS-701 ntrulpr653 ntrulpr761 ntrulpr857 sntrup653 sntrup761 sntrup857 LightSaber-KEM Saber-KEM FireSaber-KEM FrodoKEM-640-AES FrodoKEM-640-SHAKE FrodoKEM-976-AES FrodoKEM-976-SHAKE FrodoKEM-1344-AES FrodoKEM-1344-SHAKE SIDH-p434 SIDH-p503 SIDH-p610 SIDH-p751 SIDH-p434-compressed SIDH-p503-compressed SIDH-p610-compressed SIDH-p751-compressed SIKE-p434 SIKE-p503 SIKE-p610 SIKE-p751 SIKE-p434-compressed SIKE-p503-compressed SIKE-p610-compressed SIKE-p751-compressed
139+ BIKE-L1 BIKE-L3 BIKE-L5 Classic-McEliece-348864 Classic-McEliece-348864f Classic-McEliece-460896 Classic-McEliece-460896f Classic-McEliece-6688128 Classic-McEliece-6688128f Classic-McEliece-6960119 Classic-McEliece-6960119f Classic-McEliece-8192128 Classic-McEliece-8192128f HQC-128 HQC-192 HQC-256 Kyber512 Kyber768 Kyber1024 ML-KEM-512 ML-KEM-768 ML-KEM-1024 sntrup761 FrodoKEM-640-AES FrodoKEM-640-SHAKE FrodoKEM-976-AES FrodoKEM-976-SHAKE FrodoKEM-1344-AES FrodoKEM-1344-SHAKE
141140
142141KEM Details:
143- Name: Kyber512
144- Version: https://github.com/pq-crystals/kyber/commit/74cad307858b61e434490c75f812cb9b9ef7279b
142+ Name: ML-KEM-512
143+ Version: FIPS203
145144 Claimed NIST level: 1
146145 Is IND-CCA: true
147146 Length public key (bytes): 800
@@ -150,68 +149,67 @@ KEM Details:
150149 Length shared secret (bytes): 32
151150
152151Client public key:
153- C8 58 3B 21 02 A0 4D B0 ... 95 57 A7 E9 42 C0 45 C4
152+ A8 37 25 CA 79 A5 55 42 ... AF 43 3A 54 6C 3C 34 30
154153
155154It took 1 millisecs to generate the key pair.
156155It took 0 millisecs to encapsulate the secret.
157156It took 0 millisecs to decapsulate the secret.
158157
159158Client shared secret:
160- 16 7F 9B 18 18 F9 F0 FE ... 70 F3 F6 4A C1 30 2C FF
159+ 7D 3B BB C7 29 45 4B 2F ... 58 87 1D BB BD 35 9C 79
161160
162161Server shared secret:
163- 16 7F 9B 18 18 F9 F0 FE ... 70 F3 F6 4A C1 30 2C FF
162+ 7D 3B BB C7 29 45 4B 2F ... 58 87 1D BB BD 35 9C 79
164163
165164Shared secrets coincide? true
166165```
167166
168167##### 2) Signatures example
169168
170169```
171- $ javac -cp target/liboqs-java.jar examples/SigExample.java
172- $ java -cp target/liboqs-java.jar:examples/ SigExample
170+ javac -cp target/liboqs-java.jar examples/SigExample.java
171+ java -cp target/liboqs-java.jar:examples/ SigExample
173172```
174173
175174```
176175Supported signatures:
177- Dilithium2 Dilithium3 Dilithium5 Dilithium2-AES Dilithium3-AES Dilithium5-AES Falcon-512 Falcon-1024 Rainbow-I-Classic Rainbow-I-Circumzenithal Rainbow-I-Compressed Rainbow-III-Classic Rainbow-III-Circumzenithal Rainbow-III-Compressed Rainbow-V-Classic Rainbow-V-Circumzenithal Rainbow-V-Compressed SPHINCS+-Haraka-128f-robust SPHINCS+-Haraka-128f-simple SPHINCS+-Haraka-128s-robust SPHINCS+-Haraka-128s-simple SPHINCS+-Haraka-192f-robust SPHINCS+-Haraka-192f-simple SPHINCS+-Haraka-192s-robust SPHINCS+-Haraka-192s-simple SPHINCS+-Haraka-256f-robust SPHINCS+-Haraka-256f-simple SPHINCS+-Haraka-256s-robust SPHINCS+-Haraka-256s-simple SPHINCS+-SHA256-128f-robust SPHINCS+-SHA256-128f-simple SPHINCS+-SHA256-128s-robust SPHINCS+-SHA256-128s-simple SPHINCS+-SHA256-192f-robust SPHINCS+-SHA256-192f-simple SPHINCS+-SHA256-192s-robust SPHINCS+-SHA256-192s-simple SPHINCS+-SHA256-256f-robust SPHINCS+-SHA256-256f-simple SPHINCS+-SHA256-256s-robust SPHINCS+-SHA256-256s-simple SPHINCS+-SHAKE256-128f-robust SPHINCS+-SHAKE256-128f-simple SPHINCS+-SHAKE256-128s-robust SPHINCS+-SHAKE256-128s-simple SPHINCS+-SHAKE256-192f-robust SPHINCS+-SHAKE256-192f-simple SPHINCS+-SHAKE256-192s-robust SPHINCS+-SHAKE256-192s-simple SPHINCS+-SHAKE256-256f-robust SPHINCS+-SHAKE256-256f-simple SPHINCS+-SHAKE256-256s-robust SPHINCS+-SHAKE256-256s-simple picnic_L1_FS picnic_L1_UR picnic_L1_full picnic_L3_FS picnic_L3_UR picnic_L3_full picnic_L5_FS picnic_L5_UR picnic_L5_full picnic3_L1 picnic3_L3 picnic3_L5
176+ Dilithium2 Dilithium3 Dilithium5 ML-DSA-44 ML-DSA-65 ML-DSA-87 Falcon-512 Falcon-1024 Falcon-padded-512 Falcon-padded-1024 SPHINCS+-SHA2-128f-simple SPHINCS+-SHA2-128s-simple SPHINCS+-SHA2-192f-simple SPHINCS+-SHA2-192s-simple SPHINCS+-SHA2-256f-simple SPHINCS+-SHA2-256s-simple SPHINCS+-SHAKE-128f-simple SPHINCS+-SHAKE-128s-simple SPHINCS+-SHAKE-192f-simple SPHINCS+-SHAKE-192s-simple SPHINCS+-SHAKE-256f-simple SPHINCS+-SHAKE-256s-simple MAYO-1 MAYO-2 MAYO-3 MAYO-5 cross-rsdp-128-balanced cross-rsdp-128-fast cross-rsdp-128-small cross-rsdp-192-balanced cross-rsdp-192-fast cross-rsdp-192-small cross-rsdp-256-balanced cross-rsdp-256-fast cross-rsdp-256-small cross-rsdpg-128-balanced cross-rsdpg-128-fast cross-rsdpg-128-small cross-rsdpg-192-balanced cross-rsdpg-192-fast cross-rsdpg-192-small cross-rsdpg-256-balanced cross-rsdpg-256-fast cross-rsdpg-256-small
178177
179178Enabled signatures:
180- Dilithium2 Dilithium3 Dilithium5 Dilithium2-AES Dilithium3-AES Dilithium5-AES Falcon-512 Falcon-1024 Rainbow-I-Classic Rainbow-I-Circumzenithal Rainbow-I-Compressed Rainbow-III-Classic Rainbow-III-Circumzenithal Rainbow-III-Compressed Rainbow-V-Classic Rainbow-V-Circumzenithal Rainbow-V-Compressed SPHINCS+-Haraka-128f-robust SPHINCS+-Haraka-128f-simple SPHINCS+-Haraka-128s-robust SPHINCS+-Haraka-128s-simple SPHINCS+-Haraka-192f-robust SPHINCS+-Haraka-192f-simple SPHINCS+-Haraka-192s-robust SPHINCS+-Haraka-192s-simple SPHINCS+-Haraka-256f-robust SPHINCS+-Haraka-256f-simple SPHINCS+-Haraka-256s-robust SPHINCS+-Haraka-256s-simple SPHINCS+-SHA256-128f-robust SPHINCS+-SHA256-128f-simple SPHINCS+-SHA256-128s-robust SPHINCS+-SHA256-128s-simple SPHINCS+-SHA256-192f-robust SPHINCS+-SHA256-192f-simple SPHINCS+-SHA256-192s-robust SPHINCS+-SHA256-192s-simple SPHINCS+-SHA256-256f-robust SPHINCS+-SHA256-256f-simple SPHINCS+-SHA256-256s-robust SPHINCS+-SHA256-256s-simple SPHINCS+-SHAKE256-128f-robust SPHINCS+-SHAKE256-128f-simple SPHINCS+-SHAKE256-128s-robust SPHINCS+-SHAKE256-128s-simple SPHINCS+-SHAKE256-192f-robust SPHINCS+-SHAKE256-192f-simple SPHINCS+-SHAKE256-192s-robust SPHINCS+-SHAKE256-192s-simple SPHINCS+-SHAKE256-256f-robust SPHINCS+-SHAKE256-256f-simple SPHINCS+-SHAKE256-256s-robust SPHINCS+-SHAKE256-256s-simple picnic_L1_FS picnic_L1_UR picnic_L1_full picnic_L3_FS picnic_L3_UR picnic_L3_full picnic_L5_FS picnic_L5_UR picnic_L5_full picnic3_L1 picnic3_L3 picnic3_L5
179+ Dilithium2 Dilithium3 Dilithium5 ML-DSA-44 ML-DSA-65 ML-DSA-87 Falcon-512 Falcon-1024 Falcon-padded-512 Falcon-padded-1024 SPHINCS+-SHA2-128f-simple SPHINCS+-SHA2-128s-simple SPHINCS+-SHA2-192f-simple SPHINCS+-SHA2-192s-simple SPHINCS+-SHA2-256f-simple SPHINCS+-SHA2-256s-simple SPHINCS+-SHAKE-128f-simple SPHINCS+-SHAKE-128s-simple SPHINCS+-SHAKE-192f-simple SPHINCS+-SHAKE-192s-simple SPHINCS+-SHAKE-256f-simple SPHINCS+-SHAKE-256s-simple MAYO-1 MAYO-2 MAYO-3 MAYO-5 cross-rsdp-128-balanced cross-rsdp-128-fast cross-rsdp-128-small cross-rsdp-192-balanced cross-rsdp-192-fast cross-rsdp-192-small cross-rsdp-256-balanced cross-rsdp-256-fast cross-rsdp-256-small cross-rsdpg-128-balanced cross-rsdpg-128-fast cross-rsdpg-128-small cross-rsdpg-192-balanced cross-rsdpg-192-fast cross-rsdpg-192-small cross-rsdpg-256-balanced cross-rsdpg-256-fast cross-rsdpg-256-small
181180
182181Signature Details:
183- Name: Dilithium2
184- Version: https://github.com/pq-crystals/dilithium/commit/d9c885d3f2e11c05529eeeb7d70d808c972b8409
182+ Name: ML-DSA-44
183+ Version: FIPS204
185184 Claimed NIST level: 2
186185 Is IND-CCA: true
187186 Length public key (bytes): 1312
188- Length secret key (bytes): 2528
187+ Length secret key (bytes): 2560
189188 Maximum length signature (bytes): 2420
190189
191190Signer public key:
192- 0E 47 54 30 E7 47 6D E6 ... 82 6E 4C C3 87 AA 6E FD
191+ CB CB 70 FF 1E B3 BA 26 ... A7 CF 7C 70 89 A1 1A 40
193192
194- It took 0 millisecs to generate the key pair.
193+ It took 1 millisecs to generate the key pair.
195194It took 1 millisecs to sign the message.
196195It took 0 millisecs to verify the signature.
197196
198197Signature:
199- 0C 2E 2D E2 81 C5 DC 10 ... 00 00 00 00 03 13 29 3B
198+ ED 6F 67 B6 2E C9 31 FC ... 00 00 00 00 0F 21 2A 38
200199
201200Valid signature? true
202201```
203202
204203##### 3) Rand example
205204
206205```
207- $ javac -cp target/liboqs-java.jar examples/RandExample.java
208- $ java -cp target/liboqs-java.jar:examples/ RandExample
206+ javac -cp target/liboqs-java.jar examples/RandExample.java
207+ java -cp target/liboqs-java.jar:examples/ RandExample
209208```
210209
211210```
212- NIST-KAT: BF E7 5C 34 F9 1C 54 44 30 CD B1 61 5B FF 3D 92 31 17 38 BD 71 61 0C 22 CD F7 B8 23 D9 7C 27 F3
213- OpenSSL: 86 B6 46 9C 56 44 6B FB F8 B1 37 F0 86 4D 4D 74 0F FD 51 99 82 D6 89 02 40 B9 45 CF F9 3A 4D 70
214- System (default): 37 55 6F 4F 03 53 BB 71 E8 70 C2 3D DF 85 69 57 30 CE FA 11 EF 50 8A F5 AE 25 35 6F 91 CF EC 1D
211+ OpenSSL: 19 0D 77 20 82 BA 59 69 38 32 3A 81 1B 50 6A A0 6F 81 14 35 06 14 9F 72 4F 6F D2 5F 68 E8 F7 40
212+ System (default): 81 2B 43 75 8A 22 63 21 28 D2 2D 1C 36 A1 19 19 22 AA E0 86 9A EE 6C A0 8C 52 E7 89 31 9C A3 6B
215213```
216214
217215
@@ -251,10 +249,11 @@ System (default): 37 55 6F 4F 03 53 BB 71 E8 70 C2 3D DF 85 69 57 30 CE FA 11
251249 Exception in thread "main" java.lang.UnsatisfiedLinkError:
252250 ./liboqs-java/build/liboqs-jni.so: liboqs.so.0: cannot open shared object file: No such file or directory
253251 ```
254- try setting the `LD_LIBRARY_PATH` environment variable with the installation location of the `liboqs` shared library, i.e.,
252+ On Linux, try setting the `LD_LIBRARY_PATH` environment variable with the installation location of the `liboqs` shared library, i.e.,
255253 ```
256254 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
257255 ```
256+ On macOS, the corresponding environment variable is `DYLD_LIBRARY_PATH`.
258257
259258 * If a hotspot "irrecoverable stack overflow" error is shown:
260259 ```
@@ -279,6 +278,3 @@ Contributors to the liboqs-java wrapper include:
279278
280279[KEM-overview]: ./images/KEM.png
281280[DS-overview]: ./images/digital-signature.png
282-
283- [badge-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=svg
284- [badge-circleci]: https://img.shields.io/circleci/build/github/open-quantum-safe/liboqs-java?logo=circleci
0 commit comments