// Copyright 2025 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 addCBCPaddingTests() { testCases = append(testCases, testCase{ name: "MaxCBCPadding", config: Config{ MaxVersion: VersionTLS12, CipherSuites: []uint16{TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, Bugs: ProtocolBugs{ MaxPadding: true, }, }, messageLen: 12, // 20 bytes of SHA-1 + 12 == 0 % block size }) testCases = append(testCases, testCase{ name: "BadCBCPadding", config: Config{ MaxVersion: VersionTLS12, CipherSuites: []uint16{TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, Bugs: ProtocolBugs{ PaddingFirstByteBad: true, }, }, shouldFail: true, expectedError: ":DECRYPTION_FAILED_OR_BAD_RECORD_MAC:", }) // OpenSSL previously had an issue where the first byte of padding in // 255 bytes of padding wasn't checked. testCases = append(testCases, testCase{ name: "BadCBCPadding255", config: Config{ MaxVersion: VersionTLS12, CipherSuites: []uint16{TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, Bugs: ProtocolBugs{ MaxPadding: true, PaddingFirstByteBadIf255: true, }, }, messageLen: 12, // 20 bytes of SHA-1 + 12 == 0 % block size shouldFail: true, expectedError: ":DECRYPTION_FAILED_OR_BAD_RECORD_MAC:", }) } func addCBCSplittingTests() { cbcCiphers := []struct { name string cipher uint16 }{ {"3DES", TLS_RSA_WITH_3DES_EDE_CBC_SHA}, {"AES128", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, {"AES256", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA}, } for _, t := range cbcCiphers { testCases = append(testCases, testCase{ name: "CBCRecordSplitting-" + t.name, config: Config{ MaxVersion: VersionTLS10, MinVersion: VersionTLS10, CipherSuites: []uint16{t.cipher}, Bugs: ProtocolBugs{ ExpectRecordSplitting: true, }, }, messageLen: -1, // read until EOF resumeSession: true, flags: []string{ "-async", "-write-different-record-sizes", "-cbc-record-splitting", // BoringSSL disables 3DES by default. "-cipher", "ALL:3DES", }, }) testCases = append(testCases, testCase{ name: "CBCRecordSplittingPartialWrite-" + t.name, config: Config{ MaxVersion: VersionTLS10, MinVersion: VersionTLS10, CipherSuites: []uint16{t.cipher}, Bugs: ProtocolBugs{ ExpectRecordSplitting: true, }, }, messageLen: -1, // read until EOF flags: []string{ "-async", "-write-different-record-sizes", "-cbc-record-splitting", "-partial-write", // BoringSSL disables 3DES by default. "-cipher", "ALL:3DES", }, }) } }