Skip to main content

iota_types/
passkey_authenticator.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use iota_sdk_crypto::{Verifier, passkey::PasskeyVerifier};
6pub use iota_sdk_types::crypto::PasskeyAuthenticator;
7use iota_sdk_types::{Address, crypto::IntentMessage};
8use serde::Serialize;
9
10use crate::{
11    error::{IotaError, IotaResult},
12    signature::{AuthenticatorTrait, VerifyParams},
13};
14
15#[cfg(test)]
16#[path = "unit_tests/passkey_authenticator_test.rs"]
17mod passkey_authenticator_test;
18
19impl AuthenticatorTrait for PasskeyAuthenticator {
20    /// Verify an intent message of a transaction with an passkey authenticator.
21    fn verify_claims<T>(
22        &self,
23        intent_msg: &IntentMessage<T>,
24        author: Address,
25        _aux_verify_data: &VerifyParams,
26    ) -> IotaResult
27    where
28        T: Serialize,
29    {
30        let digest = intent_msg.signing_digest();
31
32        PasskeyVerifier::new()
33            .with_address(author)
34            .verify(&*digest, self)
35            .map_err(|e| IotaError::InvalidSignature {
36                error: format!("Invalid passkey authentication: {e}"),
37            })
38    }
39}