╭ changed ─────────────────╮ │src/serve_ssh_protocol.zig│ ╰──────────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │988 exchange_hash: []const u8, │ │989 session_id: []const u8, │ │990 out: *SessionKeys, │ │991 + /// see computeExchangeHash — must match the KEX algorithm's K encoding.│ │992 + k_is_string: bool, │ │993 ) !void { │ │994 // pre-build the K || H prefix once; reused for every derivation │ │995 var prefix: std.ArrayList(u8) = .empty; │ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────╮ │ 996 defer prefix.deinit(allocator); │ │ 941 - try writeMpint(&prefix, allocator, shared_secret); │ │ 997 + if (k_is_string) { │ │ 998 + try writeStringField(&prefix, allocator, shared_secret); │ │ 999 + } else { │ │1000 + try writeMpint(&prefix, allocator, shared_secret); │ │1001 + } │ │1002 try prefix.appendSlice(allocator, exchange_hash); │ │1003 │ │1004 try deriveKey(allocator, prefix.items, 'A', session_id, &out.cs_iv);│ ╰──────────────────────────────────────────────────────────────────────────────╯