RFR[11] JDK-8206171: Signature#getParameters for RSASSA-PSS throws ProviderException when not initialized

Bradford Wetmore bradford.wetmore at oracle.com
Tue Jul 24 23:59:30 UTC 2018


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.peng at 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.peng at 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.peng at 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.peng at 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.peng at 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.peng at 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.peng at 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
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
> 



More information about the security-dev mailing list