xref: /aosp_15_r20/external/cronet/net/cert/ev_root_ca_metadata_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/cert/ev_root_ca_metadata.h"
6 
7 #include "build/build_config.h"
8 #include "net/base/hash_value.h"
9 #include "net/test/cert_test_util.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/boringssl/src/pki/input.h"
12 
13 namespace net {
14 
15 namespace {
16 
17 #if defined(PLATFORM_USES_CHROMIUM_EV_METADATA)
18 const char kFakePolicyStr[] = "2.16.840.1.42";
19 
20 // DER OID values (no tag or length).
21 const uint8_t kFakePolicy[] = {0x60, 0x86, 0x48, 0x01, 0x2a};
22 const uint8_t kCabEvPolicy[] = {0x67, 0x81, 0x0c, 0x01, 0x01};
23 
24 const SHA256HashValue kFakeFingerprint = {
25     {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
26      0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55,
27      0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}};
28 const SHA256HashValue kStarfieldFingerprint = {
29     {0x14, 0x65, 0xfa, 0x20, 0x53, 0x97, 0xb8, 0x76, 0xfa, 0xa6, 0xf0,
30      0xa9, 0x95, 0x8e, 0x55, 0x90, 0xe4, 0x0f, 0xcc, 0x7f, 0xaa, 0x4f,
31      0xb7, 0xc2, 0xc8, 0x67, 0x75, 0x21, 0xfb, 0x5f, 0xb6, 0x58}};
32 
TEST(EVRootCAMetadataTest,Basic)33 TEST(EVRootCAMetadataTest, Basic) {
34   EVRootCAMetadata* ev_metadata(EVRootCAMetadata::GetInstance());
35 
36   // Contains an expected policy.
37   EXPECT_TRUE(ev_metadata->IsEVPolicyOID(bssl::der::Input(kCabEvPolicy)));
38 
39   // Does not contain an unregistered policy.
40   EXPECT_FALSE(ev_metadata->IsEVPolicyOID(bssl::der::Input(kFakePolicy)));
41 
42   // The policy is correct for the right root.
43   EXPECT_TRUE(ev_metadata->HasEVPolicyOID(kStarfieldFingerprint,
44                                           bssl::der::Input(kCabEvPolicy)));
45 
46   // The policy does not match if the root does not match.
47   EXPECT_FALSE(ev_metadata->HasEVPolicyOID(kFakeFingerprint,
48                                            bssl::der::Input(kCabEvPolicy)));
49 
50   // The expected root only has the expected policies; it should fail to match
51   // the root against unknown policies.
52   EXPECT_FALSE(ev_metadata->HasEVPolicyOID(kStarfieldFingerprint,
53                                            bssl::der::Input(kFakePolicy)));
54 
55   // Test a completely bogus OID.
56   const uint8_t bad_oid[] = {0};
57   EXPECT_FALSE(ev_metadata->HasEVPolicyOID(kStarfieldFingerprint,
58                                            bssl::der::Input(bad_oid)));
59 }
60 
TEST(EVRootCAMetadataTest,AddRemove)61 TEST(EVRootCAMetadataTest, AddRemove) {
62   EVRootCAMetadata* ev_metadata(EVRootCAMetadata::GetInstance());
63 
64   // An unregistered/junk policy should not work.
65   EXPECT_FALSE(ev_metadata->IsEVPolicyOID(bssl::der::Input(kFakePolicy)));
66 
67   EXPECT_FALSE(ev_metadata->HasEVPolicyOID(kFakeFingerprint,
68                                            bssl::der::Input(kFakePolicy)));
69 
70   {
71     // However, this unregistered/junk policy can be temporarily registered
72     // and made to work.
73     ScopedTestEVPolicy test_ev_policy(ev_metadata, kFakeFingerprint,
74                                       kFakePolicyStr);
75 
76     EXPECT_TRUE(ev_metadata->IsEVPolicyOID(bssl::der::Input(kFakePolicy)));
77 
78     EXPECT_TRUE(ev_metadata->HasEVPolicyOID(kFakeFingerprint,
79                                             bssl::der::Input(kFakePolicy)));
80   }
81 
82   // It should go out of scope when the ScopedTestEVPolicy goes out of scope.
83   EXPECT_FALSE(ev_metadata->IsEVPolicyOID(bssl::der::Input(kFakePolicy)));
84 
85   EXPECT_FALSE(ev_metadata->HasEVPolicyOID(kFakeFingerprint,
86                                            bssl::der::Input(kFakePolicy)));
87 }
88 
89 #endif  // defined(PLATFORM_USES_CHROMIUM_EV_METADATA)
90 
91 }  // namespace
92 
93 }  // namespace net
94