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