On Wed, 19 Feb 2025 13:26:49 GMT, Artur Barashev <abaras...@openjdk.org> wrote:

>> Currently when a signature scheme constraint is specified with 
>> "jdk.tls.disabledAlgorithms" property we don't differentiate between 
>> signatures used to sign a TLS handshake exchange and the signatures used in 
>> TLS certificates:
>> https://datatracker.ietf.org/doc/html/rfc8446#section-4.2.3
>
> Artur Barashev has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Fix typo in java.security documentation

src/java.base/share/classes/sun/security/ssl/SignatureScheme.java line 223:

> 221:     // Handshake signature scope
> 222:     public static final Set<SSLCryptoScope> HANDSHAKE_SCOPE =
> 223:             
> Collections.unmodifiableSet(EnumSet.of(SSLCryptoScope.HANDSHAKE));

I think you get the same with `Set.of(SSLCryptoScope.HANDSHAKE)`

src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 
line 220:

> 218: 
> 219:     // Checks if algorithm is disabled for the given TLS scopes.
> 220:     public boolean permits(String algorithm, Set<String> scopes) {

Is there a reason you decided to have the caller make it into a `Set<String>` 
instead of passing SSLCryptoScope down?

src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 
line 978:

> 976:     }
> 977: 
> 978:     private boolean cachedCheckAlgorithm(

The only reason you need `scopes` here is because of `checkAlgorithmTlsScopes`, 
which I believe can go away.  If so, then you can just pass a modified 
algorithm+scopes value from `permit(algorithm, Set<String>)` as all the other 
calls to this caching method have scopes as `null`.

I still have to think if `scopes` as part of the `cacheKey` can be avoided.

src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 
line 1042:

> 1040:     }
> 1041: 
> 1042:     private boolean checkAlgorithmTlsScopes(

If you're able to use `algorithmConstraints` with `UsageConstraint`, you won't 
need this scopes-specific method

src/java.base/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 
line 1064:

> 1062:     }
> 1063: 
> 1064:     private Map<String, Set<String>> getDisabledAlgorithmScopes() {

I don't think this new Map is necessary.  `algorithmConstraints` would already 
contain this as a `UsageConstraint` with the algorithm as the key. 

I think if there was a UsageConstraint.permits(Set<SSLCryptoScopes>) you could 
have a few benefits. First, pushing the conversion from SSLCryptoScope enums to 
String would be more efficient as no constraint, it would cause no conversion.
Secondly, you could disregard a UsageConstraint that had a non-null 
`nextConstraint`, that would help your previous concerns about &
It also unifies all `usage` under one class.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23681#discussion_r1966676283
PR Review Comment: https://git.openjdk.org/jdk/pull/23681#discussion_r1966652176
PR Review Comment: https://git.openjdk.org/jdk/pull/23681#discussion_r1966668087
PR Review Comment: https://git.openjdk.org/jdk/pull/23681#discussion_r1966667670
PR Review Comment: https://git.openjdk.org/jdk/pull/23681#discussion_r1966650043

Reply via email to