ndn-embeds 0.1.0
Lightweight NDN protocol stack for embedded systems
Loading...
Searching...
No Matches
certificate.hpp
Go to the documentation of this file.
1
12#pragma once
13
14#include "ndn/common.hpp"
15#include "ndn/data.hpp"
16#include "ndn/name.hpp"
17
18namespace ndn {
19
21constexpr size_t VALIDITY_TIMESTAMP_SIZE = 15;
22
24constexpr size_t CERTIFICATE_MAX_KEY_SIZE = 256;
25
44public:
50 ValidityPeriod() = default;
51
59 static Result<ValidityPeriod> fromStrings(std::string_view notBefore,
60 std::string_view notAfter);
61
70 static Result<ValidityPeriod> fromWire(const uint8_t* buf, size_t len,
71 size_t* bytesRead = nullptr);
72
81 Error encode(uint8_t* buf, size_t bufSize, size_t& encodedLen) const;
82
98 Error setNotBefore(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute,
99 uint8_t second);
100
106 Error setNotBefore(std::string_view timestamp);
107
112 const char* notBefore() const { return notBefore_.data(); }
122 Error setNotAfter(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute,
123 uint8_t second);
124
130 Error setNotAfter(std::string_view timestamp);
131
136 const char* notAfter() const { return notAfter_.data(); }
145 bool isValidAt(std::string_view currentTimestamp) const;
146
150 bool equals(const ValidityPeriod& other) const;
151
152private:
153 std::array<char, VALIDITY_TIMESTAMP_SIZE> notBefore_{};
154 std::array<char, VALIDITY_TIMESTAMP_SIZE> notAfter_{};
155};
156
186public:
190 Certificate() = default;
191
198 static Result<Certificate> fromData(const Data& data);
199
207 static Result<Certificate> fromWire(const uint8_t* buf, size_t len);
208
215 Error toData(Data& data) const;
216
225 Error encode(uint8_t* buf, size_t bufSize, size_t& encodedLen) const;
226
235 const Name& identityName() const { return identityName_; }
236
242 Certificate& setIdentityName(const Name& name);
243
249 Error setIdentityName(std::string_view uri);
260 const uint8_t* keyId() const { return keyId_.data(); }
261
266 size_t keyIdSize() const { return keyIdSize_; }
267
274 Error setKeyId(const uint8_t* id, size_t len);
285 const uint8_t* issuerId() const { return issuerId_.data(); }
286
291 size_t issuerIdSize() const { return issuerIdSize_; }
292
299 Error setIssuerId(const uint8_t* id, size_t len);
300
306 Error setIssuerId(std::string_view id);
317 uint64_t version() const { return version_; }
318
324 Certificate& setVersion(uint64_t version);
335 const uint8_t* publicKey() const { return publicKey_.data(); }
336
341 size_t publicKeySize() const { return publicKeySize_; }
342
349 Error setPublicKey(const uint8_t* key, size_t len);
360 const ValidityPeriod& validity() const { return validity_; }
361
366 ValidityPeriod& validity() { return validity_; }
367
383 SignatureType signatureType() const { return signatureType_; }
384
389
395
402 Error signWithHmac(const uint8_t* key, size_t keyLen);
403
408 bool verifyDigestSha256() const;
409
416 bool verifyHmac(const uint8_t* key, size_t keyLen) const;
427 Error buildName(Name& name) const;
428
434 bool isValidAt(std::string_view timestamp) const;
435
436private:
444 Error encodeSignedPortion(uint8_t* buf, size_t bufSize, size_t& encodedLen) const;
445
446 Name identityName_;
447 std::array<uint8_t, 32> keyId_{};
448 size_t keyIdSize_ = 0;
449 std::array<uint8_t, 32> issuerId_{};
450 size_t issuerIdSize_ = 0;
451 uint64_t version_ = 0;
452 std::array<uint8_t, CERTIFICATE_MAX_KEY_SIZE> publicKey_{};
453 size_t publicKeySize_ = 0;
454 ValidityPeriod validity_;
455 SignatureType signatureType_ = SignatureType::DigestSha256;
456 std::array<uint8_t, SIGNATURE_MAX_SIZE> signatureValue_{};
457 size_t signatureSize_ = 0;
458};
459
460} // namespace ndn
constexpr size_t CERTIFICATE_MAX_KEY_SIZE
Maximum public key size (DER-encoded SubjectPublicKeyInfo)
constexpr size_t VALIDITY_TIMESTAMP_SIZE
Length of ValidityPeriod ISO 8601 format string (YYYYMMDDThhmmss)
NDN Certificate.
Certificate & setVersion(uint64_t version)
Set the version.
SignatureType signatureType() const
Get the signature type.
bool isValidAt(std::string_view timestamp) const
Check if the certificate is valid at a given time.
Error setIssuerId(const uint8_t *id, size_t len)
Set the Issuer ID (bytes)
Error signWithDigestSha256()
Sign with DigestSha256.
const uint8_t * issuerId() const
Get the Issuer ID.
Error toData(Data &data) const
Convert the Certificate to a Data packet.
static Result< Certificate > fromWire(const uint8_t *buf, size_t len)
Decode a Certificate from TLV wire format.
const uint8_t * publicKey() const
Get the public key.
Certificate & setSignatureType(SignatureType type)
Set the signature type.
size_t publicKeySize() const
Get the public key size.
ValidityPeriod & validity()
Get the validity period.
Error signWithHmac(const uint8_t *key, size_t keyLen)
Sign with HMAC-SHA256.
Certificate()=default
Default constructor.
Certificate & setValidity(const ValidityPeriod &validity)
Set the validity period.
bool verifyHmac(const uint8_t *key, size_t keyLen) const
Verify an HMAC-SHA256 signature.
Error setKeyId(const uint8_t *id, size_t len)
Set the Key ID.
Certificate & setIdentityName(const Name &name)
Set the identity name.
Error encode(uint8_t *buf, size_t bufSize, size_t &encodedLen) const
Encode the Certificate to TLV wire format.
const Name & identityName() const
Get the identity name.
Error buildName(Name &name) const
Build the full certificate name and store it in a Name.
bool verifyDigestSha256() const
Verify a DigestSha256 signature.
Error setPublicKey(const uint8_t *key, size_t len)
Set the public key.
static Result< Certificate > fromData(const Data &data)
Create a Certificate from a Data packet.
const uint8_t * keyId() const
Get the Key ID.
size_t issuerIdSize() const
Get the Issuer ID size.
const ValidityPeriod & validity() const
Get the validity period (const)
size_t keyIdSize() const
Get the Key ID size.
uint64_t version() const
Get the version.
NDN Data packet.
Definition data.hpp:49
NDN Name class.
Definition name.hpp:64
Validity period.
static Result< ValidityPeriod > fromWire(const uint8_t *buf, size_t len, size_t *bytesRead=nullptr)
Decode a ValidityPeriod from TLV wire format.
const char * notAfter() const
Get the NotAfter time as an ISO 8601 string.
Error setNotAfter(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
Set the NotAfter time from date/time components.
bool equals(const ValidityPeriod &other) const
Check equality of two validity periods.
ValidityPeriod()=default
Default constructor.
static Result< ValidityPeriod > fromStrings(std::string_view notBefore, std::string_view notAfter)
Create a ValidityPeriod from ISO 8601 format strings.
Error setNotBefore(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
Set the NotBefore time from date/time components.
bool isValidAt(std::string_view currentTimestamp) const
Check if the current time is within the validity period.
Error encode(uint8_t *buf, size_t bufSize, size_t &encodedLen) const
Encode the ValidityPeriod to TLV wire format.
const char * notBefore() const
Get the NotBefore time as an ISO 8601 string.
Common definitions for the NDN protocol stack.
Error
Error codes.
Definition common.hpp:24
NDN Data packet.
NDN Name class.
constexpr uint32_t ValidityPeriod
Validity period (253)
Definition tlv.hpp:95
SignatureType
Signature type.
Definition signature.hpp:22
Result type template.
Definition common.hpp:147