blob: cf2643fbc16309c57a0e858f077d70093b42097d [file] [log] [blame]
Zhiyi Zhang8617a792017-01-17 16:45:56 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Zhiyi Zhangad9e04f2020-03-27 12:04:31 -07003 * Copyright (c) 2017-2020, Regents of the University of California.
Zhiyi Zhang8617a792017-01-17 16:45:56 -08004 *
5 * This file is part of ndncert, a certificate management system based on NDN.
6 *
7 * ndncert is free software: you can redistribute it and/or modify it under the terms
8 * of the GNU General Public License as published by the Free Software Foundation, either
9 * version 3 of the License, or (at your option) any later version.
10 *
11 * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License along with
16 * ndncert, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * See AUTHORS.md for complete list of ndncert authors and contributors.
19 */
20
Zhiyi Zhangb6fab0f2017-09-21 16:26:27 -070021#ifndef NDNCERT_NDNCERT_COMMON_HPP
22#define NDNCERT_NDNCERT_COMMON_HPP
Zhiyi Zhang8617a792017-01-17 16:45:56 -080023
24#include "ndncert-config.hpp"
25
Zhiyi Zhangdaf2fd72017-01-19 11:31:35 -080026#ifdef HAVE_TESTS
Zhiyi Zhang8617a792017-01-17 16:45:56 -080027#define VIRTUAL_WITH_TESTS virtual
28#define PUBLIC_WITH_TESTS_ELSE_PROTECTED public
29#define PUBLIC_WITH_TESTS_ELSE_PRIVATE public
30#define PROTECTED_WITH_TESTS_ELSE_PRIVATE protected
31#else
32#define VIRTUAL_WITH_TESTS
33#define PUBLIC_WITH_TESTS_ELSE_PROTECTED protected
34#define PUBLIC_WITH_TESTS_ELSE_PRIVATE private
35#define PROTECTED_WITH_TESTS_ELSE_PRIVATE private
36#endif
37
Zhiyi Zhang48f23782020-09-28 12:11:24 -070038#include <cstddef>
39#include <cstdint>
Zhiyi Zhange537dd52020-10-01 18:02:24 -070040#include <tuple>
41#include <ndn-cxx/encoding/tlv.hpp>
Zhiyi Zhang48f23782020-09-28 12:11:24 -070042#include <ndn-cxx/data.hpp>
43#include <ndn-cxx/encoding/block.hpp>
Zhiyi Zhang97bedb82020-10-10 11:11:35 -070044#include <ndn-cxx/encoding/block-helpers.hpp>
Zhiyi Zhang48f23782020-09-28 12:11:24 -070045#include <ndn-cxx/face.hpp>
46#include <ndn-cxx/interest.hpp>
47#include <ndn-cxx/link.hpp>
48#include <ndn-cxx/lp/nack.hpp>
49#include <ndn-cxx/name.hpp>
50#include <ndn-cxx/security/key-chain.hpp>
tylerliua7bea662020-10-08 18:51:02 -070051#include <ndn-cxx/security/certificate.hpp>
Zhiyi Zhang523f0c22020-09-29 14:19:20 -070052#include <ndn-cxx/util/logger.hpp>
Zhiyi Zhangc87d52b2020-09-28 22:07:18 -070053#include <boost/algorithm/string.hpp>
54#include <boost/assert.hpp>
55#include <boost/noncopyable.hpp>
56#include <boost/throw_exception.hpp>
Zhiyi Zhanga749f442020-09-29 17:19:51 -070057#include <boost/property_tree/info_parser.hpp>
58#include <boost/property_tree/json_parser.hpp>
59#include <boost/property_tree/ptree.hpp>
Zhiyi Zhang8617a792017-01-17 16:45:56 -080060
61namespace ndn {
62namespace ndncert {
63
Zhiyi Zhang8617a792017-01-17 16:45:56 -080064using boost::noncopyable;
Zhiyi Zhang48f23782020-09-28 12:11:24 -070065using ndn::Block;
Zhiyi Zhang8617a792017-01-17 16:45:56 -080066using ndn::Data;
Zhiyi Zhang48f23782020-09-28 12:11:24 -070067using ndn::Interest;
68using ndn::make_unique;
Zhiyi Zhang8617a792017-01-17 16:45:56 -080069using ndn::Name;
70using ndn::PartialName;
Zhiyi Zhang8617a792017-01-17 16:45:56 -080071using ndn::time::system_clock;
72using ndn::time::toUnixTimestamp;
Zhiyi Zhang48f23782020-09-28 12:11:24 -070073using std::bind;
74using std::enable_shared_from_this;
75using std::function;
76using std::make_shared;
77using std::shared_ptr;
78using std::size_t;
79using std::unique_ptr;
80using std::weak_ptr;
Zhiyi Zhang8617a792017-01-17 16:45:56 -080081
Zhiyi Zhang523f0c22020-09-29 14:19:20 -070082#define _LOG_INIT(name) NDN_LOG_INIT(ndncert.name)
83#define _LOG_DEBUG(x) NDN_LOG_DEBUG(__FILE__ << ":" << __LINE__ << ":" << " " << x)
84#define _LOG_TRACE(x) NDN_LOG_TRACE(__FILE__ << ":" << __LINE__ << ":" << " " << x)
85#define _LOG_ERROR(x) NDN_LOG_ERROR(x)
86
Zhiyi Zhang0453dbb2020-04-28 22:39:17 -070087enum : uint32_t {
88 tlv_ca_prefix = 129,
89 tlv_ca_info = 131,
90 tlv_parameter_key = 133,
91 tlv_parameter_value = 135,
92 tlv_ca_certificate = 137,
93 tlv_max_validity_period = 139,
94 tlv_probe_response = 141,
Zhiyi Zhang38e1a9e2020-10-01 15:12:15 -070095 tlv_max_suffix_length = 143,
Zhiyi Zhang0453dbb2020-04-28 22:39:17 -070096 tlv_ecdh_pub = 145,
97 tlv_cert_request = 147,
98 tlv_salt = 149,
99 tlv_request_id = 151,
100 tlv_challenge = 153,
101 tlv_status = 155,
102 tlv_initialization_vector = 157,
103 tlv_encrypted_payload = 159,
104 tlv_selected_challenge = 161,
105 tlv_challenge_status = 163,
106 tlv_remaining_tries = 165,
107 tlv_remaining_time = 167,
108 tlv_issued_cert_name = 169,
109 tlv_error_code = 171,
Zhiyi Zhangb8cb0472020-05-05 20:55:05 -0700110 tlv_error_info = 173,
tylerliu182bc532020-09-25 01:54:45 -0700111 tlv_authentication_tag = 175,
Zhiyi Zhange537dd52020-10-01 18:02:24 -0700112 tlv_cert_to_revoke = 177,
113 tlv_probe_redirect = 179
Zhiyi Zhang0453dbb2020-04-28 22:39:17 -0700114};
115
116// Parse CA Configuration file
117const std::string CONFIG_CA_PREFIX = "ca-prefix";
118const std::string CONFIG_CA_INFO = "ca-info";
119const std::string CONFIG_MAX_VALIDITY_PERIOD = "max-validity-period";
Zhiyi Zhangfde50112020-10-01 16:36:33 -0700120const std::string CONFIG_MAX_SUFFIX_LENGTH = "max-suffix-length";
Zhiyi Zhang0453dbb2020-04-28 22:39:17 -0700121const std::string CONFIG_PROBE_PARAMETERS = "probe-parameters";
122const std::string CONFIG_PROBE_PARAMETER = "probe-parameter-key";
123const std::string CONFIG_SUPPORTED_CHALLENGES = "supported-challenges";
124const std::string CONFIG_CHALLENGE = "challenge";
Zhiyi Zhangfde50112020-10-01 16:36:33 -0700125const std::string CONFIG_CERTIFICATE = "certificate";
126const std::string CONFIG_REDIRECTION = "redirect-to";
tylerliu8d9e7122020-10-06 18:57:06 -0700127const std::string CONFIG_NAME_ASSIGNMENT = "name-assignment";
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700128typedef boost::property_tree::ptree JsonSection;
Zhiyi Zhangfde50112020-10-01 16:36:33 -0700129
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700130// JSON and string translation for Config file parsing
131std::string
132convertJson2String(const JsonSection& json);
Zhiyi Zhang0453dbb2020-04-28 22:39:17 -0700133
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700134JsonSection
135convertString2Json(const std::string& jsonContent);
136
137// NDNCERT Request status enumeration
Zhiyi Zhang48f23782020-09-28 12:11:24 -0700138enum class Status : uint16_t {
139 BEFORE_CHALLENGE = 0,
140 CHALLENGE = 1,
141 PENDING = 2,
142 SUCCESS = 3,
143 FAILURE = 4,
144 NOT_STARTED = 5,
145 ENDED = 6
146};
147
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700148// Convert request status to string
149std::string
150statusToString(Status status);
Zhiyi Zhang48f23782020-09-28 12:11:24 -0700151
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700152// NDNCERT error code
Zhiyi Zhangaafc55e2020-09-28 17:54:48 -0700153enum class ErrorCode : uint16_t {
Zhiyi Zhang46049832020-09-28 17:08:12 -0700154 NO_ERROR = 0,
Zhiyi Zhang48f23782020-09-28 12:11:24 -0700155 BAD_INTEREST_FORMAT = 1,
156 BAD_PARAMETER_FORMAT = 2,
157 BAD_SIGNATURE = 3,
158 INVALID_PARAMETER = 4,
159 NAME_NOT_ALLOWED = 5,
160 BAD_VALIDITY_PERIOD = 6,
161 OUT_OF_TRIES = 7,
162 OUT_OF_TIME = 8,
163 NO_AVAILABLE_NAMES = 9
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700164};
165
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700166// Convert error code to string
167std::string
168errorCodeToString(ErrorCode code);
169
170// NDNCERT request type
Zhiyi Zhangc87d52b2020-09-28 22:07:18 -0700171enum class RequestType : uint16_t {
172 NOTINITIALIZED = 0,
173 NEW = 1,
174 RENEW = 2,
175 REVOKE = 3
176};
177
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700178// Convert request type to string
Zhiyi Zhanga749f442020-09-29 17:19:51 -0700179std::string
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700180requestTypeToString(RequestType type);
Zhiyi Zhanga749f442020-09-29 17:19:51 -0700181
Zhiyi Zhang48f23782020-09-28 12:11:24 -0700182} // namespace ndncert
183} // namespace ndn
Zhiyi Zhang8617a792017-01-17 16:45:56 -0800184
Zhiyi Zhang48f23782020-09-28 12:11:24 -0700185#endif // NDNCERT_NDNCERT_COMMON_HPP