On Mon, 7 Feb 2022 22:56:45 GMT, Xue-Lei Andrew Fan <xue...@openjdk.org> wrote:

>> Sorry, you will have to bear with me as I am still not sure how it works - I 
>> want to know who wins, the API or the properties, if both are set and I 
>> can't find where it answers that above. Maybe I need to read the code. Are 
>> you maybe saying that this method returns the value of the system properties 
>> if they are set?
>
>> "If set, these properties will override the signature schemes returned by 
>> this method."
> 
> If I understand your ideas correctly, the behavior should be "the returned 
> value of this method will override these properties", except the case if the 
> returned value is null.
> 
> But let me trying  if I could understand the spec by myself.
> 
> For the getSignatureSchemes() method's spec:
> 
>      * If the returned array is {@code null}, then the underlying
>      * provider-specific default signature schemes will be used over the
>      * SSL/TLS/DTLS connections.
> 
> With the spec above, the API getSignatureSchemes() returns null, and the 
> provider-specific default signature schemes will be used for the connection.  
> As the properties could be used to customize the default signature schemes, 
> the properties wins in this situation for your question.  However, I would 
> like to express that the default signature schemes win (See bellow about why 
> I don't want to use the properties).
> 
> 
>      * If the returned array is empty (zero-length), then the signature scheme
>      * negotiation mechanism is turned off for SSL/TLS/DTLS protocols, and
>      * the connections may not be able to be established if the negotiation
>      * mechanism is required by a certain SSL/TLS/DTLS protocol.
> 
> With the spec above, the API getSignatureSchemes() returns empty array, and 
> no signature schemes will be used.  The API wins, the default signature 
> schemes are not used.
> 
> 
>      * <p>
>      * If the returned array is not {@code null} or empty (zero-length),
>      * then the signature schemes in the returned array will be used over
>      * the SSL/TLS/DTLS connections.
> 
> With the spec above, the API getSignatureSchemes() returns non-null and 
> non-empty, and the returned array will be used.  The API wins, the default 
> signature schemes are not used.
> 
> 
>      * @implNote
>      * Note that the underlying provider may define the default signature
>      * schemes for each SSL/TLS/DTLS connection.  Applications may also use
>      * the {@systemProperty jdk.tls.client.SignatureSchemes} and/or
>      * {@systemProperty jdk.tls.server.SignatureSchemes} system properties to
>      * customize the provider-specific default signature schemes.
> 
> With the spec above, I could understand what are the default signature 
> schemes, and how they could be customized with properties.
> 
> So back to my question above, why I don't want to use the properties, and use 
> the default signature schemes instead?  We need to take care of three things: 
> the properties, the API set values and the provider default values.  If I use 
> the properties values, I would have to describe the provider default values 
> as well.  As the properties values are used to set the provider default 
> values, it should be sufficient to use the provider default values for the 
> description in this context.
> 
> What if both the properties and the APIs are set?  The properties are used to 
> set the provider default values, and the properties will change the  provider 
> default values.  So we only need to consider the provider default values and 
> the API, then I think we can refer to the 3 spec sections before the 
> @implNote tag above.  Simply, if both set, the API wins.
> 
> Similar to the set method.
> 
> Please let me know if you are on the same page as well.  I am open to make 
> more changes if the spec is still not clear.

> Are you maybe saying that this method returns the value of the system 
> properties if they are set?

The return value of this method depends on the following specs:

     * If the {@link #setSignatureSchemes} method has not been called, this
     * method should return the default signature schemes for connection
     * populated objects, or {@code null} for pre-populated objects.
``` 

If the setSignatureSchemes() method has been called, the get method will return 
the set values.  I may miss this spec.  But I think it is a common sense that 
the getter method returns the values set with setter method.  Let me know if 
you would like to have an explicit clarification in the spec.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7252

Reply via email to