1pub use enum_dispatch::enum_dispatch;
6use iota_sdk_crypto::{Verifier, multisig::MultisigVerifier};
7use iota_sdk_types::{
8 Address,
9 crypto::{IntentMessage, MultisigAggregatedSignature},
10};
11use serde::Serialize;
12
13use crate::{
14 error::IotaError,
15 signature::{AuthenticatorTrait, VerifyParams},
16};
17
18#[cfg(test)]
19#[path = "unit_tests/multisig_tests.rs"]
20mod multisig_tests;
21
22impl AuthenticatorTrait for MultisigAggregatedSignature {
23 fn verify_claims<T>(
24 &self,
25 intent_message: &IntentMessage<T>,
26 multisig_address: Address,
27 verify_params: &VerifyParams,
28 ) -> Result<(), IotaError>
29 where
30 T: Serialize,
31 {
32 let digest = intent_message.signing_digest();
33 let verifier = MultisigVerifier::new()
34 .with_address(multisig_address)
35 .with_accept_passkey_in_multisig(verify_params.accept_passkey_in_multisig)
36 .with_additional_multisig_checks(verify_params.additional_multisig_checks);
37
38 verifier
39 .verify(&*digest, self)
40 .map_err(|e| IotaError::InvalidSignature {
41 error: format!("Invalid multisig: {e}"),
42 })
43 }
44}