Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Side by Side Diff: net/cert/internal/verify_certificate_chain.h

Issue 1890193003: Make Cast certificate verification enforce constraints specified in the trusted root certificate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_ 5 #ifndef NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_
6 #define NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_ 6 #define NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "net/base/net_export.h" 15 #include "net/base/net_export.h"
16 #include "net/cert/internal/parse_certificate.h"
17 #include "net/der/input.h"
16 18
17 namespace net { 19 namespace net {
18 20
19 namespace der { 21 namespace der {
20 class Input;
21 struct GeneralizedTime; 22 struct GeneralizedTime;
22 } 23 }
23 24
24 class SignaturePolicy; 25 class SignaturePolicy;
25 26
26 struct NET_EXPORT TrustAnchor { 27 struct NET_EXPORT TrustAnchor {
27 ~TrustAnchor(); 28 ~TrustAnchor();
28 29
29 // DER-encoded SubjectPublicKeyInfo for the trusted key. 30 // Initializes the TrustAnchor given a DER-encoded certificate. If |copy|
30 std::string spki; 31 // is true, a copy of the provided data is made. Otherwise no copy is
32 // made but the caller must ensure the pointer remains valid for the
33 // lifetime of the TrustStore.
34 bool AssignCertData(const uint8_t* data, size_t length, bool copy);
31 35
32 // DER-encoded "Name" corresponding to the key. 36 // The backing store for the certificate data in case it was copied.
33 std::string name; 37 std::string owned_cert_tlv;
38
39 // Points to the raw certificate DER (might be |owned_cert_tlv|, or might
40 // be something else).
41 der::Input cert_tlv;
42
43 ParsedCertificate cert;
44 ParsedTbsCertificate tbs;
34 }; 45 };
35 46
36 // A very simple implementation of a TrustStore, which contains mappings from 47 // A very simple implementation of a TrustStore, which contains a set of
37 // names to trusted public keys. 48 // trusted certificates.
mattm 2016/04/16 02:40:29 I thought we still wanted to allow having trust an
eroman 2016/04/18 20:43:03 I spoke with Ryan and he was of the opinion that r
38 struct NET_EXPORT TrustStore { 49 struct NET_EXPORT TrustStore {
39 TrustStore(); 50 TrustStore();
40 TrustStore(const TrustStore& other); 51 TrustStore(const TrustStore& other);
41 ~TrustStore(); 52 ~TrustStore();
42 53
54 bool AddTrustedCertificate(const uint8_t* data,
55 size_t length) WARN_UNUSED_RESULT;
56 bool AddTrustedCertificate(const base::StringPiece& data) WARN_UNUSED_RESULT;
57
58 // Same as AddTrustedCertificate(), but skips copying the certificate
59 // data. The caller MUST ensure that data pointer remains valid and is not
60 // mutated. This can be used to point to static data and avoid copying it,
61 // but shoudl otherwise be avoided.
mattm 2016/04/16 02:40:29 should
eroman 2016/04/18 20:43:03 Done.
62 bool AddTrustedCertificateWithoutCopying(const uint8_t* data,
63 size_t length) WARN_UNUSED_RESULT;
64
65 // Returns nullptr if no certificate matching |name| is in the TrustStore.
66 // Otherwise returns the DER data for the matching certificate.
67 const der::Input* FindTrustedCertificateByName(const der::Input& name) const
68 WARN_UNUSED_RESULT;
69
70 // Returns true if |cert_der| matches a certificate in the TrustStore.
71 bool IsTrustedCertificate(const der::Input& cert_der) const
72 WARN_UNUSED_RESULT;
73
43 std::vector<TrustAnchor> anchors; 74 std::vector<TrustAnchor> anchors;
44 }; 75 };
45 76
46 // VerifyCertificateChain() verifies a certificate path (chain) based on the 77 // VerifyCertificateChain() verifies a certificate path (chain) based on the
47 // rules in RFC 5280. 78 // rules in RFC 5280.
48 // 79 //
49 // WARNING: This implementation is in progress, and is currently 80 // WARNING: This implementation is in progress, and is currently
50 // incomplete. DO NOT USE IT unless its limitations are acceptable for your use. 81 // incomplete. DO NOT USE IT unless its limitations are acceptable for your use.
51 // 82 //
52 // --------- 83 // ---------
(...skipping 25 matching lines...) Expand all
78 // Returns true if the target certificate can be verified. 109 // Returns true if the target certificate can be verified.
79 NET_EXPORT bool VerifyCertificateChain(const std::vector<der::Input>& certs_der, 110 NET_EXPORT bool VerifyCertificateChain(const std::vector<der::Input>& certs_der,
80 const TrustStore& trust_store, 111 const TrustStore& trust_store,
81 const SignaturePolicy* signature_policy, 112 const SignaturePolicy* signature_policy,
82 const der::GeneralizedTime& time) 113 const der::GeneralizedTime& time)
83 WARN_UNUSED_RESULT; 114 WARN_UNUSED_RESULT;
84 115
85 } // namespace net 116 } // namespace net
86 117
87 #endif // NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_ 118 #endif // NET_CERT_INTERNAL_VERIFY_CERTIFICATE_CHAIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698