Something related. Cipher has a similar init(..,params) and getParameters() structure and the spec is also similar.
* <p>The returned parameters may be the same that were used to initialize * this cipher, or may contain a combination of default and random * parameter values used by the underlying cipher implementation if this * cipher requires algorithm parameters but was not initialized with any. However, one can supply an incomplete parameters object in init() and getParameters() will fill in default/random values to make it complete. For example, in PBE-based Cipher, one can only include salt and iteration count in the init params, and init() will add in a random IV, and the IV can be retrieved with getParameters(). Is this something we need to clarify? Thanks Max > On Jul 25, 2018, at 7:59 AM, Bradford Wetmore <bradford.wetm...@oracle.com> > wrote: > > Returning to this briefly, looks good to me too. > > Brad > > > > On 7/19/2018 6:23 PM, Valerie Peng wrote: >> Thanks Max and Sean for the review and suggestions. I have updated the >> webrev accordingly and finalized CSR. >> Webrev: http://cr.openjdk.java.net/~valeriep/8206171/webrev.04/ >> CSR: https://bugs.openjdk.java.net/browse/JDK-8206864 >> Valerie >> On 7/19/2018 3:13 PM, Wang Weijun wrote: >>> >>>> 在 2018年7月20日,05:18,Valerie Peng <valerie.p...@oracle.com> 写道: >>>> >>>> Hi Sean, >>>> >>>> Thanks for the suggestion, I like it. >>> Me too. >>> >>>> Max, any objection or concern before I update the webrev and CSR? >>> No. >>> >>> Thanks >>> Max >>> >>>> Valerie >>>> >>>> >>>>> On 7/19/2018 7:28 AM, Sean Mullan wrote: >>>>> Hi Valerie, Max - >>>>> >>>>> I took a fresh look at this issue this morning. I think we are getting >>>>> bogged down by trying to adjust within the current wording, which is >>>>> somewhat awkward and hard to understand. So, I think it might be better >>>>> to break up the wording into multiple sentences. Here's a cut at the >>>>> rewording: >>>>> >>>>> /** >>>>> * Returns the parameters used with this signature object. >>>>> * >>>>> * <p> If this signature has been previously initialized with parameters >>>>> * (by calling the {@code setParameter} method), this method returns >>>>> * the same parameters. If this signature has not been initialized with >>>>> * parameters, this method may return a combination of default and >>>>> * randomly generated parameter values if the underlying >>>>> * signature implementation supports it and can successfully generate >>>>> * them. Otherwise, {@code null} is returned. >>>>> * >>>>> * @return the parameters used with this signature, or {@code null} >>>>> */ >>>>> >>>>> In the first sentence of the 2nd paragraph above, I wanted to first list >>>>> the case where the signature is initialized with parameters, which is the >>>>> most clear-cut case of what the behavior will be. Then I described the >>>>> case where an implementation may return default/generated parameters -- >>>>> and this is clearly marked "may" since it is optional. All other cases >>>>> other than those two always return null, so I think this makes it easier >>>>> to understand. >>>>> >>>>> --Sean >>>>> >>>>>> On 7/18/18 1:29 PM, Valerie Peng wrote: >>>>>> Sean, >>>>>> >>>>>> Where do you think that we should add the part about "null must be >>>>>> returned ..." paragraph? At the end of first or second paragraph? >>>>>> >>>>>> I will go with majority. >>>>>> >>>>>> Valerie >>>>>> >>>>>>> On 7/17/2018 8:38 PM, Weijun Wang wrote: >>>>>>> Is it better to append the new lines to the 2nd paragraph? >>>>>>> >>>>>>> Thanks >>>>>>> Max >>>>>>> >>>>>>>> On Jul 18, 2018, at 9:46 AM, Valerie Peng <valerie.p...@oracle.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> Ok, let's use "must" then. I have also added the part about default >>>>>>>> parameters. >>>>>>>> Hope that all is clear now. >>>>>>>> >>>>>>>> Latest webrev: http://cr.openjdk.java.net/~valeriep/8206171/webrev.03/ >>>>>>>> Latest CSR: https://bugs.openjdk.java.net/browse/JDK-8206864 >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Valerie >>>>>>>> >>>>>>>> On 7/17/2018 5:50 PM, Weijun Wang wrote: >>>>>>>>>> On Jul 18, 2018, at 8:23 AM, Valerie Peng <valerie.p...@oracle.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Hi Max, >>>>>>>>>> >>>>>>>>>> Thanks for the suggestions. Please find comments inline. >>>>>>>>>> >>>>>>>>>>> On 7/16/2018 7:38 PM, Weijun Wang wrote: >>>>>>>>>>> CSR at https://bugs.openjdk.java.net/browse/JDK-8206864. >>>>>>>>>>> >>>>>>>>>>> - At the end of the 1st paragraph, you have now >>>>>>>>>>> >>>>>>>>>>>> However, for signature algorithm such as "RSASSA-PSS", it >>>>>>>>>>>> requires parameters and the one used for signing must be supplied >>>>>>>>>>>> for verification to succeed. It may be better to return null >>>>>>>>>>>> instead of returning provider-specific default parameters. >>>>>>>>>>> I suggest we don't talk about the reason (params must be the same >>>>>>>>>>> for signing and verification), we can just say something like "If >>>>>>>>>>> there is no provider-specific default parameters, this method >>>>>>>>>>> should return null before user sets one". >>>>>>>>>> Alright, I initially didn't put down the reason. But since Brad >>>>>>>>>> asked about it, I add it to the CSR in case Joe raise the same >>>>>>>>>> question. I will update the CSR per your suggestion. >>>>>>>>>>> - null may be returned >>>>>>>>>>> >>>>>>>>>>> How about "{@code null} must be returned"? >>>>>>>>>> How about "should"? Is there a guideline on when to use >>>>>>>>>> "may/should/must"? Anyone knows? >>>>>>>>> Even if there were guidelines on this for Java, I think we should >>>>>>>>> just stick to https://tools.ietf.org/html/rfc2119, except that the >>>>>>>>> capitalization is not necessary. >>>>>>>>> >>>>>>>>> "Must" is precise here. >>>>>>>>> >>>>>>>>>> I thought must is mostly used in mandating input arguments must not >>>>>>>>>> be null. But don't recall it being used much for return values. >>>>>>>>> "must return" appears 39 times in java/ and "should return" 19 >>>>>>>>> (simple grep, no line break). >>>>>>>>> >>>>>>>>> --Max >>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Valerie >>>>>>>>>> >>>>>>>>>>> Everything else looks fine. >>>>>>>>>>> >>>>>>>>>>> Thanks >>>>>>>>>>> Max >>>>>>>>>>> >>>>>>>>>>>> On Jul 17, 2018, at 9:46 AM, Valerie Peng >>>>>>>>>>>> <valerie.p...@oracle.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi Max, >>>>>>>>>>>> >>>>>>>>>>>> Good catch on the SignatureSpi class and SunMSCAPI provider, I >>>>>>>>>>>> will include them. >>>>>>>>>>>> >>>>>>>>>>>> As for the part about "randomly generated", I am leaning toward >>>>>>>>>>>> not having it as I don't see a value of specifying this. >>>>>>>>>>>> >>>>>>>>>>>> Webrev and CSR has been updated. >>>>>>>>>>>> >>>>>>>>>>>> New webrev: http://cr.openjdk.java.net/~valeriep/8206171/webrev.02/ >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Valerie >>>>>>>>>>>> >>>>>>>>>>>>> On 7/16/2018 4:29 PM, Weijun Wang wrote: >>>>>>>>>>>>> Valerie >>>>>>>>>>>>> >>>>>>>>>>>>> Would you like to retain the word "randomly generated" somewhere? >>>>>>>>>>>>> >>>>>>>>>>>>> Also, the SignatureSpi class needs to be updated in the same way. >>>>>>>>>>>>> >>>>>>>>>>>>> Can you also update the implementation in the MSCAPI Signature >>>>>>>>>>>>> object? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks >>>>>>>>>>>>> Max >>>>>>>>>>>>> >>>>>>>>>>>>>> On Jul 17, 2018, at 6:16 AM, Valerie Peng >>>>>>>>>>>>>> <valerie.p...@oracle.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> No issues found and it seems ok to return null if no parameters >>>>>>>>>>>>>> is set. Thus, I have updated the webrev and CSR accordingly. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8206171 >>>>>>>>>>>>>> Webrev: http://cr.openjdk.java.net/~valeriep/8206171/webrev.01/ >>>>>>>>>>>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8206864 >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>> Valerie >>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 7/13/2018 11:05 AM, Valerie Peng wrote: >>>>>>>>>>>>>>> Hmm, I like the idea of expanding null to cover both cases. >>>>>>>>>>>>>>> I will explore it more and see. >>>>>>>>>>>>>>> Thanks for the feedback, >>>>>>>>>>>>>>> Valerie >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On 7/13/2018 6:56 AM, Sean Mullan wrote: >>>>>>>>>>>>>>>> On 7/12/18 10:23 PM, Weijun Wang wrote: >>>>>>>>>>>>>>>>>> On Jul 13, 2018, at 10:01 AM, Valerie Peng >>>>>>>>>>>>>>>>>> <valerie.p...@oracle.com> wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi Max, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> The javadoc is for Signature.getParameters(), so null can be >>>>>>>>>>>>>>>>>> returned for signature algorithms which do not use >>>>>>>>>>>>>>>>>> parameters, e.g. SHA256withDSA. As Signature class covers >>>>>>>>>>>>>>>>>> all signature algorithms, I am not sure about mentioning >>>>>>>>>>>>>>>>>> specific algorithm names as it may be lengthy and even >>>>>>>>>>>>>>>>>> misleading unless we list out all applicable algorithms. >>>>>>>>>>>>>>>>> Sure. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> The part of "default and randomly generated" is inherited >>>>>>>>>>>>>>>>>> from existing javadoc. I think "default" in the >>>>>>>>>>>>>>>>>> aforementioned sentence means "hardcoded values". For >>>>>>>>>>>>>>>>>> example, something like salt length will likely have a fixed >>>>>>>>>>>>>>>>>> default value. Since we have no control over 3rd party >>>>>>>>>>>>>>>>>> providers, I think we may have to keep this for backward >>>>>>>>>>>>>>>>>> compatibility reason. For RSASSA-PSS sig algorithm, it >>>>>>>>>>>>>>>>>> errors out if the required parameter is not given. Thus, I >>>>>>>>>>>>>>>>>> added the sentence "If there are no provider-specific >>>>>>>>>>>>>>>>>> default values, the underlying signature implementation may >>>>>>>>>>>>>>>>>> also fail". >>>>>>>>>>>>>>>>> OK, now I understand "a combination of default and randomly >>>>>>>>>>>>>>>>> generated" means some part of the parameter is hardcoded and >>>>>>>>>>>>>>>>> some is random. Anyway, let's keep it unchanged. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Then, how about simply "If there are no provider-specific >>>>>>>>>>>>>>>>> values" which covers both hardcoded and random values? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> "the underlying signature implementation may also fail" is >>>>>>>>>>>>>>>>> still not clear to me. If I had not read the CSR I would >>>>>>>>>>>>>>>>> thought an exception will be thrown when update/sign is >>>>>>>>>>>>>>>>> called. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> As for @throws, I debated about it. The main reason for not >>>>>>>>>>>>>>>>>> adding one is consistency. Many (or should I say most) >>>>>>>>>>>>>>>>>> security classes do not have @throws for ProviderException. >>>>>>>>>>>>>>>>>> If we were to add @throws ProviderException here, we should >>>>>>>>>>>>>>>>>> do it across the board. Besides, it is recommended to NOT >>>>>>>>>>>>>>>>>> document runtime exceptions which callers are not prepared >>>>>>>>>>>>>>>>>> to handle. >>>>>>>>>>>>>>>>> I assume other getParameters() had not added it is because it >>>>>>>>>>>>>>>>> happened they can return one. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> While people does not catch runtime exceptions but my >>>>>>>>>>>>>>>>> understanding is that if you mentioned "fail" in the spec >>>>>>>>>>>>>>>>> maybe it's better to add a @throws for it. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> For example, @throws SecurityException for File/Files >>>>>>>>>>>>>>>>> operations. >>>>>>>>>>>>>>>> Thinking more about this, I would be more inclined to >>>>>>>>>>>>>>>> recommend that you change the meaning of null as the return >>>>>>>>>>>>>>>> value to cover both cases: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> @return the parameters used with this signature, or null if >>>>>>>>>>>>>>>> this signature does not use any parameters or does not support >>>>>>>>>>>>>>>> default or randomly generated parameter values >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I don't think it is critical to make a distinction between >>>>>>>>>>>>>>>> these 2 cases, because if the programmer doesn't initialize it >>>>>>>>>>>>>>>> with parameters it will get a SignatureException anyway when >>>>>>>>>>>>>>>> it tries to call sign or verify. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> It's not perfect, but probably the best you can do working >>>>>>>>>>>>>>>> within the constraints of that API and minimizing >>>>>>>>>>>>>>>> compatibility risk. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> --Sean >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>>> Max >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>> Valerie >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On 7/10/2018 7:16 PM, Weijun Wang wrote: >>>>>>>>>>>>>>>>>>> Hi Valerie >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> About "it *may* return", do you mean it could also return >>>>>>>>>>>>>>>>>>> null? My understanding is no. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Is it better to clarify when the implementation "may also >>>>>>>>>>>>>>>>>>> fail"? From the CSR, it's this method. Can you add a >>>>>>>>>>>>>>>>>>> @throws spec to this method then? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Also, I am a little confused by "default and randomly >>>>>>>>>>>>>>>>>>> generated". Does this actually mean "default (might be >>>>>>>>>>>>>>>>>>> randomly generated)"? The "it may" sentence mentions >>>>>>>>>>>>>>>>>>> "default and randomly generated" but the "if there" only >>>>>>>>>>>>>>>>>>> says "default", which sounds like the the "randomly >>>>>>>>>>>>>>>>>>> generated" case could be different. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>>>>> Max >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On Jul 11, 2018, at 5:12 AM, Valerie Peng >>>>>>>>>>>>>>>>>>>> <valerie.p...@oracle.com> wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hi Brad, >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Would you have time to review the fix for JDK-8206171: >>>>>>>>>>>>>>>>>>>> Signature#getParameters for RSASSA-PSS throws >>>>>>>>>>>>>>>>>>>> ProviderException when not initialized? >>>>>>>>>>>>>>>>>>>> No source code changes, but just updating javadoc to >>>>>>>>>>>>>>>>>>>> mention the possible failure case. >>>>>>>>>>>>>>>>>>>> Otherwise, JCK team expects a parameter object or null >>>>>>>>>>>>>>>>>>>> being returned. >>>>>>>>>>>>>>>>>>>> I filed a CSR to track the javadoc clarification. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8206171 >>>>>>>>>>>>>>>>>>>> Webrev: >>>>>>>>>>>>>>>>>>>> http://cr.openjdk.java.net/~valeriep/8206171/webrev.00/ >>>>>>>>>>>>>>>>>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8206864 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>> Valerie >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>