@@ -85,6 +85,25 @@ impl MultisigVerifier {
85
85
zklogin_verifier. verify ( message, zklogin_authenticator. as_ref ( ) )
86
86
}
87
87
88
+ #[ cfg( not( feature = "passkey" ) ) ]
89
+ ( MultisigMemberPublicKey :: Passkey ( _) , MultisigMemberSignature :: Passkey ( _) ) => Err (
90
+ SignatureError :: from_source ( "support for passkey is not enabled" ) ,
91
+ ) ,
92
+ #[ cfg( feature = "passkey" ) ]
93
+ (
94
+ MultisigMemberPublicKey :: Passkey ( passkey_public_key) ,
95
+ MultisigMemberSignature :: Passkey ( passkey_authenticator) ,
96
+ ) => {
97
+ // Verify that the member pubkey matches the authenticator
98
+ if passkey_public_key != & passkey_authenticator. public_key ( ) {
99
+ return Err ( SignatureError :: from_source (
100
+ "member passkey public_key does not match authenticator" ,
101
+ ) ) ;
102
+ }
103
+
104
+ crate :: passkey:: PasskeyVerifier :: default ( ) . verify ( message, passkey_authenticator)
105
+ }
106
+
88
107
_ => Err ( SignatureError :: from_source (
89
108
"member and signature scheme do not match" ,
90
109
) ) ,
@@ -401,8 +420,16 @@ fn multisig_pubkey_and_signature_from_user_signature(
401
420
) )
402
421
}
403
422
404
- UserSignature :: Multisig ( _) | UserSignature :: Passkey ( _) => {
405
- Err ( SignatureError :: from_source ( "invalid siganture scheme" ) )
406
- }
423
+ #[ cfg( not( feature = "passkey" ) ) ]
424
+ UserSignature :: Passkey ( _) => Err ( SignatureError :: from_source (
425
+ "support for passkey is not enabled" ,
426
+ ) ) ,
427
+ #[ cfg( feature = "passkey" ) ]
428
+ UserSignature :: Passkey ( passkey_authenticator) => Ok ( (
429
+ MultisigMemberPublicKey :: Passkey ( passkey_authenticator. public_key ( ) ) ,
430
+ MultisigMemberSignature :: Passkey ( passkey_authenticator) ,
431
+ ) ) ,
432
+
433
+ UserSignature :: Multisig ( _) => Err ( SignatureError :: from_source ( "invalid siganture scheme" ) ) ,
407
434
}
408
435
}
0 commit comments