On Wed, 31 Mar 2021 21:47:24 GMT, Anthony Scarpino <ascarp...@openjdk.org> wrote:
> Hi, > > I need a review of the locking change to the RSA blinding code. The problem > was reported that multithreaded performance suffered because there was one > global lock on the many blindings operation. The change reduces locking by > using a ConcurrentLinkedQueue to store the different BlindingParameters that > other threads maybe using. The queue size is limited to prevent sudden > surges in stored BlindingParameters and a WeakHashMap is still used so the > objects can be freed when no longer used. Performance doubles under high > load. > > thanks > > Tony src/java.base/share/classes/sun/security/rsa/RSACore.java line 414: > 412: if (!u.equals(BigInteger.ZERO) && > 413: !v.equals(BigInteger.ZERO)) { > 414: Is it ever possible that u could be equal to BigInteger.ZERO? The only place I see a new BlindingRandomPair created is within the scope of the BlindingParameters object, and it has a guard in its constructor that resets u to BigInteger.ONE if u is zero. Or is this check to guard against the reset of u/v down around line 416-419 (recalculated when reusable)? ------------- PR: https://git.openjdk.java.net/jdk/pull/3296