@@ -198,11 +198,16 @@ namespace ccf
198
198
199
199
void set_service_signing_identity (
200
200
std::shared_ptr<ccf::crypto::KeyPair_OpenSSL> service_kp_,
201
- const COSESignaturesConfig& cose_signatures) override
201
+ const ccf:: COSESignaturesConfig& cose_signatures) override
202
202
{
203
203
std::ignore = std::move (service_kp_);
204
204
}
205
205
206
+ const ccf::COSESignaturesConfig& get_cose_signatures_config () override
207
+ {
208
+ throw std::logic_error (" Unimplemented" );
209
+ }
210
+
206
211
ccf::crypto::Sha256Hash get_replicated_state_root () override
207
212
{
208
213
return ccf::crypto::Sha256Hash (std::to_string (version));
@@ -323,7 +328,7 @@ namespace ccf
323
328
ccf::crypto::KeyPair& node_kp;
324
329
ccf::crypto::KeyPair_OpenSSL& service_kp;
325
330
ccf::crypto::Pem& endorsed_cert;
326
- const COSESignaturesConfig& cose_signatures_config;
331
+ const ccf:: COSESignaturesConfig& cose_signatures_config;
327
332
328
333
public:
329
334
MerkleTreeHistoryPendingTx (
@@ -334,7 +339,7 @@ namespace ccf
334
339
ccf::crypto::KeyPair& node_kp_,
335
340
ccf::crypto::KeyPair_OpenSSL& service_kp_,
336
341
ccf::crypto::Pem& endorsed_cert_,
337
- const COSESignaturesConfig& cose_signatures_config_) :
342
+ const ccf:: COSESignaturesConfig& cose_signatures_config_) :
338
343
txid (txid_),
339
344
store (store_),
340
345
history (history_),
@@ -566,7 +571,6 @@ namespace ccf
566
571
T replicated_state_tree;
567
572
568
573
ccf::crypto::KeyPair& node_kp;
569
- std::shared_ptr<ccf::crypto::KeyPair_OpenSSL> service_kp{};
570
574
ccf::crypto::COSEVerifierUniquePtr cose_verifier{};
571
575
std::vector<uint8_t > cose_cert_cached{};
572
576
@@ -580,7 +584,14 @@ namespace ccf
580
584
ccf::kv::Term term_of_next_version;
581
585
582
586
std::optional<ccf::crypto::Pem> endorsed_cert = std::nullopt;
583
- COSESignaturesConfig cose_signatures_config;
587
+
588
+ struct ServiceSigningIdentity
589
+ {
590
+ const std::shared_ptr<ccf::crypto::KeyPair_OpenSSL> service_kp;
591
+ const ccf::COSESignaturesConfig cose_signatures_config;
592
+ };
593
+
594
+ std::optional<ServiceSigningIdentity> signing_identity = std::nullopt;
584
595
585
596
public:
586
597
HashedTxHistory (
@@ -604,14 +615,33 @@ namespace ccf
604
615
605
616
void set_service_signing_identity (
606
617
std::shared_ptr<ccf::crypto::KeyPair_OpenSSL> service_kp_,
607
- const COSESignaturesConfig& cose_signatures_config_) override
618
+ const ccf:: COSESignaturesConfig& cose_signatures_config_) override
608
619
{
609
- service_kp = std::move (service_kp_);
610
- cose_signatures_config = cose_signatures_config_;
620
+ if (signing_identity.has_value ())
621
+ {
622
+ throw std::logic_error (
623
+ " Called set_service_signing_identity() multiple times" );
624
+ }
625
+
626
+ signing_identity.emplace (
627
+ ServiceSigningIdentity{service_kp_, cose_signatures_config_});
628
+
611
629
LOG_INFO_FMT (
612
630
" Setting service signing identity to iss: {} sub: {}" ,
613
- cose_signatures_config.issuer ,
614
- cose_signatures_config.subject );
631
+ cose_signatures_config_.issuer ,
632
+ cose_signatures_config_.subject );
633
+ }
634
+
635
+ const ccf::COSESignaturesConfig& get_cose_signatures_config () override
636
+ {
637
+ if (!signing_identity.has_value ())
638
+ {
639
+ throw std::logic_error (
640
+ " Called get_cose_signatures_config() before "
641
+ " set_service_signing_identity()" );
642
+ }
643
+
644
+ return signing_identity->cose_signatures_config ;
615
645
}
616
646
617
647
void start_signature_emit_timer () override
@@ -870,7 +900,7 @@ namespace ccf
870
900
871
901
LOG_DEBUG_FMT (" Signed at {} in view: {}" , txid.version , txid.term );
872
902
873
- if (!service_kp )
903
+ if (!signing_identity. has_value () )
874
904
{
875
905
throw std::logic_error (
876
906
fmt::format (" No service key has been set yet to sign" ));
@@ -884,9 +914,9 @@ namespace ccf
884
914
*this ,
885
915
id,
886
916
node_kp,
887
- *service_kp,
917
+ *signing_identity-> service_kp ,
888
918
endorsed_cert.value (),
889
- cose_signatures_config),
919
+ signing_identity-> cose_signatures_config ),
890
920
true );
891
921
}
892
922
0 commit comments