| // Copyright 2026 The BoringSSL Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package runner |
| |
| func addServerPaddingTests() { |
| // Base server padding test: shim request padding, runner sends padding. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-ExpectPadding", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(10)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| "-expect-server-sent-requested-padding", |
| }, |
| }) |
| // Test that padding of 0 works. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-ZeroPaddingRequested", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(0)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "0", |
| "-expect-server-sent-requested-padding", |
| }, |
| }) |
| // Test that padding of 16k works. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-16kPadding", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(16384)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "16384", |
| "-expect-server-sent-requested-padding", |
| }, |
| }) |
| // Server sends less than requested padding; should fail the |
| // connection. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-NotEnoughPadding", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(5)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| }, |
| shouldFail: true, |
| expectedError: ":DECODE_ERROR:", |
| expectedLocalError: "remote error: error decoding message", |
| }) |
| // Server sends more than requested padding; should fail the |
| // connection. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-TooMuchPadding", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(50)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| }, |
| shouldFail: true, |
| expectedError: ":DECODE_ERROR:", |
| expectedLocalError: "remote error: error decoding message", |
| }) |
| // Test server not sending padding in response to a padding request; should |
| // not fail connection but also should not be counted as server sent correct |
| // amount of padding. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-NoPaddingSent", |
| testType: clientTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| }, |
| }) |
| // TLS 1.2 connection should send no padding back without error. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-TLS12-NoPadding", |
| testType: clientTest, |
| config: Config{ |
| MaxVersion: VersionTLS12, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| }, |
| }) |
| // TLS 1.2 connection sending padding should result in a failed connection. |
| testCases = append(testCases, testCase{ |
| name: "ServerPadding-TLS12-PaddingSent", |
| testType: clientTest, |
| config: Config{ |
| MaxVersion: VersionTLS12, |
| Bugs: ProtocolBugs{ |
| SendServerPaddingLength: ptrTo(uint16(10)), |
| }, |
| }, |
| flags: []string{ |
| "-request-server-padding", "10", |
| }, |
| shouldFail: true, |
| expectedError: ":UNEXPECTED_EXTENSION:", |
| expectedLocalError: "remote error: unsupported extension", |
| }) |
| |
| // Base test; runner doesn't ask for padding, shim doesn't send padding. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-NotRequested", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| }, |
| }) |
| // Shim doesn't support padding. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-NoServerSupport", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(10)), |
| }, |
| }) |
| // Runner requests padding, shim sends padding. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-BasicPadding", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(10)), |
| Bugs: ProtocolBugs{ |
| ExpectedServerPadding: true, |
| }, |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-ZeroPadding", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(0)), |
| Bugs: ProtocolBugs{ |
| ExpectedServerPadding: true, |
| }, |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-16kPadding", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(16384)), |
| Bugs: ProtocolBugs{ |
| ExpectedServerPadding: true, |
| }, |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| // Runner request over the max amount of padding, server responds without |
| // padding extension. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-OverMax", |
| testType: serverTest, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(16385)), |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| // Runner requests padding but with TLS 1.2 connection. Connection should |
| // not fail, but no padding extension should be expected. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-TLS12", |
| testType: serverTest, |
| config: Config{ |
| MaxVersion: VersionTLS12, |
| RequestServerPadding: ptrTo(uint16(1024)), |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| |
| // Runner requests padding, and then does a resumption handshake. Shim should |
| // send server padding on initial handshake, but not resumption handshake. |
| testCases = append(testCases, testCase{ |
| name: "ServerPaddingServer-ResumeSession", |
| testType: serverTest, |
| resumeSession: true, |
| config: Config{ |
| MinVersion: VersionTLS13, |
| RequestServerPadding: ptrTo(uint16(10)), |
| Bugs: ProtocolBugs{ |
| ExpectedServerPadding: true, |
| }, |
| }, |
| flags: []string{ |
| "-server-supports-padding", |
| }, |
| }) |
| } |