ndn-cxx: NDN C++ Library 0.9.0-33-g832ea91d
Loading...
Searching...
No Matches
signature-info.hpp
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013-2023 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library 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 Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_CXX_SIGNATURE_INFO_HPP
23#define NDN_CXX_SIGNATURE_INFO_HPP
24
27
28namespace ndn {
29
34{
35public:
36 class Error : public tlv::Error
37 {
38 public:
40 };
41
42 enum class Type : uint32_t {
45 };
46
47public:
49
52 explicit
53 SignatureInfo(tlv::SignatureTypeValue type, std::optional<KeyLocator> keyLocator = std::nullopt);
54
60 explicit
61 SignatureInfo(const Block& wire, Type type = Type::Data);
62
65 explicit
66 operator bool() const noexcept
67 {
68 return m_type != -1;
69 }
70
79 template<encoding::Tag TAG>
80 size_t
81 wireEncode(EncodingImpl<TAG>& encoder, Type type = Type::Data) const;
82
90 const Block&
91 wireEncode(Type type = Type::Data) const;
92
98 void
99 wireDecode(const Block& wire, Type type = Type::Data);
100
103 bool
104 hasWire() const noexcept
105 {
106 return m_wire.hasWire();
107 }
108
109public: // field access
113 int32_t
114 getSignatureType() const noexcept
115 {
116 return m_type;
117 }
118
124
127 bool
128 hasKeyLocator() const noexcept
129 {
130 return m_keyLocator.has_value();
131 }
132
136 const KeyLocator&
137 getKeyLocator() const;
138
146 setKeyLocator(std::optional<KeyLocator> keyLocator);
147
152 getValidityPeriod() const;
153
161 setValidityPeriod(std::optional<security::ValidityPeriod> validityPeriod);
162
166 std::optional<std::vector<uint8_t>>
167 getNonce() const;
168
176 setNonce(std::optional<span<const uint8_t>> nonce);
177
181 std::optional<time::system_clock::time_point>
182 getTime() const;
183
191 setTime(std::optional<time::system_clock::time_point> time = time::system_clock::now());
192
196 std::optional<uint64_t>
197 getSeqNum() const;
198
206 setSeqNum(std::optional<uint64_t> seqNum);
207
212 std::optional<Block>
213 getCustomTlv(uint32_t type) const;
214
219 void
220 addCustomTlv(Block block);
221
225 void
226 removeCustomTlv(uint32_t type);
227
228private:
229 std::vector<Block>::const_iterator
230 findOtherTlv(uint32_t type) const;
231
232private:
233 int32_t m_type = -1;
234 std::optional<KeyLocator> m_keyLocator;
235 std::vector<Block> m_otherTlvs;
236
237 mutable Block m_wire;
238
239 friend bool
240 operator==(const SignatureInfo& lhs, const SignatureInfo& rhs);
241
242 friend std::ostream&
243 operator<<(std::ostream& os, const SignatureInfo& info);
244};
245
246#ifndef DOXYGEN
247extern template size_t
248SignatureInfo::wireEncode<encoding::EncoderTag>(EncodingBuffer&, SignatureInfo::Type) const;
249
250extern template size_t
251SignatureInfo::wireEncode<encoding::EstimatorTag>(EncodingEstimator&, SignatureInfo::Type) const;
252#endif
253
254bool
255operator==(const SignatureInfo& lhs, const SignatureInfo& rhs);
256
257inline bool
259{
260 return !(lhs == rhs);
261}
262
263std::ostream&
264operator<<(std::ostream& os, const SignatureInfo& info);
265
266} // namespace ndn
267
268#endif // NDN_CXX_SIGNATURE_INFO_HPP
Represents a TLV element of the NDN packet format.
Definition block.hpp:45
bool hasWire() const noexcept
Check if the Block contains a fully encoded wire representation.
Definition block.hpp:205
Represents a Data packet.
Definition data.hpp:39
Represents an Interest packet.
Definition interest.hpp:50
Represents a SignatureInfo or InterestSignatureInfo TLV element.
size_t wireEncode(EncodingImpl< TAG > &encoder, Type type=Type::Data) const
Fast encoding or block size estimation.
SignatureInfo & setSignatureType(tlv::SignatureTypeValue type)
Set the SignatureType.
SignatureInfo & setSeqNum(std::optional< uint64_t > seqNum)
Append or replace SignatureSeqNum.
SignatureInfo & setNonce(std::optional< span< const uint8_t > > nonce)
Append or replace SignatureNonce.
std::optional< uint64_t > getSeqNum() const
Get SignatureSeqNum.
std::optional< std::vector< uint8_t > > getNonce() const
Get SignatureNonce.
void addCustomTlv(Block block)
Append an arbitrary TLV element to this SignatureInfo.
security::ValidityPeriod getValidityPeriod() const
Get the ValidityPeriod element.
int32_t getSignatureType() const noexcept
Get the SignatureType.
SignatureInfo & setTime(std::optional< time::system_clock::time_point > time=time::system_clock::now())
Append or replace SignatureTime.
SignatureInfo & setValidityPeriod(std::optional< security::ValidityPeriod > validityPeriod)
Append, replace, or remove the ValidityPeriod element.
bool hasKeyLocator() const noexcept
Check if KeyLocator is present.
bool hasWire() const noexcept
Check if this instance has cached wire encoding.
void removeCustomTlv(uint32_t type)
Remove all arbitrary TLV elements with the specified TLV-TYPE from this SignatureInfo.
void wireDecode(const Block &wire, Type type=Type::Data)
Decode from wire format.
std::optional< Block > getCustomTlv(uint32_t type) const
Get first custom TLV element with the specified TLV-TYPE.
std::optional< time::system_clock::time_point > getTime() const
Get SignatureTime.
SignatureInfo & setKeyLocator(std::optional< KeyLocator > keyLocator)
Set or unset the KeyLocator element.
friend bool operator==(const SignatureInfo &lhs, const SignatureInfo &rhs)
friend std::ostream & operator<<(std::ostream &os, const SignatureInfo &info)
const KeyLocator & getKeyLocator() const
Get the KeyLocator element.
Represents a ValidityPeriod TLV element.
static time_point now() noexcept
Definition time.cpp:45
Represents an error in TLV encoding or decoding.
Definition tlv.hpp:54
Error(const char *expectedType, uint32_t actualType)
Definition tlv.cpp:28
@ SignatureInfo
Definition tlv.hpp:94
@ InterestSignatureInfo
Definition tlv.hpp:89
SignatureTypeValue
SignatureType values.
Definition tlv.hpp:127
Definition data.cpp:25
bool operator!=(const Data &lhs, const Data &rhs)
Definition data.hpp:409
bool operator==(const Data &lhs, const Data &rhs)
Definition data.cpp:367
std::ostream & operator<<(std::ostream &os, const Data &data)
Definition data.cpp:377
SignatureInfo info