1 /*
2  * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package sun.security.ssl;
27 
28 /**
29  * DTLS record
30  */
31 interface DTLSRecord extends Record {
32 
33     static final int    headerSize = 13;            // DTLS record header
34 
35     static final int    handshakeHeaderSize = 12;   // DTLS handshake header
36 
37     /*
38      * The size of the header plus the max IV length
39      */
40     static final int    headerPlusMaxIVSize =
41                                       headerSize        // header
42                                     + maxIVLength;      // iv
43 
44     /*
45      * The maximum size that may be increased when translating plaintext to
46      * ciphertext fragment.
47      */
48     static final int    maxPlaintextPlusSize =
49                                       headerSize        // header
50                                     + maxIVLength       // iv
51                                     + maxMacSize        // MAC or AEAD tag
52                                     + maxPadding;       // block cipher padding
53 
54     /*
55      * the maximum record size
56      */
57     static final int    maxRecordSize =
58                                       headerPlusMaxIVSize   // header + iv
59                                     + maxDataSize           // data
60                                     + maxPadding            // padding
61                                     + maxMacSize;           // MAC or AEAD tag
62 
63     /*
64      * Minimum record size of Certificate handshake message.
65      * Client sends a certificate message containing no certificates if no
66      * suitable certificate is available.  That is, the certificate_list
67      * structure has a length of zero.
68      *
69      *   struct {
70      *       ASN.1Cert certificate_list<0..2^24-1>;
71      *   } Certificate;
72      */
73     static final int    minCertPlaintextSize =
74                                       headerSize            // record header
75                                     + handshakeHeaderSize   // handshake header
76                                     + 3;                    // cert list length
77 }
78