On Tue, 19 Oct 2021 20:32:21 GMT, Sean Mullan <mul...@openjdk.org> wrote:

>> This fix improves the exception message to better indicate when the key (and 
>> not the signature algorithm) is restricted. This change also includes a few 
>> other improvements:
>> 
>> - The constraints checking in `AlgorithmChecker.check()` has been improved. 
>> If the `AlgorithmConstraints` are an instance of 
>> `DisabledAlgorithmConstraints`, the internal `permits` methods are always 
>> called; otherwise the public `permits` methods are called. This makes the 
>> code easier to understand, and fixes at least one case where duplicate 
>> checks were being done.
>> 
>> - The above change caused some of the exception messages to be slightly 
>> different, so some tests that checked the error messages had to be updated 
>> to reflect that.
>> 
>> - AlgorithmDecomposer now stores the canonical algorithm names in a Map, 
>> which fixed a bug where "RSASSA-PSS" was not being restricted properly.
>
> Sean Mullan has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   - Changed names of AlgorithmDecomposer.canonicalName and 
> decomposeOneHashName
>   methods.
>   - Changed other code in AlgorithmDecomposer to use DECOMPOSED_DIGEST_NAMES
>   Map instead of hardcoding algorithm names.
>   - Changed AlgorithmChecker.trySetTrustAnchor to set trustedPubKey field so 
> that
>   constraints on the key algorithm and size are checked in the check() method 
> if
>   the constraints are an instanceof DisabledAlgorithmConstraints.

src/java.base/share/classes/sun/security/util/AlgorithmDecomposer.java line 106:

> 104:         // "SHA-256" and "SHA256" to make the right constraint checking.
> 105: 
> 106:         for (Map.Entry<String, String> e : 
> DECOMPOSED_DIGEST_NAMES.entrySet()) {

If you're going to change this code, you can save me a PR if you surround this 
by "if (algorithm.contains("SHA") {  ...  }"
Its a perf change to eliminate the unnecessary map lookups when SHA isn't in 
the algorithm string

src/java.base/share/classes/sun/security/util/AlgorithmDecomposer.java line 158:

> 156:         Set<String> elements = decomposeImpl(algorithm);
> 157: 
> 158:         for (Map.Entry<String, String> e : 
> DECOMPOSED_DIGEST_NAMES.entrySet()) {

Same "if (algorithm.contains("SHA") { ... }" comment as above

src/java.base/share/classes/sun/security/util/AlgorithmDecomposer.java line 159:

> 157: 
> 158:         for (Map.Entry<String, String> e : 
> DECOMPOSED_DIGEST_NAMES.entrySet()) {
> 159:             hasLoop(elements, e.getKey(), e.getValue());

I think it's worth merging the contents of hasLoop() into this for loop.  This 
is the only method calling hasLoop() and the extra method calls are not useful. 
 Your addition DECOMPOSED_DIGEST_NAMES makes a merger a more reasonable 
solution now than before.

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

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

Reply via email to