Updated webrev after incorporating Sean's feedbacks:
http://cr.openjdk.java.net/~valeriep/8246613/webrev.03/
Main changes are code refactoring in SecureRandom class and changed
Provider class to store SecureRandom services in their order of
registration instead of only the algorithm name.
Thanks,
Valerie
On 6/9/2020 4:53 PM, Valerie Peng wrote:
Hi, Sean,
On 6/9/2020 12:21 PM, Sean Mullan wrote:
Looks good, just a couple of minor comments on the test:
* test/jdk/java/security/SecureRandom/DefaultAlgo.java
75 Objects.requireNonNull(p);
Not sure why you need this line, since the test never passes null.
True, the test never passes null, this line is just to make it clear
that the provider argument should not be null as the test is not
prepared to handle null provider. It's not essential, so I removed it
per your comment.
90 validate(new SecureRandom(), pName, algos[0]);
Is there a reason why you don't call removeService for each algorithm
when testing the non-legacy provider?
The Provider.removeService(...) call is protected. So, it's not a
public API for users of Provider objects.
Thanks,
Valerie
--Sean
On 6/9/20 12:52 PM, Valerie Peng wrote:
Thanks for review~
As for the isProviderInfo() name, since I reverted the code for its
impl to pre-7092821, I changed it back to the old name as you
noticed. Sean mentioned that he also wants to take a look at this
updated webrev, so I will wait for him to do that...
Valerie
On 6/8/2020 6:11 PM, Weijun Wang wrote:
Code change looks fine to me.
I re-look at every place where legacyStrings and prngAlgorithms are
used and they are all synchronized. Last time I thought some were
not. Sorry.
Only one comment: I like the isProviderInfo() name better, but I
notice it was the old name pre-7092821.
Thanks,
Max
On Jun 9, 2020, at 6:31 AM, Valerie Peng <valerie.p...@oracle.com>
wrote:
Webrev updated:
http://cr.openjdk.java.net/~valeriep/8246613/webrev.02/
Besides addressing Max's comments, I also made
updateSecureRandomEntries(...) method private and removed the
synchronized keyword as all of its accesses are synchronized.
Thanks,
Valerie
On 6/8/2020 2:33 PM, Valerie Peng wrote:
Hi Max,
Please find comments in line.
On 6/8/2020 2:34 AM, Weijun Wang wrote:
Looks like this should work, but still find it complicated.
1. Do we need to care about thread safety when managing
legacyStrings?
Right, it's more complicated than I like as well.
As for thread safety, the legacy relevant data are all
synchronized under the current provider object, i.e. this. Is
there a particular call path not doing this? This is the same as
the pre-7092821 code.
2. Does implReplaceAll() need to set legacyChanged = true?
Correct, the removal is by accident. Thanks for catching this.
3. How about using prngAlgorithms.iterator().next() below?
1416 return prngAlgorithms.toArray(new String[0])[0];
Sure, changed.
Valerie
--Max
On Jun 6, 2020, at 11:54 AM, Valerie Peng
<valerie.p...@oracle.com> wrote:
Thanks for reviewing and sharing the feedbacks on webrev.00.
In order to support all existing calls for legacy registration
for default secure random, I have to revert some of the
JDK-7092821 changes and re-introduce the 'legacyStrings'
LinkedHashMap. Updated the regression test with removal test
for provider using legacy registrations as well. Although
removal is supported, this is still not bullet proof as things
may not work as expected if a provider registered their impl in
both ways, i.e. legacy String pair and Service, and then
remove/replace some entries later. Please comment if you really
need this scenario to be supported. Although not explicitly
documented, I think the intention is to use one or the other,
never both.
Webrev update:
http://cr.openjdk.java.net/~valeriep/8246613/webrev.01/
Thanks,
Valerie
On 6/5/2020 11:00 AM, Valerie Peng wrote:
Right, I try to keep the impl simple as I am not aware of any
property removal usage.
Oh-well, if we have to cater to the removal scenario, then
we'd have to add a List and keep track of ALL secure random
algos instead of only the FIRST one. Alright, I guess it costs
for covering all aspect. But one extra benefit of this is that
it should be easy to handle the future JDK property such as
"jdk.securerandom.disabledAlgorithms" if it were to be added.
Valerie
On 6/5/2020 7:54 AM, Weijun Wang wrote:
I don't know who in this world would want to do that, but
Prasad's concern is technically possible. I tried
'p.remove("SecureRandom.a")' in the new test, and new
SecureRandom() fails with
"java.security.NoSuchAlgorithmException: a SecureRandom not
available".
And people can also remove one entry and add it back in order
to move it to the end. One can even add new implementations
this way.
Unfortunately there is no ConcurrentLinkedHashMap.
--Max
On Jun 5, 2020, at 1:44 PM, Prasadrao Koppula
<prasadarao.kopp...@oracle.com> wrote:
Hi,
Looks good to me, one question
If first registered SecureRandom algo gets removed,
getDefaultSecureRandomAlgorithm return stale data, a refresh
required in remove?
Thanks,
Prasad.K
-----Original Message-----
From: Valerie Peng
Sent: Friday, June 5, 2020 2:52 AM
To: security-dev@openjdk.java.net
Subject: Re: [15] RFR JDK-8246613: Choose the default
SecureRandom algo
based on registration ordering
Hi, Sean,
Thanks for the review and feedback. Webrev updated:
http://cr.openjdk.java.net/~valeriep/8246613/webrev.01/
getTypeAndAlgorithm(...) was not static due to an instance
variable used by
debugging output. I have removed it and made both method
static.
I will wait for others' review comments also.
Thanks,
Valerie
On 6/4/2020 2:01 PM, Sean Mullan wrote:
On 6/4/20 3:34 PM, Valerie Peng wrote:
Hi,
Could someone help reviewing this fix? This change keep
tracks of the
first registered SecureRandom algorithm and returns it
upon the
request of SecureRandom class.
This looks good to me. I would recommend that Max or
someone else
review it as well.
Bug: https://bugs.openjdk.java.net/browse/JDK-8246613
Webrev:
http://cr.openjdk.java.net/~valeriep/8246613/webrev.00/
A couple of minor comments, feel free to fix or ignore.
* SecureRandom.java
879 // For SUN provider, we use
SunEntries.DEFF_SECURE_RANDOM_ALGO
Might as well fix the typo while you are in there:
s/DEFF/DEF/
* Provider.java
1156 private String parseSecureRandomPut(String name,
String
value) {
Could be static if you also make getTypeAndAlgorithm
static, I think.
--Sean