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;
23 static constexpr int64_t COSE_PHEADER_VDS_CCF_LEDGER_SHA256 = 2;
33 static constexpr int64_t COSE_PHEADER_KEY_IAT = 6;
39 static constexpr int64_t COSE_PHEADER_KEY_ISS = 1;
46 static constexpr int64_t COSE_PHEADER_KEY_SUB = 2;
48 static const std::string COSE_PHEADER_KEY_CCF =
"ccf.v1";
50 static const std::string COSE_PHEADER_KEY_TXID =
"txid";
52 static const std::string COSE_PHEADER_KEY_RANGE_BEGIN =
"epoch.start.txid";
54 static const std::string COSE_PHEADER_KEY_RANGE_END =
"epoch.end.txid";
56 static const std::string COSE_PHEADER_KEY_EPOCH_LAST_MERKLE_ROOT =
57 "epoch.end.merkle.root";
62 virtual void apply(QCBOREncodeContext* ctx)
const = 0;
74 void apply(QCBOREncodeContext* ctx)
const override;
87 void apply(QCBOREncodeContext* ctx)
const override;
97 virtual void apply(QCBOREncodeContext* ctx)
const = 0;
107 std::shared_ptr<COSEMapKey> key_,
108 const std::vector<std::shared_ptr<COSEParametersFactory>>& factories_);
110 void apply(QCBOREncodeContext* ctx)
const override;
116 std::shared_ptr<COSEMapKey> key;
117 std::vector<std::shared_ptr<COSEParametersFactory>> factories;
121 int64_t key, int64_t value);
124 int64_t key,
const std::string& value);
127 const std::string& key, int64_t value);
130 const std::string& key,
const std::string& value);
133 int64_t key, std::span<const uint8_t> value);
136 const std::string& key, std::span<const uint8_t> value);
141 template <
typename Callable>
143 impl(
std::forward<Callable>(impl)),
149 void apply(QCBOREncodeContext* ctx)
const override
160 std::function<void(QCBOREncodeContext*)> impl;
165 std::vector<std::shared_ptr<ccf::crypto::COSEParametersFactory>>;
183 const ECKeyPair_OpenSSL& key,
184 const std::vector<std::shared_ptr<COSEParametersFactory>>&
186 std::span<const uint8_t> payload,
187 bool detached_payload =
true);
Definition cose_sign.h:69
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:60
virtual ~COSEMapKey()=default
virtual void apply(QCBOREncodeContext *ctx) const =0
virtual size_t estimated_size() const =0
Definition cose_sign.h:82
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:95
virtual ~COSEParametersFactory()=default
virtual size_t estimated_size() const =0
virtual void apply(QCBOREncodeContext *ctx) const =0
Definition cose_sign.h:104
size_t estimated_size() const override
Definition cose_sign.cpp:141
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.cpp:130
~COSEParametersMap() override=default
Definition cose_sign.h:139
COSEParametersPair(Callable &&impl, size_t args_size)
Definition cose_sign.h:142
void apply(QCBOREncodeContext *ctx) const override
Definition cose_sign.h:149
size_t estimated_size() const override
Definition cose_sign.h:154
~COSEParametersPair() override=default
Definition ec_public_key.h:17
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::shared_ptr< COSEParametersFactory > cose_params_string_int(const std::string &key, int64_t value)
Definition cose_sign.cpp:178
std::vector< uint8_t > cose_sign1(const ECKeyPair_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::optional< int > key_to_cose_alg_id(const ccf::crypto::ECPublicKey_OpenSSL &key)
Definition cose_sign.cpp:84
std::shared_ptr< COSEParametersFactory > cose_params_string_string(const std::string &key, const std::string &value)
Definition cose_sign.cpp:191
std::vector< std::shared_ptr< ccf::crypto::COSEParametersFactory > > COSEHeadersArray
Definition cose_sign.h:165
Definition cose_sign.h:168
COSESignError(const std::string &msg)
Definition cose_sign.h:169