On Fri, 7 Oct 2022 21:11:39 GMT, Daniel Jeliński <djelin...@openjdk.org> wrote:
> This patch rewrites some BigInteger and curve point operations used in EC > calculations: > - coefficient * 2^power is equivalent to coefficient << power > - number mod 2^n is equivalent to number & (2^n-1) > - pair of IntegerModuloP operations: > t2 = t1+t1 > t1 = t1+t2 > is equivalent to t1=t1*3, which is now implemented more efficiently. > > Benchmarked the code using not-yet-merged benchmark from #10544. Results on > x64 before: > > Benchmark (messageLength) Mode Cnt Score Error Units > Signatures.sign 64 thrpt 15 1578.907 ± 1.522 ops/s > > After: > > Benchmark (messageLength) Mode Cnt Score Error Units > Signatures.sign 64 thrpt 15 1679.495 ± 3.883 ops/s > > Greatest part of the improvement is related to ECOperations changes; > BigInteger modifications provide only marginal gains (1584 ops/s without > ECOperations changes). > > Tier1-3 tests continue to pass. src/java.base/share/classes/sun/security/provider/DSAParameterGenerator.java line 240: > 238: W = W.add(V[i].shiftLeft(i * outLen)); > 239: } > 240: W = W.add((V[n].mod(BigInteger.TWO.pow(b))) Did you want to update the "BigInteger.TWO.pow(b)" as well? src/java.base/share/classes/sun/security/util/math/intpoly/IntegerPolynomial.java line 332: > 330: > 331: protected void setLimbsValuePositive(BigInteger v, long[] limbs) { > 332: assert bitsPerLimb < 32; I may have this assert in the constructors as it is a final field. ------------- PR: https://git.openjdk.org/jdk/pull/10614