diff --git a/willow/proto/willow/messages.proto b/willow/proto/willow/messages.proto index 3b062e4..c378bdd 100644 --- a/willow/proto/willow/messages.proto +++ b/willow/proto/willow/messages.proto @@ -127,3 +127,8 @@ message RecoveryResponse { message VerifyKeyContributionsRequest { repeated KeyContribution key_contributions = 1; } + +// Finalized partial decryption after aggregating responses from decryptors. +message FinalizedPartialDecryption { + ShellAhePartialDecryption partial_decryption_sum = 1; +} diff --git a/willow/protocol/messages.rs b/willow/protocol/messages.rs index 7b64297..718dd1f 100644 --- a/willow/protocol/messages.rs +++ b/willow/protocol/messages.rs @@ -19,6 +19,7 @@ use messages_rust_proto::{ CiphertextContribution as CiphertextContributionProto, ClientMessage as ClientMessageProto, DPSetupContribution as DPSetupContributionProto, DecryptionRequestContribution as DecryptionRequestContributionProto, + FinalizedPartialDecryption as FinalizedPartialDecryptionProto, KeyContribution as KeyContributionProto, PartialDecryptionRequest as PartialDecryptionRequestProto, PartialDecryptionResponse as PartialDecryptionResponseProto, @@ -713,6 +714,44 @@ where } } +impl<'a, C, Vahe> ToProto<&'a C> for FinalizedPartialDecryption +where + C: HasVahe, + Vahe: VaheBase + 'a, + Vahe::PartialDecryption: ToProto<&'a Vahe, Proto = ShellAhePartialDecryption>, +{ + type Proto = FinalizedPartialDecryptionProto; + + fn to_proto(&self, context: &'a C) -> Result { + let vahe = context.vahe(); + Ok(proto!(FinalizedPartialDecryptionProto { + partial_decryption_sum: self.partial_decryption_sum.to_proto(vahe)?, + })) + } +} + +impl<'a, C, Vahe> FromProto<&'a C> for FinalizedPartialDecryption +where + C: HasVahe, + Vahe: VaheBase + 'a, + Vahe::PartialDecryption: FromProto<&'a Vahe, Proto = ShellAhePartialDecryption>, +{ + type Proto = FinalizedPartialDecryptionProto; + + fn from_proto( + proto: impl AsView, + context: &'a C, + ) -> Result { + let proto = proto.as_view(); + Ok(FinalizedPartialDecryption { + partial_decryption_sum: Vahe::PartialDecryption::from_proto( + proto.partial_decryption_sum(), + context.vahe(), + )?, + }) + } +} + /// Tracks a multi-decryptor's progress through the protocol. #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub enum DecryptorStatus {