On Mon, 30 Aug 2021 14:56:29 GMT, Weijun Wang <wei...@openjdk.org> wrote:

>> src/java.base/share/classes/sun/security/ssl/CertificateMessage.java line 
>> 1047:
>> 
>>> 1045: 
>>> 1046:             Collection<String> checkedKeyTypes = new HashSet<>();
>>> 1047:             LinkedHashSet<String> allAuths = new LinkedHashSet<>();
>> 
>> I was wondering if it is necessary to use a linked hash set here.  Maybe, we 
>> can reuse the checkedKeyTypes for all checked key types, no matter it is 
>> supported or unsupported.  If a type is checked, ignore it.  Otherwise, add 
>> this type as checked and then move forward.  Then, we could use the 
>> checkedKeyTypes array list for supported key types, and avoid duplicated 
>> validation of duplicated types.  And the allAuths could be a array list for 
>> available authentications.
>> 
>> 
>> if (ss.keyAlgorithm in checkedKeyTypes) {
>>    // log: "unsupported or duplicated authentication scheme"
>>    continue;
>> }
>> 
>> checkedKeyTypes.add(ss.keyAlgorithm);
>>  ...
>> availableAuthns.add(ss.keyAlgorithm);
>
> Good suggestion.
> 
> One more thing: `checkedKeyTypes` only looks at `ss.keyAlgorithm`. I know the 
> other checks (`SignatureScheme.getPreferableAlgorithm` and 
> `X509Authentication.valueOf`) also only look at `ss.keyAlgorithm`, but are we 
> going to check for more (Ex: group name) later? In the meantime, I would 
> suggest changing the parameter type of these methods from `SignatureScheme` 
> to `String` so we know only `keyAlgorithm` is checked.

Did you mean to change hc.peerRequestedCertSignSchemes to String?  This field 
would be used for algorithm constraints and more parameters are required there.

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

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

Reply via email to