Follow-up from #748.
The TLS-PSK TCP tunnel transport for iOS 18.2+ (Apple removed QUIC) is implemented and the TLS-PSK client crypto is validated against OpenSSL (tlspsk_openssl_test.go, cipher TLS_PSK_WITH_AES_256_GCM_SHA384), but the full transport has never been exercised against a real device.
Blocker
ManualPairAndConnectToTunnelTCP uses the RemotePairing network path (FindDeviceInterfaceAddress / mDNS _remoted._tcp), which is not reachable over USB — it times out on a USB-tethered device (USB already works via the lockdown tunnel). It needs a Wi-Fi / network-reachable iOS 18.2+ device (paired, on the LAN / Tailscale).
To do once such a device is available
Done / not blocking
- TLS-PSK 1.2 plain-PSK client (
ios/tunnel/tlspsk) — validated vs openssl s_server -psk -cipher PSK-AES256-GCM-SHA384 -tls1_2 (handshake + data round-trip).
createTcpTunnelListener + ManualPairAndConnectToTunnelTCP wiring — builds, vets, reuses the validated lockdown data plane.
🤖 Generated with Claude Code
Follow-up from #748.
The TLS-PSK TCP tunnel transport for iOS 18.2+ (Apple removed QUIC) is implemented and the TLS-PSK client crypto is validated against OpenSSL (
tlspsk_openssl_test.go, cipherTLS_PSK_WITH_AES_256_GCM_SHA384), but the full transport has never been exercised against a real device.Blocker
ManualPairAndConnectToTunnelTCPuses the RemotePairing network path (FindDeviceInterfaceAddress/ mDNS_remoted._tcp), which is not reachable over USB — it times out on a USB-tethered device (USB already works via the lockdown tunnel). It needs a Wi-Fi / network-reachable iOS 18.2+ device (paired, on the LAN / Tailscale).To do once such a device is available
TCP_PSK_UDID=<udid> go test -tags e2e -run TestTCPPSKTunnelE2E -v ./ios/tunnel/and confirm the TLS-PSK tunnel establishes (RSD reachable through it).rsd ls,screenshot,syslog).connectToTunnelLockdown) should request the larger MTU (pymd3 uses 16000 for the TCP tunnel) on this path.Done / not blocking
ios/tunnel/tlspsk) — validated vsopenssl s_server -psk -cipher PSK-AES256-GCM-SHA384 -tls1_2(handshake + data round-trip).createTcpTunnelListener+ManualPairAndConnectToTunnelTCPwiring — builds, vets, reuses the validated lockdown data plane.🤖 Generated with Claude Code