Skip to main content

iota_types/
multisig.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5pub 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}