@@ -458,13 +458,21 @@ impl Encrypted {
458458 let algo = s. read_string ( ) . map_err ( crate :: Error :: from) ?;
459459
460460 let sig = s. read_string ( ) . map_err ( crate :: Error :: from) ?;
461+
462+ let mut sig_buf = sig. to_vec ( ) ;
463+ let algo = Algorithm :: new ( str:: from_utf8 ( algo) . map_err ( crate :: Error :: from) ?)
464+ . map_err ( crate :: Error :: from) ?;
465+
466+ if algo == Algorithm :: SkEcdsaSha2NistP256 || algo == Algorithm :: SkEd25519 {
467+ // https://github.com/RustCrypto/SSH/issues/312
468+ let flags = s. read_byte ( ) . map_err ( crate :: Error :: from) ?;
469+ sig_buf. push ( flags) ;
470+ let counter = s. read_u32 ( ) . map_err ( crate :: Error :: from) ?;
471+ sig_buf. extend_from_slice ( & counter. to_be_bytes ( ) ) ;
472+ }
473+
461474 #[ allow( clippy:: indexing_slicing) ]
462- let sig = Signature :: new (
463- Algorithm :: new ( str:: from_utf8 ( algo) . map_err ( crate :: Error :: from) ?)
464- . map_err ( crate :: Error :: from) ?,
465- sig,
466- )
467- . map_err ( crate :: Error :: from) ?;
475+ let sig = Signature :: new ( algo, sig_buf) . map_err ( crate :: Error :: from) ?;
468476
469477 #[ allow( clippy:: indexing_slicing) ] // length checked
470478 let init = & buf[ 0 ..pos0] ;
@@ -562,13 +570,16 @@ impl Encrypted {
562570 Ok ( ( ) )
563571 }
564572 }
565- Err ( ssh_key:: Error :: AlgorithmUnknown )
566- | Err ( ssh_key:: Error :: AlgorithmUnsupported { .. } )
567- | Err ( ssh_key:: Error :: CertificateValidation { .. } ) => {
568- reject_auth_request ( until, & mut self . write , auth_request) . await ;
569- Ok ( ( ) )
570- }
571- Err ( e) => Err ( crate :: Error :: from ( e) . into ( ) ) ,
573+ Err ( e) => match e {
574+ ssh_key:: Error :: AlgorithmUnknown
575+ | ssh_key:: Error :: AlgorithmUnsupported { .. }
576+ | ssh_key:: Error :: CertificateValidation { .. } => {
577+ debug ! ( "public key error: {e}" ) ;
578+ reject_auth_request ( until, & mut self . write , auth_request) . await ;
579+ Ok ( ( ) )
580+ }
581+ e => Err ( crate :: Error :: from ( e) . into ( ) ) ,
582+ } ,
572583 }
573584 }
574585}
0 commit comments