| Index: net/cert/internal/verify_certificate_chain.h
|
| diff --git a/net/cert/internal/verify_certificate_chain.h b/net/cert/internal/verify_certificate_chain.h
|
| index e77c6fe1ed4cd1b0b2b3c64a3a52d73bc4052f93..fa83584177e358f97a8df98c28cee0152f9b43b2 100644
|
| --- a/net/cert/internal/verify_certificate_chain.h
|
| +++ b/net/cert/internal/verify_certificate_chain.h
|
| @@ -21,7 +21,7 @@ struct GeneralizedTime;
|
| }
|
|
|
| class SignaturePolicy;
|
| -class TrustAnchor;
|
| +struct CertificateTrust;
|
|
|
| // The key purpose (extended key usage) to check for during verification.
|
| enum class KeyPurpose {
|
| @@ -58,15 +58,19 @@ enum class KeyPurpose {
|
| //
|
| // cert_chain:
|
| // A non-empty chain of N DER-encoded certificates, listed in the
|
| -// "forward" direction.
|
| +// "forward" direction. The first certificate is the target certificate to
|
| +// verify, and the last certificate has trustedness given by
|
| +// |last_cert_trust|.
|
| //
|
| // * cert_chain[0] is the target certificate to verify.
|
| // * cert_chain[i+1] holds the certificate that issued cert_chain[i].
|
| -// * cert_chain[N-1] must be issued by the trust anchor.
|
| +// * cert_chain[N-1] the root certificate
|
| //
|
| -// trust_anchor:
|
| -// Contains the trust anchor (root) used to verify the chain. Must be
|
| -// non-null.
|
| +// last_cert_trust:
|
| +// Trustedness of certs.back(). The trustedness of certs.back() MUST BE
|
| +// decided by the caller -- this function takes it purely as an input.
|
| +// Moreover, the CertificateTrust can be used to specify trust anchor
|
| +// constraints [1]
|
| //
|
| // signature_policy:
|
| // The policy to use when verifying signatures (what hash algorithms are
|
| @@ -81,17 +85,32 @@ enum class KeyPurpose {
|
| // ---------
|
| // Outputs
|
| // ---------
|
| -//
|
| -// Returns true if the target certificate can be verified.
|
| -// TODO(eroman): This return value is redundant with the |errors| parameter.
|
| -//
|
| // errors:
|
| // Must be non-null. The set of errors/warnings encountered while
|
| // validating the path are appended to this structure. If verification
|
| -// failed, then there is guaranteed to be at least 1 error written to
|
| -// |errors|.
|
| -NET_EXPORT bool VerifyCertificateChain(const ParsedCertificateList& certs,
|
| - const TrustAnchor* trust_anchor,
|
| +// failed, then there is guaranteed to be at least 1 high severity error
|
| +// written to |errors|.
|
| +//
|
| +// [1] Conceptually VerifyCertificateChain() sets RFC 5937's
|
| +// "enforceTrustAnchorConstraints" to true. And one specifies whether to
|
| +// interpret a root certificate as having trust anchor constraints through the
|
| +// |last_cert_trust| parameter. The constraints are just a subset of the
|
| +// extensions present in the certificate:
|
| +//
|
| +// * Signature: No
|
| +// * Validity (expiration): No
|
| +// * Key usage: No
|
| +// * Extended key usage: Yes (not part of RFC 5937)
|
| +// * Basic constraints: Yes, but only the pathlen (CA=false is accepted)
|
| +// * Name constraints: Yes
|
| +// * Certificate policies: Not currently, TODO(crbug.com/634453)
|
| +// * inhibitAnyPolicy: Not currently, TODO(crbug.com/634453)
|
| +// * PolicyConstraints: Not currently, TODO(crbug.com/634452)
|
| +//
|
| +// The presence of any other unrecognized extension marked as critical fails
|
| +// validation.
|
| +NET_EXPORT void VerifyCertificateChain(const ParsedCertificateList& certs,
|
| + const CertificateTrust& last_cert_trust,
|
| const SignaturePolicy* signature_policy,
|
| const der::GeneralizedTime& time,
|
| KeyPurpose required_key_purpose,
|
|
|