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