RFR: 8294248: Use less limbs for P256 in EC implementation

Xue-Lei Andrew Fan xuelei at openjdk.org
Thu Sep 22 21:57:18 UTC 2022


Hi,

Please review this performance improvement for Secp256R1 implementation in OpenJDK.  With this update, there is an about 20% performance improvement for Secp256R1 key generation and signature.

Basically, 256 bits EC curves could use 9 integer limbs for the computation.  The current implementation use 10 limbs instead.  By reducing the number of limbs, the implementation could benefit from less integer computation (add/sub/multiply/square/inverse/mod/pow, etc), and thus improve the performance.

Here are the benchmark numbers without the patch:

Benchmark         (messageLength)   Mode  Cnt  Score   Error   Units
Signatures.sign               64  thrpt   15  1.414 ± 0.022  ops/ms
Signatures.sign              512  thrpt   15  1.418 ± 0.004  ops/ms
Signatures.sign             2048  thrpt   15  1.419 ± 0.005  ops/ms
Signatures.sign            16384  thrpt   15  1.395 ± 0.003  ops/ms

KeyGenerators.keyPairGen          thrpt   15  1.475 ± 0.043  ops/ms


And here are the numbers with the patch applied:

Benchmark         (messageLength)   Mode  Cnt  Score   Error   Units
ECSignature.sign               64  thrpt   15  1.719 ± 0.010  ops/ms
ECSignature.sign              512  thrpt   15  1.704 ± 0.012  ops/ms
ECSignature.sign             2048  thrpt   15  1.699 ± 0.018  ops/ms
ECSignature.sign            16384  thrpt   15  1.681 ± 0.006  ops/ms

KeyGenerators.keyPairGen           thrpt   15  1.881 ± 0.008  ops/ms


Thanks,
Xuelei

-------------

Commit messages:
 - remove tailing white spaces
 - 8294248: Use less limbs for P256 in EC implementation

Changes: https://git.openjdk.org/jdk/pull/10398/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10398&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8294248
  Stats: 129 lines in 3 files changed: 123 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/10398.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10398/head:pull/10398

PR: https://git.openjdk.org/jdk/pull/10398


More information about the security-dev mailing list