13#include <fmt/format.h>
26 if (phdr.
cty.has_value())
28 if (std::holds_alternative<int64_t>(phdr.
cty.value()))
31 obj.set_int64(
"cty", std::get<int64_t>(phdr.
cty.value())));
33 else if (std::holds_alternative<std::string>(phdr.
cty.value()))
36 "cty", ctx.
new_string(std::get<std::string>(phdr.
cty.value()))));
42 for (
const auto& der_cert : phdr.
x5chain)
58 if (phdr.
cwt.
iat.has_value())
62 if (phdr.
cwt.
svn.has_value())
113 for (
size_t k = 0; k < receipt.
leaves.size(); ++k)
115 const auto& leaf = receipt.
leaves[k];
117 if (!leaf.claims_digest.empty())
119 auto hex = ccf::ds::to_hex(leaf.claims_digest);
122 if (!leaf.commit_evidence.empty())
125 "commit_evidence", ctx.
new_string(leaf.commit_evidence)));
127 if (!leaf.write_set_digest.empty())
129 auto hex = ccf::ds::to_hex(leaf.write_set_digest);
131 leaf_obj.set(
"write_set_digest", ctx.
new_string(hex)));
146 static std::optional<std::string> apply_node_join_policy(
147 const std::string& policy_script,
148 const std::vector<TransparentStatementPolicyInput>& statements)
156 policy_script,
"apply",
"node_join_policy");
158 catch (
const std::exception& e)
160 return fmt::format(
"Invalid code update policy module: {}", e.what());
165 for (
size_t i = 0; i < statements.size(); ++i)
167 auto ts_obj = interpreter.
new_obj();
170 protected_header_to_js_val(interpreter, statements[i].phdr);
173 auto receipts_arr = interpreter.
new_array();
174 for (
size_t j = 0; j < statements[i].receipts.size(); ++j)
177 receipt_to_js_val(interpreter, statements[i].receipts[j]);
191 if (result.is_exception())
195 "Code update policy threw: {}\n{}",
197 trace.value_or(
"<no trace>"));
203 return interpreter.
to_str(result);
206 if (JS_IsBool(result.val) != 0 && result.is_true())
213 "Unexpected return value from code update policy: {}",
214 interpreter.
to_str(result).value_or(
"<unknown>"));
#define JS_CHECK_OR_THROW(val)
Definition checks.h:23
JSWrappedValue get_exported_function(const std::string &code, const std::string &func, const std::string &path)
Definition context.cpp:248
JSWrappedValue new_obj() const
Definition context.cpp:325
std::optional< std::string > to_str(const JSWrappedValue &x) const
Definition context.cpp:522
std::pair< std::string, std::optional< std::string > > error_message()
Definition context.cpp:180
JSWrappedValue new_string(const std::string_view &str) const
Definition context.cpp:361
JSWrappedValue call_with_rt_options(const JSWrappedValue &f, const std::vector< JSWrappedValue > &argv, const std::optional< ccf::JSRuntimeOptions > &options, RuntimeLimitsPolicy policy)
Definition context.cpp:463
JSWrappedValue new_array() const
Definition context.cpp:335
ccf::crypto::Pem cert_der_to_pem(const std::vector< uint8_t > &der)
Definition verifier.cpp:33
Definition js_policy.h:18
std::string txid
Definition cose_common.h:167
Definition cose_common.h:171
CwtClaims cwt
Definition cose_common.h:174
CcfClaims ccf
Definition cose_common.h:175
std::vector< uint8_t > kid
Definition cose_common.h:173
int vds
Definition cose_common.h:176
int alg
Definition cose_common.h:172
std::optional< int64_t > svn
Definition cose_common.h:59
std::string sub
Definition cose_common.h:58
std::optional< int64_t > iat
Definition cose_common.h:56
std::string iss
Definition cose_common.h:57
Definition wrapped_value.h:13