The old code 265 prng = "SHA1PRNG"; 266 this.secureRandomSpi = new sun.security.provider.SecureRandom(); 267 this.provider = Providers.getSunProvider();
always works since that class is always there. Now, it's 282 prngService = Providers.getSunProvider().getService("SecureRandom", 283 "SHA1PRNG"); If someone remove that service the above would return null. Can we simply reuse the old lines? Everything else looks fine. Thanks, Max > On Jun 11, 2020, at 8:16 AM, Valerie Peng <valerie.p...@oracle.com> wrote: > > 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