blob: cf19bb98d6563a6fea736b24a71e074c23c490ba [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>
Zhiyi Zhanga749f442020-09-29 17:19:51 -070056#include <boost/property_tree/info_parser.hpp>
57#include <boost/property_tree/json_parser.hpp>
58#include <boost/property_tree/ptree.hpp>
Zhiyi Zhang8617a792017-01-17 16:45:56 -080059
60namespace ndn {
tylerliu50d679e2020-10-14 14:08:39 -070061namespace tlv {
62 enum : uint32_t {
63 CaPrefix = 129,
64 CaInfo = 131,
65 ParameterKey = 133,
66 ParameterValue = 135,
67 CaCertificate = 137,
68 MaxValidityPeriod = 139,
69 ProbeResponse = 141,
70 MaxSuffixLength = 143,
71 EcdhPub = 145,
72 CertRequest = 147,
73 Salt = 149,
74 RequestId = 151,
75 Challenge = 153,
76 Status = 155,
77 InitializationVector = 157,
78 EncryptedPayload = 159,
79 SelectedChallenge = 161,
80 ChallengeStatus = 163,
81 RemainingTries = 165,
82 RemainingTime = 167,
83 IssuedCertName = 169,
84 ErrorCode = 171,
85 ErrorInfo = 173,
86 AuthenticationTag = 175,
87 CertToRevoke = 177,
88 ProbeRedirect = 179
89 };
90} // namespace tlv
Zhiyi Zhang8617a792017-01-17 16:45:56 -080091namespace ndncert {
92
Zhiyi Zhang8617a792017-01-17 16:45:56 -080093using boost::noncopyable;
Zhiyi Zhang59812232020-10-12 13:11:35 -070094typedef boost::property_tree::ptree JsonSection;
Zhiyi Zhang8617a792017-01-17 16:45:56 -080095
Zhiyi Zhang4b118092020-10-10 10:28:38 -070096// NDNCERT error code
Zhiyi Zhangaafc55e2020-09-28 17:54:48 -070097enum class ErrorCode : uint16_t {
Zhiyi Zhang46049832020-09-28 17:08:12 -070098 NO_ERROR = 0,
Zhiyi Zhang48f23782020-09-28 12:11:24 -070099 BAD_INTEREST_FORMAT = 1,
100 BAD_PARAMETER_FORMAT = 2,
101 BAD_SIGNATURE = 3,
102 INVALID_PARAMETER = 4,
103 NAME_NOT_ALLOWED = 5,
104 BAD_VALIDITY_PERIOD = 6,
105 OUT_OF_TRIES = 7,
106 OUT_OF_TIME = 8,
107 NO_AVAILABLE_NAMES = 9
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700108};
109
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700110// Convert error code to string
111std::string
112errorCodeToString(ErrorCode code);
113
114// NDNCERT request type
Zhiyi Zhangc87d52b2020-09-28 22:07:18 -0700115enum class RequestType : uint16_t {
116 NOTINITIALIZED = 0,
117 NEW = 1,
118 RENEW = 2,
119 REVOKE = 3
120};
121
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700122// Convert request type to string
Zhiyi Zhanga749f442020-09-29 17:19:51 -0700123std::string
Zhiyi Zhang4b118092020-10-10 10:28:38 -0700124requestTypeToString(RequestType type);
Zhiyi Zhanga749f442020-09-29 17:19:51 -0700125
Zhiyi Zhange4891b72020-10-10 15:11:57 -0700126} // namespace ndncert
127} // namespace ndn
Zhiyi Zhang8617a792017-01-17 16:45:56 -0800128
Zhiyi Zhange4891b72020-10-10 15:11:57 -0700129#endif // NDNCERT_NDNCERT_COMMON_HPP