On Tue, 12 Apr 2022 13:38:17 GMT, Claes Redestad <[email protected]> wrote:
>> During TLS handshake, hundreds of constraints are evaluated to determine
>> which cipher suites are usable. Most of the evaluations are performed using
>> `HandshakeContext#algorithmConstraints` object. By default that object
>> contains a `SSLAlgorithmConstraints` instance wrapping another
>> `SSLAlgorithmConstraints` instance. As a result the constraints defined in
>> `SSLAlgorithmConstraints` are evaluated twice.
>>
>> This PR improves the default case; if the user-specified constraints are
>> left at defaults, we use a single `SSLAlgorithmConstraints` instance, and
>> avoid duplicate checks.
>
> src/java.base/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java
> line 73:
>
>> 71:
>> 72: static AlgorithmConstraints wrap(AlgorithmConstraints
>> userSpecifiedConstraints) {
>> 73: if (userSpecifiedConstraints == DEFAULT) {
>
> Just thinking out loud: It seems all this does when
> `userSpecifiedConstraints` is a `SSLAlgorithmConstraints` is force the
> `enableX509..` flag to `true`. So in addition to the obvious thing for
> `DEFAULT`, you could also return `DEFAULT` for `DEFAULT_SSL_ONLY`. Or more
> generally: if `userSpecifiedConstraints instanceof SSLAlgorithmConstraints`
> then you could either return `userSpecifiedConstraints` as-is if
> `enabledX509DisabledAlgConstraints` is `true` or else return a clone of it
> with `enabledX509DisabledAlgConstraints` set to `true`.
While this is technically true, `SSLAlgorithmConstraints` is an internal class,
so it's very unlikely that we will ever get `SSLAlgorithmConstraints` other
than `DEFAULT` here.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8199