1 // Copyright 2017 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 "nist_pkits_unittest.h"
6
7 #include "certificate_policies.h"
8
9 #include <sstream>
10
11 namespace bssl {
12
13 namespace {
14
15 // 2.16.840.1.101.3.2.1.48.1
16 const uint8_t kTestPolicy1[] = {0x60, 0x86, 0x48, 0x01, 0x65,
17 0x03, 0x02, 0x01, 0x30, 0x01};
18
19 // 2.16.840.1.101.3.2.1.48.2
20 const uint8_t kTestPolicy2[] = {0x60, 0x86, 0x48, 0x01, 0x65,
21 0x03, 0x02, 0x01, 0x30, 0x02};
22
23 // 2.16.840.1.101.3.2.1.48.3
24 const uint8_t kTestPolicy3[] = {0x60, 0x86, 0x48, 0x01, 0x65,
25 0x03, 0x02, 0x01, 0x30, 0x03};
26
27 // 2.16.840.1.101.3.2.1.48.6
28 const uint8_t kTestPolicy6[] = {0x60, 0x86, 0x48, 0x01, 0x65,
29 0x03, 0x02, 0x01, 0x30, 0x06};
30
SetPolicySetFromString(const char * const policy_names,std::set<der::Input> * out)31 void SetPolicySetFromString(const char *const policy_names,
32 std::set<der::Input> *out) {
33 out->clear();
34 std::istringstream stream(policy_names);
35 for (std::string line; std::getline(stream, line, ',');) {
36 size_t start = line.find_first_not_of(" \n\t\r\f\v");
37 if (start == std::string::npos) {
38 continue;
39 }
40 size_t end = line.find_last_not_of(" \n\t\r\f\v");
41 if (end == std::string::npos) {
42 continue;
43 }
44 std::string policy_name = line.substr(start, end + 1);
45 if (policy_name.empty()) {
46 continue;
47 }
48
49 if (policy_name == "anyPolicy") {
50 out->insert(der::Input(kAnyPolicyOid));
51 } else if (policy_name == "NIST-test-policy-1") {
52 out->insert(der::Input(kTestPolicy1));
53 } else if (policy_name == "NIST-test-policy-2") {
54 out->insert(der::Input(kTestPolicy2));
55 } else if (policy_name == "NIST-test-policy-3") {
56 out->insert(der::Input(kTestPolicy3));
57 } else if (policy_name == "NIST-test-policy-6") {
58 out->insert(der::Input(kTestPolicy6));
59 } else {
60 ADD_FAILURE() << "Unknown policy name: " << policy_name;
61 }
62 }
63 }
64
65 } // namespace
66
PkitsTestInfo()67 PkitsTestInfo::PkitsTestInfo() {
68 SetInitialPolicySet("anyPolicy");
69 SetUserConstrainedPolicySet("NIST-test-policy-1");
70 }
71
72 PkitsTestInfo::PkitsTestInfo(const PkitsTestInfo &other) = default;
73
74 PkitsTestInfo::~PkitsTestInfo() = default;
75
SetInitialExplicitPolicy(bool b)76 void PkitsTestInfo::SetInitialExplicitPolicy(bool b) {
77 initial_explicit_policy =
78 b ? InitialExplicitPolicy::kTrue : InitialExplicitPolicy::kFalse;
79 }
80
SetInitialPolicyMappingInhibit(bool b)81 void PkitsTestInfo::SetInitialPolicyMappingInhibit(bool b) {
82 initial_policy_mapping_inhibit = b ? InitialPolicyMappingInhibit::kTrue
83 : InitialPolicyMappingInhibit::kFalse;
84 }
85
SetInitialInhibitAnyPolicy(bool b)86 void PkitsTestInfo::SetInitialInhibitAnyPolicy(bool b) {
87 initial_inhibit_any_policy =
88 b ? InitialAnyPolicyInhibit::kTrue : InitialAnyPolicyInhibit::kFalse;
89 }
90
SetInitialPolicySet(const char * const policy_names)91 void PkitsTestInfo::SetInitialPolicySet(const char *const policy_names) {
92 SetPolicySetFromString(policy_names, &initial_policy_set);
93 }
94
SetUserConstrainedPolicySet(const char * const policy_names)95 void PkitsTestInfo::SetUserConstrainedPolicySet(
96 const char *const policy_names) {
97 SetPolicySetFromString(policy_names, &user_constrained_policy_set);
98 }
99
100 } // namespace bssl
101