From bee238c787711db338b19284c15bc32457992b91 Mon Sep 17 00:00:00 2001 From: Kamil Popielarz Date: Tue, 30 Apr 2024 14:58:49 +0000 Subject: [PATCH] chore(ecdsa):[CON-1119] Replace `Option` with just `EcdsaKeyId` in Quadruples --- rs/consensus/src/consensus/metrics.rs | 32 ++++++------ rs/consensus/src/ecdsa/payload_builder.rs | 2 +- rs/consensus/src/ecdsa/payload_verifier.rs | 2 +- rs/consensus/src/ecdsa/signer.rs | 4 +- rs/consensus/src/ecdsa/test_utils.rs | 2 +- rs/consensus/utils/src/lib.rs | 2 +- rs/protobuf/def/types/v1/idkg.proto | 11 +++-- rs/protobuf/src/gen/types/types.v1.rs | 8 --- rs/types/types/src/consensus/idkg.rs | 49 +++++++------------ rs/types/types/src/consensus/idkg/common.rs | 31 ++---------- rs/types/types/src/consensus/idkg/ecdsa.rs | 54 ++++++++------------- rs/types/types/src/exhaustive.rs | 31 +----------- 12 files changed, 72 insertions(+), 156 deletions(-) diff --git a/rs/consensus/src/consensus/metrics.rs b/rs/consensus/src/consensus/metrics.rs index f34fd7a2640..b20928f8ae3 100644 --- a/rs/consensus/src/consensus/metrics.rs +++ b/rs/consensus/src/consensus/metrics.rs @@ -158,8 +158,7 @@ impl BatchStats { } } -// TODO(kpop): remove this Option eventually -type CounterPerEcdsaKeyId = BTreeMap, usize>; +type CounterPerEcdsaKeyId = BTreeMap; // Ecdsa payload stats pub struct EcdsaStats { @@ -186,12 +185,12 @@ impl From<&EcdsaPayload> for EcdsaStats { && payload.idkg_transcripts.get(transcript_id).is_some() { *key_transcript_created - .entry(Some(payload.key_transcript.key_id.clone())) + .entry(payload.key_transcript.key_id.clone()) .or_default() += 1; } } - let keys = vec![None, Some(payload.key_transcript.key_id.clone())]; + let keys = vec![payload.key_transcript.key_id.clone()]; Self { key_transcript_created, @@ -200,9 +199,12 @@ impl From<&EcdsaPayload> for EcdsaStats { .values() .filter(|status| matches!(status, CompletedSignature::Unreported(_))) .count(), - available_quadruples: count_by_ecdsa_key_id(payload.available_quadruples.keys(), &keys), + available_quadruples: count_by_ecdsa_key_id( + payload.available_quadruples.values(), + &keys, + ), quadruples_in_creation: count_by_ecdsa_key_id( - payload.quadruples_in_creation.keys(), + payload.quadruples_in_creation.values(), &keys, ), ongoing_xnet_reshares: count_by_ecdsa_key_id( @@ -222,7 +224,7 @@ impl From<&EcdsaPayload> for EcdsaStats { fn count_by_ecdsa_key_id( collection: impl Iterator, - expected_keys: &Vec>, + expected_keys: &[EcdsaKeyId], ) -> CounterPerEcdsaKeyId { let mut counter_per_key_id = CounterPerEcdsaKeyId::new(); @@ -233,9 +235,7 @@ fn count_by_ecdsa_key_id( } for item in collection { - *counter_per_key_id - .entry(item.key_id().cloned()) - .or_default() += 1; + *counter_per_key_id.entry(item.key_id().clone()).or_default() += 1; } counter_per_key_id @@ -366,7 +366,7 @@ impl FinalizerMetrics { let set = |metric: &IntGaugeVec, counts: &CounterPerEcdsaKeyId| { for (key_id, count) in counts.iter() { metric - .with_label_values(&[&key_id_label(key_id.as_ref())]) + .with_label_values(&[&key_id_label(Some(key_id))]) .set(*count as i64); } }; @@ -374,7 +374,7 @@ impl FinalizerMetrics { let inc_by = |metric: &IntCounterVec, counts: &CounterPerEcdsaKeyId| { for (key_id, count) in counts.iter() { metric - .with_label_values(&[&key_id_label(key_id.as_ref())]) + .with_label_values(&[&key_id_label(Some(key_id))]) .inc_by(*count as u64); } }; @@ -803,7 +803,7 @@ impl EcdsaPayloadMetrics { } pub(crate) fn report(&self, payload: &EcdsaPayload) { - let expected_keys = vec![None, Some(payload.key_transcript.key_id.clone())]; + let expected_keys = vec![payload.key_transcript.key_id.clone()]; self.payload_metrics_set_without_key_id_label( "signature_agreements", @@ -811,11 +811,11 @@ impl EcdsaPayloadMetrics { ); self.payload_metrics_set( "available_quadruples", - count_by_ecdsa_key_id(payload.available_quadruples.keys(), &expected_keys), + count_by_ecdsa_key_id(payload.available_quadruples.values(), &expected_keys), ); self.payload_metrics_set( "quaruples_in_creation", - count_by_ecdsa_key_id(payload.quadruples_in_creation.keys(), &expected_keys), + count_by_ecdsa_key_id(payload.quadruples_in_creation.values(), &expected_keys), ); self.payload_metrics_set( "ongoing_xnet_reshares", @@ -836,7 +836,7 @@ impl EcdsaPayloadMetrics { fn payload_metrics_set(&self, label: &str, values: CounterPerEcdsaKeyId) { for (key_id, value) in values { self.payload_metrics - .with_label_values(&[label, &key_id_label(key_id.as_ref())]) + .with_label_values(&[label, &key_id_label(Some(&key_id))]) .set(value as i64); } } diff --git a/rs/consensus/src/ecdsa/payload_builder.rs b/rs/consensus/src/ecdsa/payload_builder.rs index b828452d28e..69f68e791a5 100644 --- a/rs/consensus/src/ecdsa/payload_builder.rs +++ b/rs/consensus/src/ecdsa/payload_builder.rs @@ -483,7 +483,7 @@ pub(crate) fn create_data_payload( { ecdsa_payload_metrics.payload_metrics_inc( "key_transcripts_created", - ecdsa_payload.key_transcript.key_id(), + Some(ecdsa_payload.key_transcript.key_id()), ); } diff --git a/rs/consensus/src/ecdsa/payload_verifier.rs b/rs/consensus/src/ecdsa/payload_verifier.rs index 9fd2ce85b9f..fef0f438c74 100644 --- a/rs/consensus/src/ecdsa/payload_verifier.rs +++ b/rs/consensus/src/ecdsa/payload_verifier.rs @@ -1084,7 +1084,7 @@ mod test { curr_payload.available_quadruples.insert( curr_payload.uid_generator.next_quadruple_id(), PreSignatureQuadrupleRef { - key_id: Some(curr_payload.key_transcript.key_id.clone()), + key_id: curr_payload.key_transcript.key_id.clone(), kappa_unmasked_ref: malicious_transcript_ref, lambda_masked_ref: masked_transcript_1, kappa_times_lambda_ref: masked_transcript_1, diff --git a/rs/consensus/src/ecdsa/signer.rs b/rs/consensus/src/ecdsa/signer.rs index 43234c756fb..3b0404e5ea3 100644 --- a/rs/consensus/src/ecdsa/signer.rs +++ b/rs/consensus/src/ecdsa/signer.rs @@ -18,7 +18,7 @@ use ic_replicated_state::ReplicatedState; use ic_types::artifact::EcdsaMessageId; use ic_types::consensus::idkg::{ ecdsa::ThresholdEcdsaSigInputsRef, sig_share_prefix, EcdsaBlockReader, EcdsaMessage, - EcdsaSigShare, EcdsaStats, HasEcdsaKeyId, RequestId, + EcdsaSigShare, EcdsaStats, RequestId, }; use ic_types::crypto::canister_threshold_sig::{ error::ThresholdEcdsaCombineSigSharesError, ThresholdEcdsaCombinedSignature, @@ -516,7 +516,7 @@ impl<'a> EcdsaSignatureBuilderImpl<'a> { }, |combined_signature| { self.metrics - .payload_metrics_inc("signatures_completed", request_id.key_id()); + .payload_metrics_inc("signatures_completed", None); Some(combined_signature) }, ) diff --git a/rs/consensus/src/ecdsa/test_utils.rs b/rs/consensus/src/ecdsa/test_utils.rs index 8c877568c1a..06d4fe54f5c 100644 --- a/rs/consensus/src/ecdsa/test_utils.rs +++ b/rs/consensus/src/ecdsa/test_utils.rs @@ -264,7 +264,7 @@ impl From<&ThresholdEcdsaSigInputs> for TestSigInputs { hashed_message: inputs.hashed_message().try_into().unwrap(), nonce: *inputs.nonce(), presig_quadruple_ref: PreSignatureQuadrupleRef { - key_id: Some(fake_ecdsa_key_id()), + key_id: fake_ecdsa_key_id(), kappa_unmasked_ref: UnmaskedTranscript::try_from((height, quad.kappa_unmasked())) .unwrap(), lambda_masked_ref: MaskedTranscript::try_from((height, quad.lambda_masked())) diff --git a/rs/consensus/utils/src/lib.rs b/rs/consensus/utils/src/lib.rs index 6f3d2336890..f6efb9d2f27 100644 --- a/rs/consensus/utils/src/lib.rs +++ b/rs/consensus/utils/src/lib.rs @@ -827,7 +827,7 @@ mod tests { key_unmasked.transcript_id = fake_transcript_id(id + 4); let h = Height::from(0); PreSignatureQuadrupleRef { - key_id: Some(EcdsaKeyId::from_str("Secp256k1:some_key").unwrap()), + key_id: EcdsaKeyId::from_str("Secp256k1:some_key").unwrap(), kappa_unmasked_ref: UnmaskedTranscript::try_from((h, &kappa_unmasked)).unwrap(), lambda_masked_ref: MaskedTranscript::try_from((h, &lambda_masked)).unwrap(), kappa_times_lambda_ref: MaskedTranscript::try_from((h, &kappa_times_lambda)).unwrap(), diff --git a/rs/protobuf/def/types/v1/idkg.proto b/rs/protobuf/def/types/v1/idkg.proto index d805ab34313..6948bec0e1d 100644 --- a/rs/protobuf/def/types/v1/idkg.proto +++ b/rs/protobuf/def/types/v1/idkg.proto @@ -50,17 +50,17 @@ message OngoingSignature { } message AvailableQuadruple { + reserved 3; + reserved "key_id"; uint64 quadruple_id = 1; PreSignatureQuadrupleRef quadruple = 2; - // Deprecated. Use `quadruple.key_id` instead. - registry.crypto.v1.EcdsaKeyId key_id = 3; } message QuadrupleInProgress { + reserved 3; + reserved "key_id"; uint64 quadruple_id = 1; QuadrupleInCreation quadruple = 2; - // Deprecated. Use `quadruple.key_id` instead. - registry.crypto.v1.EcdsaKeyId key_id = 3; } message AvailablePreSignature { @@ -86,10 +86,11 @@ message XnetReshareAgreement { } message RequestId { + reserved 4; + reserved "key_id"; bytes pseudo_random_id = 1; uint64 quadruple_id = 2; uint64 height = 3; - registry.crypto.v1.EcdsaKeyId key_id = 4; } message TranscriptRef { diff --git a/rs/protobuf/src/gen/types/types.v1.rs b/rs/protobuf/src/gen/types/types.v1.rs index cd3b0b61cc5..ffc3a838a66 100644 --- a/rs/protobuf/src/gen/types/types.v1.rs +++ b/rs/protobuf/src/gen/types/types.v1.rs @@ -493,9 +493,6 @@ pub struct AvailableQuadruple { pub quadruple_id: u64, #[prost(message, optional, tag = "2")] pub quadruple: ::core::option::Option, - /// Deprecated. Use `quadruple.key_id` instead. - #[prost(message, optional, tag = "3")] - pub key_id: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -505,9 +502,6 @@ pub struct QuadrupleInProgress { pub quadruple_id: u64, #[prost(message, optional, tag = "2")] pub quadruple: ::core::option::Option, - /// Deprecated. Use `quadruple.key_id` instead. - #[prost(message, optional, tag = "3")] - pub key_id: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -555,8 +549,6 @@ pub struct RequestId { pub quadruple_id: u64, #[prost(uint64, tag = "3")] pub height: u64, - #[prost(message, optional, tag = "4")] - pub key_id: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/rs/types/types/src/consensus/idkg.rs b/rs/types/types/src/consensus/idkg.rs index 5d6d2ca6386..ba34541e145 100644 --- a/rs/types/types/src/consensus/idkg.rs +++ b/rs/types/types/src/consensus/idkg.rs @@ -1462,7 +1462,6 @@ impl From<&EcdsaPayload> for pb::EcdsaPayload { for (quadruple_id, quadruple) in &payload.available_quadruples { available_quadruples.push(pb::AvailableQuadruple { quadruple_id: quadruple_id.id(), - key_id: quadruple_id.key_id().map(Into::into), quadruple: Some(quadruple.into()), }); } @@ -1472,7 +1471,6 @@ impl From<&EcdsaPayload> for pb::EcdsaPayload { for (quadruple_id, quadruple) in &payload.quadruples_in_creation { quadruples_in_creation.push(pb::QuadrupleInProgress { quadruple_id: quadruple_id.id(), - key_id: quadruple_id.key_id().map(Into::into), quadruple: Some(quadruple.into()), }); } @@ -1608,12 +1606,7 @@ impl TryFrom<&pb::EcdsaPayload> for EcdsaPayload { // available_quadruples let mut available_quadruples = BTreeMap::new(); for available_quadruple in &payload.available_quadruples { - let key_id = available_quadruple - .key_id - .clone() - .map(TryInto::try_into) - .transpose()?; - let quadruple_id = QuadrupleId(available_quadruple.quadruple_id, key_id); + let quadruple_id = QuadrupleId(available_quadruple.quadruple_id); let quadruple: PreSignatureQuadrupleRef = try_from_option_field( available_quadruple.quadruple.as_ref(), "EcdsaPayload::available_quadruple::quadruple", @@ -1621,7 +1614,7 @@ impl TryFrom<&pb::EcdsaPayload> for EcdsaPayload { available_quadruples.insert(quadruple_id, quadruple); } for available_pre_signature in &payload.available_pre_signatures { - let pre_signature_id = QuadrupleId(available_pre_signature.pre_signature_id, None); + let pre_signature_id = QuadrupleId(available_pre_signature.pre_signature_id); let pre_signature: PreSignatureRef = try_from_option_field( available_pre_signature.pre_signature.as_ref(), "EcdsaPayload::available_pre_signature::pre_signature", @@ -1637,12 +1630,7 @@ impl TryFrom<&pb::EcdsaPayload> for EcdsaPayload { // quadruples_in_creation let mut quadruples_in_creation = BTreeMap::new(); for quadruple_in_creation in &payload.quadruples_in_creation { - let key_id = quadruple_in_creation - .key_id - .clone() - .map(TryInto::try_into) - .transpose()?; - let quadruple_id = QuadrupleId(quadruple_in_creation.quadruple_id, key_id); + let quadruple_id = QuadrupleId(quadruple_in_creation.quadruple_id); let quadruple: QuadrupleInCreation = try_from_option_field( quadruple_in_creation.quadruple.as_ref(), "EcdsaPayload::quadruple_in_creation::quadruple", @@ -1650,7 +1638,7 @@ impl TryFrom<&pb::EcdsaPayload> for EcdsaPayload { quadruples_in_creation.insert(quadruple_id, quadruple); } for pre_signature_in_creation in &payload.pre_signatures_in_creation { - let pre_signature_id = QuadrupleId(pre_signature_in_creation.pre_signature_id, None); + let pre_signature_id = QuadrupleId(pre_signature_in_creation.pre_signature_id); let pre_signature: PreSignatureInCreation = try_from_option_field( pre_signature_in_creation.pre_signature.as_ref(), "EcdsaPayload::pre_signature_in_creation::pre_signature", @@ -1865,42 +1853,41 @@ impl From<&EcdsaMessage> for EcdsaArtifactId { pub trait HasEcdsaKeyId { /// Returns a reference to the [`EcdsaKeyId`] associated with the object. - // TODO(kpop): remove the Option once it's safe - fn key_id(&self) -> Option<&EcdsaKeyId>; + fn key_id(&self) -> &EcdsaKeyId; } -impl HasEcdsaKeyId for QuadrupleId { - fn key_id(&self) -> Option<&EcdsaKeyId> { - self.key_id() +impl HasEcdsaKeyId for QuadrupleInCreation { + fn key_id(&self) -> &EcdsaKeyId { + &self.key_id } } -impl HasEcdsaKeyId for EcdsaReshareRequest { - fn key_id(&self) -> Option<&EcdsaKeyId> { - Some(&self.key_id) +impl HasEcdsaKeyId for PreSignatureQuadrupleRef { + fn key_id(&self) -> &EcdsaKeyId { + &self.key_id } } -impl HasEcdsaKeyId for RequestId { - fn key_id(&self) -> Option<&EcdsaKeyId> { - self.quadruple_id.key_id() +impl HasEcdsaKeyId for EcdsaReshareRequest { + fn key_id(&self) -> &EcdsaKeyId { + &self.key_id } } impl HasEcdsaKeyId for EcdsaKeyTranscript { - fn key_id(&self) -> Option<&EcdsaKeyId> { - Some(&self.key_id) + fn key_id(&self) -> &EcdsaKeyId { + &self.key_id } } impl HasEcdsaKeyId for (T, U) { - fn key_id(&self) -> Option<&EcdsaKeyId> { + fn key_id(&self) -> &EcdsaKeyId { self.0.key_id() } } impl HasEcdsaKeyId for &T { - fn key_id(&self) -> Option<&EcdsaKeyId> { + fn key_id(&self) -> &EcdsaKeyId { (*self).key_id() } } diff --git a/rs/types/types/src/consensus/idkg/common.rs b/rs/types/types/src/consensus/idkg/common.rs index f087b24b38d..9910f53fd58 100644 --- a/rs/types/types/src/consensus/idkg/common.rs +++ b/rs/types/types/src/consensus/idkg/common.rs @@ -11,14 +11,13 @@ use crate::{Height, RegistryVersion}; use ic_base_types::NodeId; #[cfg(test)] use ic_exhaustive_derive::ExhaustiveSet; -use ic_management_canister_types::EcdsaKeyId; use ic_protobuf::proxy::{try_from_option_field, ProxyDecodeError}; use ic_protobuf::registry::subnet::v1 as subnet_pb; use ic_protobuf::types::v1 as pb; use serde::{Deserialize, Serialize}; use std::collections::BTreeSet; use std::convert::{AsMut, AsRef, TryFrom}; -use std::hash::{Hash, Hasher}; +use std::hash::Hash; use super::{ ecdsa::{PreSignatureQuadrupleRef, QuadrupleInCreation}, @@ -49,7 +48,6 @@ impl From for pb::RequestId { fn from(request_id: RequestId) -> Self { Self { quadruple_id: request_id.quadruple_id.id(), - key_id: request_id.quadruple_id.key_id().map(Into::into), pseudo_random_id: request_id.pseudo_random_id.to_vec(), height: request_id.height.get(), } @@ -68,14 +66,8 @@ impl TryFrom<&pb::RequestId> for RequestId { let mut pseudo_random_id = [0; 32]; pseudo_random_id.copy_from_slice(&request_id.pseudo_random_id); - let key_id = request_id - .key_id - .clone() - .map(EcdsaKeyId::try_from) - .transpose()?; - Ok(Self { - quadruple_id: QuadrupleId(request_id.quadruple_id, key_id), + quadruple_id: QuadrupleId(request_id.quadruple_id), pseudo_random_id, height: Height::from(request_id.height), }) @@ -83,31 +75,18 @@ impl TryFrom<&pb::RequestId> for RequestId { } } -#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq, Hash, Serialize, Deserialize)] #[cfg_attr(test, derive(ExhaustiveSet))] -// TODO(kpop): remove the second field -pub struct QuadrupleId(pub(crate) u64, pub(crate) Option); +pub struct QuadrupleId(pub(crate) u64); impl QuadrupleId { pub fn new(id: u64) -> Self { - Self(id, None) + Self(id) } pub fn id(&self) -> u64 { self.0 } - - pub fn key_id(&self) -> Option<&EcdsaKeyId> { - self.1.as_ref() - } -} - -// Since `QuadrupleId.0` is globally unique across all ecdsa key ids (this is guaranteed by the -// `EcdsaUIDGenerator`), we use only this field to compute the hash of the `QuadrupleId`. -impl Hash for QuadrupleId { - fn hash(&self, state: &mut H) { - self.id().hash(state); - } } #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Hash)] diff --git a/rs/types/types/src/consensus/idkg/ecdsa.rs b/rs/types/types/src/consensus/idkg/ecdsa.rs index 9b4b1d7f9f5..21d4fbd7707 100644 --- a/rs/types/types/src/consensus/idkg/ecdsa.rs +++ b/rs/types/types/src/consensus/idkg/ecdsa.rs @@ -26,7 +26,7 @@ use super::{ /// ECDSA Quadruple in creation. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct QuadrupleInCreation { - pub key_id: Option, + pub key_id: EcdsaKeyId, pub kappa_masked_config: Option, pub kappa_masked: Option, @@ -47,9 +47,8 @@ pub struct QuadrupleInCreation { impl Hash for QuadrupleInCreation { fn hash(&self, state: &mut H) { - if let Some(key_id) = &self.key_id { - key_id.hash(state); - } + self.key_id.hash(state); + if let Some(config) = &self.kappa_masked_config { config.hash(state); self.kappa_masked.hash(state); @@ -78,7 +77,7 @@ impl QuadrupleInCreation { lambda_config: RandomTranscriptParams, ) -> Self { Self { - key_id: Some(key_id), + key_id, kappa_masked_config: Some(kappa_masked_config), kappa_masked: None, lambda_config, @@ -100,7 +99,7 @@ impl QuadrupleInCreation { lambda_config: RandomTranscriptParams, ) -> Self { QuadrupleInCreation { - key_id: Some(key_id), + key_id, kappa_masked_config: None, kappa_masked: None, lambda_config, @@ -226,7 +225,7 @@ impl QuadrupleInCreation { impl From<&QuadrupleInCreation> for pb::QuadrupleInCreation { fn from(quadruple: &QuadrupleInCreation) -> Self { Self { - key_id: quadruple.key_id.as_ref().map(Into::into), + key_id: Some((&quadruple.key_id).into()), kappa_masked_config: quadruple .kappa_masked_config .as_ref() @@ -350,11 +349,10 @@ impl TryFrom<&pb::QuadrupleInCreation> for QuadrupleInCreation { (None, None) }; - let key_id = quadruple - .key_id - .clone() - .map(TryInto::try_into) - .transpose()?; + let key_id = try_from_option_field( + quadruple.key_id.clone(), + "QuadrupleInCreation::quadruple::key_id", + )?; Ok(Self { key_id, @@ -375,9 +373,10 @@ impl TryFrom<&pb::QuadrupleInCreation> for QuadrupleInCreation { /// Counterpart of PreSignatureQuadruple that holds transcript references, /// instead of the transcripts. -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[cfg_attr(test, derive(ExhaustiveSet))] pub struct PreSignatureQuadrupleRef { - pub key_id: Option, + pub key_id: EcdsaKeyId, pub kappa_unmasked_ref: UnmaskedTranscript, pub lambda_masked_ref: MaskedTranscript, pub kappa_times_lambda_ref: MaskedTranscript, @@ -385,20 +384,6 @@ pub struct PreSignatureQuadrupleRef { pub key_unmasked_ref: UnmaskedTranscript, } -impl Hash for PreSignatureQuadrupleRef { - fn hash(&self, state: &mut H) { - if let Some(key_id) = &self.key_id { - key_id.hash(state); - } - - self.kappa_unmasked_ref.hash(state); - self.lambda_masked_ref.hash(state); - self.kappa_times_lambda_ref.hash(state); - self.key_times_lambda_ref.hash(state); - self.key_unmasked_ref.hash(state); - } -} - #[derive(Clone, Debug)] pub enum PreSignatureQuadrupleError { KappaUnmasked(TranscriptLookupError), @@ -418,7 +403,7 @@ impl PreSignatureQuadrupleRef { key_unmasked_ref: UnmaskedTranscript, ) -> Self { Self { - key_id: Some(key_id), + key_id, kappa_unmasked_ref, lambda_masked_ref, kappa_times_lambda_ref, @@ -477,7 +462,7 @@ impl PreSignatureQuadrupleRef { impl From<&PreSignatureQuadrupleRef> for pb::PreSignatureQuadrupleRef { fn from(quadruple: &PreSignatureQuadrupleRef) -> Self { Self { - key_id: quadruple.key_id.as_ref().map(Into::into), + key_id: Some((&quadruple.key_id).into()), kappa_unmasked_ref: Some((&quadruple.kappa_unmasked_ref).into()), lambda_masked_ref: Some((&quadruple.lambda_masked_ref).into()), kappa_times_lambda_ref: Some((&quadruple.kappa_times_lambda_ref).into()), @@ -515,11 +500,10 @@ impl TryFrom<&pb::PreSignatureQuadrupleRef> for PreSignatureQuadrupleRef { "PreSignatureQuadrupleRef::quadruple::key_unmasked_ref", )?; - let key_id = quadruple - .key_id - .clone() - .map(TryInto::try_into) - .transpose()?; + let key_id = try_from_option_field( + quadruple.key_id.clone(), + "PreSignatureQuadrupleRef::quadruple::key_id", + )?; Ok(Self { key_id, diff --git a/rs/types/types/src/exhaustive.rs b/rs/types/types/src/exhaustive.rs index 074773f5f85..81fd0692809 100644 --- a/rs/types/types/src/exhaustive.rs +++ b/rs/types/types/src/exhaustive.rs @@ -683,7 +683,7 @@ impl ExhaustiveSet for QuadrupleInCreation { let mut result = DerivedQuadrupleInCreation::exhaustive_set(rng) .into_iter() .map(|q| QuadrupleInCreation { - key_id: Some(q.key_id), + key_id: q.key_id, kappa_masked_config: None, kappa_masked: None, lambda_config: q.random_config.clone(), @@ -699,7 +699,7 @@ impl ExhaustiveSet for QuadrupleInCreation { .collect::>(); result.push(QuadrupleInCreation { - key_id: Some(EcdsaKeyId::exhaustive_set(rng)[0].clone()), + key_id: EcdsaKeyId::exhaustive_set(rng)[0].clone(), kappa_masked_config: None, kappa_masked: None, lambda_config: RandomTranscriptParams::exhaustive_set(rng)[0].clone(), @@ -718,33 +718,6 @@ impl ExhaustiveSet for QuadrupleInCreation { } } -#[derive(Clone)] -#[cfg_attr(test, derive(ExhaustiveSet))] -pub struct PreSignatureQuadrupleRefsOnly { - pub key_id: EcdsaKeyId, - pub kappa_unmasked_ref: UnmaskedTranscript, - pub lambda_masked_ref: MaskedTranscript, - pub kappa_times_lambda_ref: MaskedTranscript, - pub key_times_lambda_ref: MaskedTranscript, - pub key_unmasked_ref: UnmaskedTranscript, -} - -impl ExhaustiveSet for PreSignatureQuadrupleRef { - fn exhaustive_set(rng: &mut R) -> Vec { - PreSignatureQuadrupleRefsOnly::exhaustive_set(rng) - .into_iter() - .map(|q| PreSignatureQuadrupleRef { - key_id: Some(q.key_id), - kappa_unmasked_ref: q.kappa_unmasked_ref, - lambda_masked_ref: q.lambda_masked_ref, - kappa_times_lambda_ref: q.kappa_times_lambda_ref, - key_times_lambda_ref: q.key_times_lambda_ref, - key_unmasked_ref: q.key_unmasked_ref, - }) - .collect() - } -} - #[derive(Clone)] #[cfg_attr(test, derive(ExhaustiveSet))] pub struct DerivedEcdsaReshareRequest {