From 26b55337d57ccc8d806f995b1aa7c2178f411d7a Mon Sep 17 00:00:00 2001 From: igerasim Date: Mon, 10 Aug 2015 18:21:56 +0300 Subject: [PATCH] 8131291: Perfect parameter patterning Reviewed-by: mullan --- .../provider/certpath/AlgorithmChecker.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java b/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java index 4b6ff56cf..b82610114 100644 --- a/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java +++ b/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,6 +77,13 @@ final public class AlgorithmChecker extends PKIXCertPathChecker { private final static Set SIGNATURE_PRIMITIVE_SET = Collections.unmodifiableSet(EnumSet.of(CryptoPrimitive.SIGNATURE)); + private final static Set KU_PRIMITIVE_SET = + Collections.unmodifiableSet(EnumSet.of( + CryptoPrimitive.SIGNATURE, + CryptoPrimitive.KEY_ENCAPSULATION, + CryptoPrimitive.PUBLIC_KEY_ENCRYPTION, + CryptoPrimitive.KEY_AGREEMENT)); + private final static DisabledAlgorithmConstraints certPathDefaultConstraints = new DisabledAlgorithmConstraints( DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS); @@ -210,9 +217,11 @@ final public class AlgorithmChecker extends PKIXCertPathChecker { null, null, -1, PKIXReason.INVALID_KEY_USAGE); } + // Assume all key usage bits are set if key usage is not present + Set primitives = KU_PRIMITIVE_SET; + if (keyUsage != null) { - Set primitives = - EnumSet.noneOf(CryptoPrimitive.class); + primitives = EnumSet.noneOf(CryptoPrimitive.class); if (keyUsage[0] || keyUsage[1] || keyUsage[5] || keyUsage[6]) { // keyUsage[0]: KeyUsage.digitalSignature @@ -237,15 +246,19 @@ final public class AlgorithmChecker extends PKIXCertPathChecker { // KeyUsage.encipherOnly and KeyUsage.decipherOnly are // undefined in the absence of the keyAgreement bit. - if (!primitives.isEmpty()) { - if (!constraints.permits(primitives, currPubKey)) { - throw new CertPathValidatorException( - "algorithm constraints check failed", - null, null, -1, BasicReason.ALGORITHM_CONSTRAINED); - } + if (primitives.isEmpty()) { + throw new CertPathValidatorException( + "incorrect KeyUsage extension", + null, null, -1, PKIXReason.INVALID_KEY_USAGE); } } + if (!constraints.permits(primitives, currPubKey)) { + throw new CertPathValidatorException( + "algorithm constraints check failed", + null, null, -1, BasicReason.ALGORITHM_CONSTRAINED); + } + // Check with previous cert for signature algorithm and public key if (prevPubKey != null) { if (currSigAlg != null) { -- GitLab