edit in thrussh/src/sshbuffer.rs at line 27
edit in thrussh/src/sshbuffer.rs at line 37
edit in thrussh/src/session.rs at line 70
+ if self.write_buffer.strict {
+ self.write_buffer.seqn = Wrapping(0);
+ }
edit in thrussh/src/session.rs at line 419
+ pub nonstrict_packets_received: bool,
edit in thrussh/src/session.rs at line 433
+ nonstrict_packets_received: false,
edit in thrussh/src/session.rs at line 448
+ nonstrict_packets_received: false,
edit in thrussh/src/server/mod.rs at line 619
+ nonstrict_packets_received: false,
replacement in thrussh/src/server/mod.rs at line 646
[5.223854]→[5.223854:223899](∅→∅) − Some(Kex::KexInit(kexinit)) => {
+ Some(Kex::KexInit(mut kexinit)) => {
+ // Two cases: either we already know the algorithm,
+ // meaning that this is a re-keying. Or we don't
+ // meaning this is the initial KEXINIT packet.
+ //
+ // In all other cases, this is an error.
edit in thrussh/src/server/mod.rs at line 653
+ let nonstrict_received = kexinit.nonstrict_packets_received;
replacement in thrussh/src/server/mod.rs at line 660
[5.224254]→[5.224254:224294](∅→∅) + if session.common.write_buffer.strict && nonstrict_received {
+ return Err(Error::KexInit.into())
+ }
replacement in thrussh/src/server/mod.rs at line 664
[5.224319]→[5.224319:224496](∅→∅) − // Else, i.e. if the other side has not started
− // the key exchange, process its packets by simple
− // not returning.
+ kexinit.nonstrict_packets_received = true;
edit in thrussh/src/server/mod.rs at line 681
[4.1352]→[5.224889:224925](∅→∅),
[5.224889]→[5.224889:224925](∅→∅) edit in thrussh/src/server/mod.rs at line 694
[5.225404]→[5.225404:225440](∅→∅) edit in thrussh/src/server/mod.rs at line 697
[5.225529]→[5.225529:225565](∅→∅) edit in thrussh/src/server/kex.rs at line 34
+ write_buffer.strict = algo.strict_kex;
edit in thrussh/src/negotiation.rs at line 36
replacement in thrussh/src/negotiation.rs at line 57
[3.15373]→[3.15373:15406](∅→∅) − kex: &[kex::CURVE25519],
+ kex: &[kex::CURVE25519, kex::STRICT],
replacement in thrussh/src/negotiation.rs at line 71
[3.15809]→[3.15809:15842](∅→∅) − kex: &[kex::CURVE25519],
+ kex: &[kex::CURVE25519, kex::STRICT],
replacement in thrussh/src/negotiation.rs at line 80
[5.270122]→[5.270122:270155](∅→∅) − kex: &[kex::CURVE25519],
+ kex: &[kex::CURVE25519, kex::STRICT],
replacement in thrussh/src/negotiation.rs at line 89
− kex: &[kex::CURVE25519],
+ kex: &[kex::CURVE25519, kex::STRICT],
replacement in thrussh/src/negotiation.rs at line 97
[5.270416]→[5.270416:270449](∅→∅) − kex: &[kex::CURVE25519],
+ kex: &[kex::CURVE25519, kex::STRICT],
edit in thrussh/src/negotiation.rs at line 178
+ let client_supports_strict = Self::select(&[kex::STRICT], kex_string).is_some();
+ let server_supports_strict = Self::select(&[kex::STRICT], kex_string).is_some();
+
edit in thrussh/src/negotiation.rs at line 243
+ strict_kex: client_supports_strict && server_supports_strict
edit in thrussh/src/kex.rs at line 48
+ pub const STRICT: Name = Name("kex-strict-c-v00@openssh.com");
edit in thrussh/src/client/mod.rs at line 1000
+ nonstrict_packets_received: false,
replacement in thrussh/src/client/mod.rs at line 1114
[5.369605]→[5.369605:369646](∅→∅) − Some(Kex::KexInit(kexinit)) => {
+ Some(Kex::KexInit(mut kexinit)) => {
edit in thrussh/src/client/mod.rs at line 1119
+ let nonstrict_received = kexinit.nonstrict_packets_received;
edit in thrussh/src/client/mod.rs at line 1126
+ if session.common.write_buffer.strict && nonstrict_received {
+ return Err(Error::KexInit.into())
+ }
edit in thrussh/src/client/mod.rs at line 1130
+ } else {
+ kexinit.nonstrict_packets_received = true;
+ session.common.kex = Some(Kex::KexInit(kexinit))
edit in thrussh/src/client/kex.rs at line 28
+
+ write_buffer.strict = algo.strict_kex;
replacement in README.md at line 23
[2.601]→[5.442203:442349](∅→∅),
[5.442203]→[5.442203:442349](∅→∅) − Thrussh has a full disclosure vulnerability policy.
− Please do NOT attempt to report any security vulnerability in this code privately to anybody.
+ Thrussh has a responsible disclosure vulnerability policy. Please contact [contact@pijul.org](mailto:contact@pijul.org) if you have identified a security issue.