@@ -530,7 +530,10 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
530530 debug_now ! ( "CTAP2.PIN..." ) ;
531531 // info_now!("{:?}", parameters);
532532
533- let pin_protocol = self . parse_pin_protocol ( parameters. pin_protocol ) ?;
533+ let pin_protocol = parameters
534+ . pin_protocol
535+ . ok_or ( Error :: MissingParameter )
536+ . and_then ( |pin_protocol| self . parse_pin_protocol ( pin_protocol) ) ;
534537 let mut response = ctap2:: client_pin:: Response :: default ( ) ;
535538
536539 match parameters. sub_command {
@@ -543,6 +546,7 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
543546 Subcommand :: GetKeyAgreement => {
544547 debug_now ! ( "CTAP2.Pin.GetKeyAgreement" ) ;
545548
549+ let pin_protocol = pin_protocol?;
546550 response. key_agreement = Some ( self . pin_protocol ( pin_protocol) . key_agreement_key ( ) ) ;
547551 }
548552
@@ -567,6 +571,7 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
567571 return Err ( Error :: MissingParameter ) ;
568572 }
569573 } ;
574+ let pin_protocol = pin_protocol?;
570575
571576 // 2. is pin already set
572577 if self . state . persistent . pin_is_set ( ) {
@@ -624,6 +629,7 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
624629 return Err ( Error :: MissingParameter ) ;
625630 }
626631 } ;
632+ let pin_protocol = pin_protocol?;
627633
628634 // 2. fail if no retries left
629635 self . state . pin_blocked ( ) ?;
@@ -679,7 +685,7 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
679685 . ok_or ( Error :: MissingParameter ) ?;
680686
681687 // 2. Check PIN protocol
682- let pin_protocol = self . parse_pin_protocol ( parameters . pin_protocol ) ?;
688+ let pin_protocol = pin_protocol?;
683689
684690 // 3. + 4. Check invalid parameters
685691 if parameters. permissions . is_some ( ) || parameters. rp_id . is_some ( ) {
@@ -744,7 +750,7 @@ impl<UP: UserPresence, T: TrussedRequirements> Authenticator for crate::Authenti
744750 let permissions = parameters. permissions . ok_or ( Error :: MissingParameter ) ?;
745751
746752 // 2. Check PIN protocol
747- let pin_protocol = self . parse_pin_protocol ( parameters . pin_protocol ) ?;
753+ let pin_protocol = pin_protocol?;
748754
749755 // 3. Check that permissions are not empty
750756 let permissions = Permissions :: from_bits_truncate ( permissions) ;
0 commit comments