7#include <openssl/ossl_typ.h>
10#include <t_cose/t_cose_sign1_sign.h>
11#include <unordered_map>
16 static constexpr int64_t COSE_PHEADER_KEY_ALG = 1;
18 static constexpr int64_t COSE_PHEADER_KEY_ID = 4;
20 static constexpr int64_t COSE_PHEADER_KEY_CWT = 15;
22 static constexpr int64_t COSE_PHEADER_KEY_VDS = 395;
32 static constexpr int64_t COSE_PHEADER_KEY_IAT = 6;
38 static constexpr int64_t COSE_PHEADER_KEY_ISS = 1;
45 static constexpr int64_t COSE_PHEADER_KEY_SUB = 2;
47 static const std::string COSE_PHEADER_KEY_CCF =
"ccf.v1";
49 static const std::string COSE_PHEADER_KEY_TXID =
"txid";
51 static const std::string COSE_PHEADER_KEY_RANGE_BEGIN =
"epoch.start.txid";
53 static const std::string COSE_PHEADER_KEY_RANGE_END =
"epoch.end.txid";
55 static const std::string COSE_PHEADER_KEY_EPOCH_LAST_MERKLE_ROOT =
56 "epoch.end.merkle.root";
61 virtual void apply(QCBOREncodeContext* ctx)
const = 0;
73 void apply(QCBOREncodeContext* ctx)
const override;
86 void apply(QCBOREncodeContext* ctx)
const override;
96 virtual void apply(QCBOREncodeContext* ctx)
const = 0;
106 std::shared_ptr<COSEMapKey> key_,
107 const std::vector<std::shared_ptr<COSEParametersFactory>>& factories_);
109 void apply(QCBOREncodeContext* ctx)
const override;
115 std::shared_ptr<COSEMapKey> key;
116 std::vector<std::shared_ptr<COSEParametersFactory>> factories{};
120 int64_t key, int64_t value);
123 int64_t key,
const std::string& value);
126 const std::string& key, int64_t value);
129 const std::string& key,
const std::string& value);
132 int64_t key, std::span<const uint8_t> value);
135 const std::string& key, std::span<const uint8_t> value);
140 template <
typename Callable>
142 impl(
std::forward<Callable>(impl)),
148 void apply(QCBOREncodeContext* ctx)
const override
159 std::function<void(QCBOREncodeContext*)> impl{};
164 std::vector<std::shared_ptr<ccf::crypto::COSEParametersFactory>>;
182 const KeyPair_OpenSSL& key,
183 const std::vector<std::shared_ptr<COSEParametersFactory>>&
185 std::span<const uint8_t> payload,
186 bool detached_payload =
true);
Definition cose_sign.h:68
size_t estimated_size() const override
Definition cose_sign.cpp:106
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.cpp:101
~COSEMapIntKey() override=default
Definition cose_sign.h:59
virtual ~COSEMapKey()=default
virtual void apply(QCBOREncodeContext *ctx) const =0
virtual size_t estimated_size() const =0
Definition cose_sign.h:81
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.cpp:113
~COSEMapStringKey() override=default
size_t estimated_size() const override
Definition cose_sign.cpp:118
Definition cose_sign.h:94
virtual ~COSEParametersFactory()=default
virtual size_t estimated_size() const =0
virtual void apply(QCBOREncodeContext *ctx) const =0
Definition cose_sign.h:103
size_t estimated_size() const override
Definition cose_sign.cpp:141
virtual ~COSEParametersMap()=default
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.cpp:130
Definition cose_sign.h:138
COSEParametersPair(Callable &&impl, size_t args_size)
Definition cose_sign.h:141
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.h:148
size_t estimated_size() const override
Definition cose_sign.h:153
virtual ~COSEParametersPair()=default
Definition public_key.h:16
std::shared_ptr< COSEParametersFactory > cose_params_string_bytes(const std::string &key, std::span< const uint8_t > value)
Definition cose_sign.cpp:217
std::shared_ptr< COSEParametersFactory > cose_params_int_int(int64_t key, int64_t value)
Definition cose_sign.cpp:154
std::shared_ptr< COSEParametersFactory > cose_params_int_bytes(int64_t key, std::span< const uint8_t > value)
Definition cose_sign.cpp:204
std::shared_ptr< COSEParametersFactory > cose_params_int_string(int64_t key, const std::string &value)
Definition cose_sign.cpp:166
std::optional< int > key_to_cose_alg_id(const ccf::crypto::PublicKey_OpenSSL &key)
Definition cose_sign.cpp:84
std::shared_ptr< COSEParametersFactory > cose_params_string_int(const std::string &key, int64_t value)
Definition cose_sign.cpp:178
std::shared_ptr< COSEParametersFactory > cose_params_string_string(const std::string &key, const std::string &value)
Definition cose_sign.cpp:191
std::vector< uint8_t > cose_sign1(const KeyPair_OpenSSL &key, const std::vector< std::shared_ptr< COSEParametersFactory > > &protected_headers, std::span< const uint8_t > payload, bool detached_payload)
Definition cose_sign.cpp:231
std::vector< std::shared_ptr< ccf::crypto::COSEParametersFactory > > COSEHeadersArray
Definition cose_sign.h:164
Definition cose_sign.h:167
COSESignError(const std::string &msg)
Definition cose_sign.h:168