╭ changed ───────╮ │src/test/ssh.zig│ ╰────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────╮ │13 // a post-auth session with deterministic ciphers, for exercising the packet │ │14 // pump independently of the full handshake below. initialize in place. │ │15 const TestSession = struct { │ │16 - const key = [_]u8{0x5a} ** 64; │ │16 + const key: [64]u8 = @splat(0x5a); │ │17 const Channel = @typeInfo(@FieldType(proto.SessionCtx, "channel")).pointer.child;│ │18 reader: std.Io.Reader = undefined, │ │19 output: [2048]u8 = undefined, │ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │157 } │ │158 │ │159 test "fingerprint format matches openssh layout" { │ │160 - const seed = [_]u8{0x42} ** Ed25519.KeyPair.seed_length; │ │160 + const seed: [Ed25519.KeyPair.seed_length]u8 = @splat(0x42); │ │161 const keypair = try Ed25519.KeyPair.generateDeterministic(seed); │ │162 │ │163 // SSH wire-format pubkey blob: string "ssh-ed25519" || string raw_pubkey.│ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────╮ │252 test "ignored packets do not count as connection activity" {│ │253 const io = std.testing.io; │ │254 const allocator = std.testing.allocator; │ │255 - const key_material = [_]u8{0x5A} ** 64; │ │255 + const key_material: [64]u8 = @splat(0x5A); │ │256 │ │257 var sender = proto.Cipher.init(&key_material, 0); │ │258 var encoded_buf: [128]u8 = undefined; │ ╰─────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────╮ │353 // 5. replies KEX_ECDH_REPLY with K_S (host key blob), q_s, signature│ │354 // │ │355 // client verifies the signature against K_S — MITM defense. │ │356 - const client_eph = try newClientEphemeral(); │ │356 + const client_eph = newClientEphemeral(); │ │357 { │ │358 var pkt: std.ArrayList(u8) = .empty; │ │359 defer pkt.deinit(allocator); │ ╰────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────╮ │674 const skex = try proto.readPlainPacket(allocator, cr);│ │675 defer allocator.free(skex); │ │676 │ │677 - const eph = try newClientEphemeral(); │ │677 + const eph = newClientEphemeral(); │ │678 { │ │679 var pkt: std.ArrayList(u8) = .empty; │ │680 defer pkt.deinit(allocator); │ ╰───────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────╮ │763 try std.testing.expectEqualSlices(u8, pubkey_blob.items, accepted_blob);│ │764 } │ │765 │ │766 - const wrong_session = [_]u8{0xFF} ** Sha256.digest_length; │ │766 + const wrong_session: [Sha256.digest_length]u8 = @splat(0xFF); │ │767 for ([_]struct { │ │768 sign_session: []const u8, │ │769 sign_user: []const u8, │ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │ 994 // deterministic keys so failures don't depend on RNG state. │ │ 995 │ │ 996 fn newHostKey() !proto.HostKey { │ │ 997 - const seed = [_]u8{0xAA} ** Ed25519.KeyPair.seed_length; │ │ 997 + const seed: [Ed25519.KeyPair.seed_length]u8 = @splat(0xAA); │ │ 998 return .{ .keypair = try Ed25519.KeyPair.generateDeterministic(seed) };│ │ 999 } │ │1000 │ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────╮ │1001 fn newUserKeypair() !Ed25519.KeyPair { │ │1002 - const seed = [_]u8{0xBB} ** Ed25519.KeyPair.seed_length; │ │1002 + const seed: [Ed25519.KeyPair.seed_length]u8 = @splat(0xBB);│ │1003 return try Ed25519.KeyPair.generateDeterministic(seed); │ │1004 } │ │1005 │ ╰─────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────╮ │1006 -fn newClientEphemeral() !X25519.KeyPair { │ │1007 - const seed = [_]u8{0xCC} ** X25519.seed_length; │ │1008 - return try X25519.KeyPair.generateDeterministic(seed);│ │1006 +fn newClientEphemeral() X25519.KeyPair { │ │1007 + const seed: [X25519.seed_length]u8 = @splat(0xCC); │ │1008 + return X25519.KeyPair.generateDeterministic(seed); │ │1009 } │ │1010 │ ╰────────────────────────────────────────────────────────────────╯