make test TEST="jdk/sun/security/ec/ed/NativeEdDSASignature.java"
JMH
测试纯 Java 实现
make test TEST="micro:NativeEdDSASignatureBench" \
MICRO="OPTIONS=-prof gc '-Djdk.sunec.enableNativeCrypto=false'"
测试 Native 实现
make test TEST="micro:NativeEdDSASignatureBench" \
MICRO="OPTIONS=-prof gc '-Djdk.sunec.enableNativeCrypto=true -Djdk.openssl.cryptoLibPath=/usr/lib/x86_64-linux-gnu/libcrypto.so.3'"
PR: EdDSA Native Implementation with OpenSSL via JNI
本 PR 完成了 issue #28 的实现,主要目标是为 EdDSA 算法引入基于 OpenSSL 的本地实现支持,并通过 JNI 集成到 JDK 中,以提升签名与验证性能。
代码改动
1. Java 层
src/jdk.crypto.ec/share/classes/sun/security/ec/NativeSunEC.javasrc/jdk.crypto.ec/share/classes/sun/security/ec/ed/EdDSASignature.java2. Native 层
src/jdk.crypto.ec/share/native/libsuneccrypto/sunec_ed.cNativeSunEC3. 测试
JTREG 测试
test/jdk/sun/security/ec/ed/NativeEdDSASignature.javaJMH 基准测试
test/micro/org/openjdk/bench/javax/crypto/full/NativeEdDSASignatureBench.java测试方法
JTREG
执行功能正确性测试:
make test TEST="jdk/sun/security/ec/ed/NativeEdDSASignature.java"JMH
测试纯 Java 实现
make test TEST="micro:NativeEdDSASignatureBench" \ MICRO="OPTIONS=-prof gc '-Djdk.sunec.enableNativeCrypto=false'"测试 Native 实现
make test TEST="micro:NativeEdDSASignatureBench" \ MICRO="OPTIONS=-prof gc '-Djdk.sunec.enableNativeCrypto=true -Djdk.openssl.cryptoLibPath=/usr/lib/x86_64-linux-gnu/libcrypto.so.3'"JMH 基准测试结果
纯 Java 实现
Native 实现(基于 OpenSSL)
EdDSA 性能对比(JMH 测试结果)
📊 从表格可以直观看出:
性能对比总结
本地实现显著降低了 GC 压力(B/op 数量从数万降至数百)
在 Ed25519 和 Ed448 两种曲线上,签名与验证性能均获得 5–10 倍提升
本地实现适用于对性能敏感的场景,可通过系统属性切换:
-Djdk.sunec.enableNativeCrypto=true-Djdk.openssl.cryptoLibPath=<libcrypto 路径>结论
本 PR 为 JDK 的 EdDSA 算法引入了 OpenSSL 的本地实现支持: