1e1051a39Sopenharmony_ci# -*- mode: perl; -*- 2e1051a39Sopenharmony_ci# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci# 4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci 9e1051a39Sopenharmony_ci 10e1051a39Sopenharmony_ci## Test packet fragmentation 11e1051a39Sopenharmony_ci 12e1051a39Sopenharmony_ciuse strict; 13e1051a39Sopenharmony_ciuse warnings; 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_cipackage ssltests; 16e1051a39Sopenharmony_ci 17e1051a39Sopenharmony_ci 18e1051a39Sopenharmony_ciour @tests = ( 19e1051a39Sopenharmony_ci # Default fragment size is 512. 20e1051a39Sopenharmony_ci { 21e1051a39Sopenharmony_ci name => "one-fragment-minus-app-data", 22e1051a39Sopenharmony_ci server => { }, 23e1051a39Sopenharmony_ci client => { }, 24e1051a39Sopenharmony_ci test => { 25e1051a39Sopenharmony_ci ApplicationData => 511, 26e1051a39Sopenharmony_ci } 27e1051a39Sopenharmony_ci }, 28e1051a39Sopenharmony_ci { 29e1051a39Sopenharmony_ci name => "one-fragment-app-data", 30e1051a39Sopenharmony_ci server => { }, 31e1051a39Sopenharmony_ci client => { }, 32e1051a39Sopenharmony_ci test => { 33e1051a39Sopenharmony_ci ApplicationData => 512, 34e1051a39Sopenharmony_ci } 35e1051a39Sopenharmony_ci }, 36e1051a39Sopenharmony_ci { 37e1051a39Sopenharmony_ci name => "one-fragment-plus-app-data", 38e1051a39Sopenharmony_ci server => { }, 39e1051a39Sopenharmony_ci client => { }, 40e1051a39Sopenharmony_ci test => { 41e1051a39Sopenharmony_ci ApplicationData => 513, 42e1051a39Sopenharmony_ci } 43e1051a39Sopenharmony_ci }, 44e1051a39Sopenharmony_ci { 45e1051a39Sopenharmony_ci name => "small-app-data", 46e1051a39Sopenharmony_ci server => { }, 47e1051a39Sopenharmony_ci client => { }, 48e1051a39Sopenharmony_ci test => { 49e1051a39Sopenharmony_ci ApplicationData => 4 * 1024 + 1, 50e1051a39Sopenharmony_ci } 51e1051a39Sopenharmony_ci }, 52e1051a39Sopenharmony_ci { 53e1051a39Sopenharmony_ci name => "small-app-data-large-fragment-size", 54e1051a39Sopenharmony_ci server => { }, 55e1051a39Sopenharmony_ci client => { }, 56e1051a39Sopenharmony_ci test => { 57e1051a39Sopenharmony_ci ApplicationData => 4 * 1024 + 1, 58e1051a39Sopenharmony_ci MaxFragmentSize => 16384, 59e1051a39Sopenharmony_ci } 60e1051a39Sopenharmony_ci }, 61e1051a39Sopenharmony_ci { 62e1051a39Sopenharmony_ci name => "medium-app-data", 63e1051a39Sopenharmony_ci server => { }, 64e1051a39Sopenharmony_ci client => { }, 65e1051a39Sopenharmony_ci test => { 66e1051a39Sopenharmony_ci ApplicationData => 32 * 1024 + 7, 67e1051a39Sopenharmony_ci } 68e1051a39Sopenharmony_ci }, 69e1051a39Sopenharmony_ci # Exceeds the 64kB write buffer size. 70e1051a39Sopenharmony_ci { 71e1051a39Sopenharmony_ci name => "medium-plus-app-data", 72e1051a39Sopenharmony_ci server => { }, 73e1051a39Sopenharmony_ci client => { }, 74e1051a39Sopenharmony_ci test => { 75e1051a39Sopenharmony_ci ApplicationData => 128 * 1024 - 3, 76e1051a39Sopenharmony_ci } 77e1051a39Sopenharmony_ci }, 78e1051a39Sopenharmony_ci { 79e1051a39Sopenharmony_ci name => "large-app-data", 80e1051a39Sopenharmony_ci server => { }, 81e1051a39Sopenharmony_ci client => { }, 82e1051a39Sopenharmony_ci test => { 83e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024, 84e1051a39Sopenharmony_ci } 85e1051a39Sopenharmony_ci }, 86e1051a39Sopenharmony_ci { 87e1051a39Sopenharmony_ci name => "large-app-data-large-fragment-size", 88e1051a39Sopenharmony_ci server => { }, 89e1051a39Sopenharmony_ci client => { }, 90e1051a39Sopenharmony_ci test => { 91e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024, 92e1051a39Sopenharmony_ci MaxFragmentSize => 16384, 93e1051a39Sopenharmony_ci } 94e1051a39Sopenharmony_ci }, 95e1051a39Sopenharmony_ci { 96e1051a39Sopenharmony_ci name => "large-app-data-odd-fragment-size", 97e1051a39Sopenharmony_ci server => { }, 98e1051a39Sopenharmony_ci client => { }, 99e1051a39Sopenharmony_ci test => { 100e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024, 101e1051a39Sopenharmony_ci MaxFragmentSize => 5 * 1024 - 5, 102e1051a39Sopenharmony_ci } 103e1051a39Sopenharmony_ci }, 104e1051a39Sopenharmony_ci # When the buffer / fragment size ratio is sufficiently large, 105e1051a39Sopenharmony_ci # multi-buffer code kicks in on some platforms for AES-SHA. The 106e1051a39Sopenharmony_ci # exact minimum ratio depends on the platform, and is usually 107e1051a39Sopenharmony_ci # around 4. Since the test buffer is 64kB, a 4kB fragment is 108e1051a39Sopenharmony_ci # easily sufficient. 109e1051a39Sopenharmony_ci # 110e1051a39Sopenharmony_ci # (We run this test on all platforms though it's only true multibuffer 111e1051a39Sopenharmony_ci # on some of them.) 112e1051a39Sopenharmony_ci { 113e1051a39Sopenharmony_ci name => "large-app-data-aes-sha1-multibuffer", 114e1051a39Sopenharmony_ci server => { }, 115e1051a39Sopenharmony_ci client => { 116e1051a39Sopenharmony_ci CipherString => "AES128-SHA", 117e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 118e1051a39Sopenharmony_ci }, 119e1051a39Sopenharmony_ci test => { 120e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024, 121e1051a39Sopenharmony_ci MaxFragmentSize => 4 * 1024, 122e1051a39Sopenharmony_ci } 123e1051a39Sopenharmony_ci }, 124e1051a39Sopenharmony_ci { 125e1051a39Sopenharmony_ci name => "large-app-data-aes-sha2-multibuffer", 126e1051a39Sopenharmony_ci server => { }, 127e1051a39Sopenharmony_ci client => { 128e1051a39Sopenharmony_ci CipherString => "AES128-SHA256", 129e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 130e1051a39Sopenharmony_ci }, 131e1051a39Sopenharmony_ci test => { 132e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024, 133e1051a39Sopenharmony_ci MaxFragmentSize => 4 * 1024, 134e1051a39Sopenharmony_ci } 135e1051a39Sopenharmony_ci }, 136e1051a39Sopenharmony_ci { 137e1051a39Sopenharmony_ci name => "large-app-data-aes-sha1-multibuffer-odd-fragment", 138e1051a39Sopenharmony_ci server => { }, 139e1051a39Sopenharmony_ci client => { 140e1051a39Sopenharmony_ci CipherString => "AES128-SHA", 141e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 142e1051a39Sopenharmony_ci }, 143e1051a39Sopenharmony_ci test => { 144e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024 + 3, 145e1051a39Sopenharmony_ci MaxFragmentSize => 5 * 1024 - 5, 146e1051a39Sopenharmony_ci } 147e1051a39Sopenharmony_ci }, 148e1051a39Sopenharmony_ci { 149e1051a39Sopenharmony_ci name => "large-app-data-aes-sha2-multibuffer-odd-fragment", 150e1051a39Sopenharmony_ci server => { }, 151e1051a39Sopenharmony_ci client => { 152e1051a39Sopenharmony_ci CipherString => "AES128-SHA256", 153e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 154e1051a39Sopenharmony_ci }, 155e1051a39Sopenharmony_ci test => { 156e1051a39Sopenharmony_ci ApplicationData => 1024 * 1024 - 3, 157e1051a39Sopenharmony_ci MaxFragmentSize => 5 * 1024 + 5, 158e1051a39Sopenharmony_ci } 159e1051a39Sopenharmony_ci }, 160e1051a39Sopenharmony_ci # Test that multibuffer-capable code also handles small data correctly. 161e1051a39Sopenharmony_ci # Here fragment size == app data size < buffer size, 162e1051a39Sopenharmony_ci # so no multibuffering should happen. 163e1051a39Sopenharmony_ci { 164e1051a39Sopenharmony_ci name => "small-app-data-aes-sha1-multibuffer", 165e1051a39Sopenharmony_ci server => { }, 166e1051a39Sopenharmony_ci client => { 167e1051a39Sopenharmony_ci CipherString => "AES128-SHA", 168e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 169e1051a39Sopenharmony_ci }, 170e1051a39Sopenharmony_ci test => { 171e1051a39Sopenharmony_ci ApplicationData => 4 * 1024, 172e1051a39Sopenharmony_ci MaxFragmentSize => 4 * 1024, 173e1051a39Sopenharmony_ci } 174e1051a39Sopenharmony_ci }, 175e1051a39Sopenharmony_ci { 176e1051a39Sopenharmony_ci name => "small-app-data-aes-sha2-multibuffer", 177e1051a39Sopenharmony_ci server => { }, 178e1051a39Sopenharmony_ci client => { 179e1051a39Sopenharmony_ci CipherString => "AES128-SHA256", 180e1051a39Sopenharmony_ci MaxProtocol => "TLSv1.2" 181e1051a39Sopenharmony_ci }, 182e1051a39Sopenharmony_ci test => { 183e1051a39Sopenharmony_ci ApplicationData => 4 * 1024, 184e1051a39Sopenharmony_ci MaxFragmentSize => 4 * 1024, 185e1051a39Sopenharmony_ci } 186e1051a39Sopenharmony_ci }, 187e1051a39Sopenharmony_ci ############################################ 188e1051a39Sopenharmony_ci # Default (Max) Fragment Size is 512. 189e1051a39Sopenharmony_ci # Default Application data size is 256. 190e1051a39Sopenharmony_ci { 191e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension set to 1024 w. FragmentSize disabled", 192e1051a39Sopenharmony_ci server => { }, 193e1051a39Sopenharmony_ci client => { 194e1051a39Sopenharmony_ci extra => { 195e1051a39Sopenharmony_ci MaxFragmentLenExt => 1024, 196e1051a39Sopenharmony_ci }, 197e1051a39Sopenharmony_ci }, 198e1051a39Sopenharmony_ci test => { 199e1051a39Sopenharmony_ci ApplicationData => 3072, 200e1051a39Sopenharmony_ci MaxFragmentSize => 16384, 201e1051a39Sopenharmony_ci } 202e1051a39Sopenharmony_ci }, 203e1051a39Sopenharmony_ci { 204e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension equal FragmentSize to 2048", 205e1051a39Sopenharmony_ci server => { }, 206e1051a39Sopenharmony_ci client => { 207e1051a39Sopenharmony_ci extra => { 208e1051a39Sopenharmony_ci MaxFragmentLenExt => 2048, 209e1051a39Sopenharmony_ci }, 210e1051a39Sopenharmony_ci }, 211e1051a39Sopenharmony_ci test => { 212e1051a39Sopenharmony_ci ApplicationData => 3072, 213e1051a39Sopenharmony_ci MaxFragmentSize => 2048, 214e1051a39Sopenharmony_ci } 215e1051a39Sopenharmony_ci }, 216e1051a39Sopenharmony_ci { 217e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension 512 lower than FragmentSize 1024", 218e1051a39Sopenharmony_ci server => { }, 219e1051a39Sopenharmony_ci client => { 220e1051a39Sopenharmony_ci extra => { 221e1051a39Sopenharmony_ci MaxFragmentLenExt => 512, 222e1051a39Sopenharmony_ci }, 223e1051a39Sopenharmony_ci }, 224e1051a39Sopenharmony_ci test => { 225e1051a39Sopenharmony_ci ApplicationData => 3072, 226e1051a39Sopenharmony_ci MaxFragmentSize => 1024, 227e1051a39Sopenharmony_ci } 228e1051a39Sopenharmony_ci }, 229e1051a39Sopenharmony_ci { 230e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension 1024 lower than FragmentSize 1024", 231e1051a39Sopenharmony_ci server => { }, 232e1051a39Sopenharmony_ci client => { 233e1051a39Sopenharmony_ci extra => { 234e1051a39Sopenharmony_ci MaxFragmentLenExt => 2048, 235e1051a39Sopenharmony_ci }, 236e1051a39Sopenharmony_ci }, 237e1051a39Sopenharmony_ci test => { 238e1051a39Sopenharmony_ci ApplicationData => 3072, 239e1051a39Sopenharmony_ci MaxFragmentSize => 1024, 240e1051a39Sopenharmony_ci } 241e1051a39Sopenharmony_ci }, 242e1051a39Sopenharmony_ci { 243e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension 4096 greater than FragmentSize 2048", 244e1051a39Sopenharmony_ci server => { }, 245e1051a39Sopenharmony_ci client => { 246e1051a39Sopenharmony_ci extra => { 247e1051a39Sopenharmony_ci MaxFragmentLenExt => 4096, 248e1051a39Sopenharmony_ci }, 249e1051a39Sopenharmony_ci }, 250e1051a39Sopenharmony_ci test => { 251e1051a39Sopenharmony_ci ApplicationData => 8196, 252e1051a39Sopenharmony_ci MaxFragmentSize => 2048, 253e1051a39Sopenharmony_ci } 254e1051a39Sopenharmony_ci }, 255e1051a39Sopenharmony_ci { 256e1051a39Sopenharmony_ci name => "Maximum Fragment Len extension 2048 greater than FragmentSize 1024", 257e1051a39Sopenharmony_ci server => { }, 258e1051a39Sopenharmony_ci client => { 259e1051a39Sopenharmony_ci extra => { 260e1051a39Sopenharmony_ci MaxFragmentLenExt => 2048, 261e1051a39Sopenharmony_ci }, 262e1051a39Sopenharmony_ci }, 263e1051a39Sopenharmony_ci test => { 264e1051a39Sopenharmony_ci ApplicationData => 3072, 265e1051a39Sopenharmony_ci MaxFragmentSize => 1024, 266e1051a39Sopenharmony_ci } 267e1051a39Sopenharmony_ci }, 268e1051a39Sopenharmony_ci); 269