jdk/test/javax/net/ssl/TLSCommon/SSLEngineTestCase.java
author iignatyev
Tue, 30 May 2017 21:14:45 -0700
changeset 45288 58be10a068c2
parent 41820 3d8c88d00c9f
permissions -rw-r--r--
8180805: move RandomFactory to the top level testlibrary Reviewed-by: bpb, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     1
/*
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     4
 *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     7
 * published by the Free Software Foundation.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     8
 *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    13
 * accompanied this code).
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    14
 *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    18
 *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    21
 * questions.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    22
 */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    23
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    24
import javax.net.ssl.KeyManagerFactory;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    25
import javax.net.ssl.SNIHostName;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    26
import javax.net.ssl.SNIMatcher;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    27
import javax.net.ssl.SNIServerName;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    28
import javax.net.ssl.SSLContext;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    29
import javax.net.ssl.SSLEngine;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    30
import javax.net.ssl.SSLSession;
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    31
import javax.net.ssl.SSLEngineResult;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    32
import javax.net.ssl.SSLEngineResult.HandshakeStatus;
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    33
import javax.net.ssl.SSLException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    34
import javax.net.ssl.SSLParameters;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    35
import javax.net.ssl.TrustManagerFactory;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    36
import java.io.File;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    37
import java.io.FileInputStream;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    38
import java.io.IOException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    39
import java.nio.ByteBuffer;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    40
import java.security.KeyManagementException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    41
import java.security.KeyStore;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    42
import java.security.KeyStoreException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    43
import java.security.NoSuchAlgorithmException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    44
import java.security.UnrecoverableKeyException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    45
import java.security.cert.CertificateException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    46
import java.util.ArrayList;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    47
import java.util.Arrays;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    48
import java.util.HashMap;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    49
import java.util.LinkedList;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    50
import java.util.List;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    51
import java.util.Map;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    52
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    53
/**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    54
 * Basic class to inherit SSLEngine test cases from it. Tests apply for
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    55
 * the TLS or DTLS security protocols and their versions.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    56
 */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    57
abstract public class SSLEngineTestCase {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    58
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    59
    public enum Ciphers {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    60
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    61
        /**
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    62
         * Ciphers supported by the tested SSLEngine without those with
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    63
         * kerberos authentication.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    64
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    65
        SUPPORTED_NON_KRB_CIPHERS(SSLEngineTestCase.SUPPORTED_NON_KRB_CIPHERS,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    66
                "Supported non kerberos"),
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    67
        /**
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    68
         * Ciphers supported by the tested SSLEngine without those with
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    69
         * kerberos authentication and without those with SHA256 ans SHA384.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    70
         */
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    71
        SUPPORTED_NON_KRB_NON_SHA_CIPHERS(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    72
                SSLEngineTestCase.SUPPORTED_NON_KRB_NON_SHA_CIPHERS,
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    73
                "Supported non kerberos non SHA256 and SHA384"),
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    74
        /**
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    75
         * Ciphers supported by the tested SSLEngine with kerberos
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
    76
         * authentication.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    77
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    78
        SUPPORTED_KRB_CIPHERS(SSLEngineTestCase.SUPPORTED_KRB_CIPHERS,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    79
                "Supported kerberos"),
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    80
        /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    81
         * Ciphers enabled by default for the tested SSLEngine without kerberos
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    82
         * and anon.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    83
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    84
        ENABLED_NON_KRB_NOT_ANON_CIPHERS(
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    85
                SSLEngineTestCase.ENABLED_NON_KRB_NOT_ANON_CIPHERS,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    86
                "Enabled by default non kerberos not anonymous"),
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    87
        /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    88
         * Ciphers unsupported by the tested SSLEngine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    89
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    90
        UNSUPPORTED_CIPHERS(SSLEngineTestCase.UNSUPPORTED_CIPHERS,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    91
                "Unsupported");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    92
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    93
        Ciphers(String[] ciphers, String description) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    94
            this.ciphers = ciphers;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    95
            this.description = description;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    96
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    97
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    98
        final String[] ciphers;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
    99
        final String description;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   100
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   101
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   102
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   103
     * Enumeration used to distinguish handshake mode in
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   104
     * {@link SSLEngineTestCase#doHandshake(javax.net.ssl.SSLEngine,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   105
     * javax.net.ssl.SSLEngine, int, SSLEngineTestCase.HandshakeMode, boolean)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   106
     * SSLEngineTestCase.doHandshake} method.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   107
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   108
    public enum HandshakeMode {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   109
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   110
        /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   111
         * Initial handshake done for the first time: both engines call
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   112
         * {@link SSLEngine#beginHandshake()} method.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   113
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   114
        INITIAL_HANDSHAKE,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   115
        /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   116
         * Repeated handshake done by client: client engine calls
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   117
         * {@link SSLEngine#beginHandshake()} method.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   118
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   119
        REHANDSHAKE_BEGIN_CLIENT,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   120
        /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   121
         * Repeated handshake done by server: server engine calls
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   122
         * {@link SSLEngine#beginHandshake()} method.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   123
         */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   124
        REHANDSHAKE_BEGIN_SERVER;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   125
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   126
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   127
     * Security protocol to be tested: "TLS" or "DTLS" or their versions,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   128
     * e.g. "TLSv1", "TLSv1.1", "TLSv1.2", "DTLSv1.0", "DTLSv1.2".
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   129
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   130
    public static final String TESTED_SECURITY_PROTOCOL
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   131
            = System.getProperty("test.security.protocol", "TLS");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   132
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   133
     * Test mode: "norm", "norm_sni" or "krb".
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   134
     * Modes "norm" and "norm_sni" are used to run
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   135
     * with all supported non-kerberos ciphers.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   136
     * Mode "krb" is used to run with kerberos ciphers.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   137
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   138
    public static final String TEST_MODE
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   139
            = System.getProperty("test.mode", "norm");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   140
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   141
    private static final String FS = System.getProperty("file.separator", "/");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   142
    private static final String PATH_TO_STORES = ".." + FS + "etc";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   143
    private static final String KEY_STORE_FILE = "keystore";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   144
    private static final String TRUST_STORE_FILE = "truststore";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   145
    private static final String PASSWD = "passphrase";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   146
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   147
    private static final String KEY_FILE_NAME
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   148
            = System.getProperty("test.src", ".") + FS + PATH_TO_STORES
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   149
            + FS + KEY_STORE_FILE;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   150
    private static final String TRUST_FILE_NAME
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   151
            = System.getProperty("test.src", ".") + FS + PATH_TO_STORES
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   152
            + FS + TRUST_STORE_FILE;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   153
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   154
    // Need an enhancement to use none-static mutable global variables.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   155
    private static ByteBuffer net;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   156
    private static boolean doUnwrapForNotHandshakingStatus;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   157
    private static boolean endHandshakeLoop = false;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   158
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   159
    private static final int MAX_HANDSHAKE_LOOPS = 100;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   160
    private static final String EXCHANGE_MSG_SENT = "Hello, peer!";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   161
    private static final String TEST_SRC = System.getProperty("test.src", ".");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   162
    private static final String KTAB_FILENAME = "krb5.keytab.data";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   163
    private static final String KRB_REALM = "TEST.REALM";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   164
    private static final String KRBTGT_PRINCIPAL = "krbtgt/" + KRB_REALM;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   165
    private static final String KRB_USER = "USER";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   166
    private static final String KRB_USER_PASSWORD = "password";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   167
    private static final String KRB_USER_PRINCIPAL = KRB_USER + "@" + KRB_REALM;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   168
    private static final String KRB5_CONF_FILENAME = "krb5.conf";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   169
    private static final String PATH_TO_COMMON = ".." + FS + "TLSCommon";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   170
    private static final String JAAS_CONF_FILE = PATH_TO_COMMON
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   171
            + FS + "jaas.conf";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   172
    private static final int DELAY = 1000;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   173
    private static final String HOST = "localhost";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   174
    private static final String SERVER_NAME = "service.localhost";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   175
    private static final String SNI_PATTERN = ".*";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   176
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   177
    private static final String[] SUPPORTED_NON_KRB_CIPHERS;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   178
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   179
    static {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   180
        try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   181
            String[] allSupportedCiphers = getContext()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   182
                    .createSSLEngine().getSupportedCipherSuites();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   183
            List<String> supportedCiphersList = new LinkedList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   184
            for (String cipher : allSupportedCiphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   185
                if (!cipher.contains("KRB5")
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   186
                    && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   187
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   188
                    supportedCiphersList.add(cipher);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   189
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   190
            }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   191
            SUPPORTED_NON_KRB_CIPHERS =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   192
                    supportedCiphersList.toArray(new String[0]);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   193
        } catch (Exception ex) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   194
            throw new Error("Unexpected issue", ex);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   195
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   196
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   197
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   198
    private static final String[] SUPPORTED_NON_KRB_NON_SHA_CIPHERS;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   199
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   200
    static {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   201
        try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   202
            String[] allSupportedCiphers = getContext()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   203
                    .createSSLEngine().getSupportedCipherSuites();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   204
            List<String> supportedCiphersList = new LinkedList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   205
            for (String cipher : allSupportedCiphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   206
                if (!cipher.contains("KRB5")
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   207
                        && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   208
                        && !cipher.endsWith("_SHA256")
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   209
                        && !cipher.endsWith("_SHA384")) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   210
                    supportedCiphersList.add(cipher);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   211
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   212
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   213
            SUPPORTED_NON_KRB_NON_SHA_CIPHERS
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   214
                    = supportedCiphersList.toArray(new String[0]);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   215
        } catch (Exception ex) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   216
            throw new Error("Unexpected issue", ex);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   217
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   218
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   219
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   220
    private static final String[] SUPPORTED_KRB_CIPHERS;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   221
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   222
    static {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   223
        try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   224
            String[] allSupportedCiphers = getContext()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   225
                    .createSSLEngine().getSupportedCipherSuites();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   226
            List<String> supportedCiphersList = new LinkedList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   227
            for (String cipher : allSupportedCiphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   228
                if (cipher.contains("KRB5")
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   229
                    && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   230
                    supportedCiphersList.add(cipher);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   231
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   232
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   233
            SUPPORTED_KRB_CIPHERS = supportedCiphersList.toArray(new String[0]);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   234
        } catch (Exception ex) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   235
            throw new Error("Unexpected issue", ex);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   236
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   237
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   238
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   239
    private static final String[] ENABLED_NON_KRB_NOT_ANON_CIPHERS;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   240
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   241
    static {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   242
        try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   243
            SSLEngine temporary = getContext().createSSLEngine();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   244
            temporary.setUseClientMode(true);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   245
            String[] enabledCiphers = temporary.getEnabledCipherSuites();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   246
            List<String> enabledCiphersList = new LinkedList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   247
            for (String cipher : enabledCiphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   248
                if (!cipher.contains("anon") && !cipher.contains("KRB5")
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   249
                    && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   250
                    enabledCiphersList.add(cipher);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   251
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   252
            }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   253
            ENABLED_NON_KRB_NOT_ANON_CIPHERS =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   254
                    enabledCiphersList.toArray(new String[0]);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   255
        } catch (Exception ex) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   256
            throw new Error("Unexpected issue", ex);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   257
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   258
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   259
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   260
    private static final String[] UNSUPPORTED_CIPHERS = {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   261
            "SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   262
            "SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   263
            "SSL_DHE_DSS_WITH_RC4_128_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   264
            "SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   265
            "SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   266
            "SSL_DH_DSS_WITH_DES_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   267
            "SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   268
            "SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   269
            "SSL_DH_RSA_WITH_DES_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   270
            "SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   271
            "SSL_FORTEZZA_DMS_WITH_NULL_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   272
            "SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   273
            "SSL_RSA_EXPORT1024_WITH_RC4_56_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   274
            "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   275
            "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   276
            "SSL_RSA_FIPS_WITH_DES_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   277
            "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   278
            "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   279
            "TLS_KRB5_WITH_IDEA_CBC_MD5",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   280
            "TLS_KRB5_WITH_IDEA_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   281
            "SSL_RSA_WITH_IDEA_CBC_SHA",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   282
            "TLS_DH_RSA_WITH_AES_128_GCM_SHA256",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   283
            "TLS_DH_RSA_WITH_AES_256_GCM_SHA384",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   284
            "TLS_DH_DSS_WITH_AES_128_GCM_SHA256",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   285
            "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   286
    };
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   287
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   288
    private final int maxPacketSize;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   289
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   290
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   291
     * Constructs test case with the given MFLN maxMacketSize.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   292
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   293
     * @param maxPacketSize - MLFN extension max packet size.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   294
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   295
    public SSLEngineTestCase(int maxPacketSize) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   296
        this.maxPacketSize = maxPacketSize;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   297
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   298
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   299
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   300
     * Constructs test case with {@code maxPacketSize = 0}.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   301
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   302
    public SSLEngineTestCase() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   303
        this.maxPacketSize = 0;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   304
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   305
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   306
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   307
     * Wraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   308
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   309
     * @param engine        - SSLEngine that wraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   310
     * @param wrapper       - Set wrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   311
     *                        Used for logging only.
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   312
     * @param maxPacketSize - Max packet size to check that MFLN extension
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   313
     *                        works or zero for no check.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   314
     * @param app           - Buffer with data to wrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   315
     * @return - Buffer with wrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   316
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   317
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   318
    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   319
                                    int maxPacketSize, ByteBuffer app)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   320
            throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   321
        return doWrap(engine, wrapper, maxPacketSize,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   322
                app, SSLEngineResult.Status.OK, null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   323
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   324
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   325
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   326
     * Wraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   327
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   328
     * @param engine        - SSLEngine that wraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   329
     * @param wrapper       - Set wrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   330
     *                        Used for logging only.
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   331
     * @param maxPacketSize - Max packet size to check that MFLN extension
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   332
     *                        works or zero for no check.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   333
     * @param app           - Buffer with data to wrap.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   334
     * @param result        - Array which first element will be used to
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   335
     *                        output wrap result object.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   336
     * @return - Buffer with wrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   337
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   338
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   339
    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   340
                                    int maxPacketSize, ByteBuffer app,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   341
                                    SSLEngineResult[] result)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   342
            throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   343
        return doWrap(engine, wrapper, maxPacketSize,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   344
                app, SSLEngineResult.Status.OK, result);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   345
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   346
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   347
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   348
     * Wraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   349
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   350
     * @param engine        - SSLEngine that wraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   351
     * @param wrapper       - Set wrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   352
     *                        Used for logging only.
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   353
     * @param maxPacketSize - Max packet size to check that MFLN extension
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   354
     *                        works or zero for no check.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   355
     * @param app           - Buffer with data to wrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   356
     * @param wantedStatus  - Specifies expected result status of wrapping.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   357
     * @return - Buffer with wrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   358
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   359
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   360
    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   361
                                    int maxPacketSize, ByteBuffer app,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   362
                                    SSLEngineResult.Status wantedStatus)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   363
            throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   364
        return doWrap(engine, wrapper, maxPacketSize,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   365
                app, wantedStatus, null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   366
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   367
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   368
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   369
     * Wraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   370
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   371
     * @param engine        - SSLEngine that wraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   372
     * @param wrapper       - Set wrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   373
     *                        Used for logging only.
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   374
     * @param maxPacketSize - Max packet size to check that MFLN extension
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   375
     *                        works or zero for no check.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   376
     * @param app           - Buffer with data to wrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   377
     * @param wantedStatus  - Specifies expected result status of wrapping.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   378
     * @param result        - Array which first element will be used to output
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   379
     *                        wrap result object.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   380
     * @return - Buffer with wrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   381
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   382
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   383
    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   384
                                    int maxPacketSize, ByteBuffer app,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   385
                                    SSLEngineResult.Status wantedStatus,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   386
                                    SSLEngineResult[] result)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   387
            throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   388
        ByteBuffer net = ByteBuffer.allocate(engine.getSession()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   389
                .getPacketBufferSize());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   390
        SSLEngineResult r = engine.wrap(app, net);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   391
        net.flip();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   392
        int length = net.remaining();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   393
        System.out.println(wrapper + " wrapped " + length + " bytes.");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   394
        System.out.println(wrapper + " handshake status is "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   395
                + engine.getHandshakeStatus());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   396
        if (maxPacketSize < length && maxPacketSize != 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   397
            throw new AssertionError("Handshake wrapped net buffer length "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   398
                    + length + " exceeds maximum packet size "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   399
                    + maxPacketSize);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   400
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   401
        checkResult(r, wantedStatus);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   402
        if (result != null && result.length > 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   403
            result[0] = r;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   404
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   405
        return net;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   406
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   407
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   408
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   409
     * Unwraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   410
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   411
     * @param engine    - SSLEngine that unwraps data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   412
     * @param unwrapper - Set unwrapper id, e.g. "server" of "client". Used for
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   413
     *                  logging only.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   414
     * @param net       - Buffer with data to unwrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   415
     * @return - Buffer with unwrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   416
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   417
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   418
    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   419
            ByteBuffer net) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   420
        return doUnWrap(engine, unwrapper,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   421
                net, SSLEngineResult.Status.OK, null);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   422
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   423
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   424
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   425
     * Unwraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   426
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   427
     * @param engine    - SSLEngine that unwraps data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   428
     * @param unwrapper - Set unwrapper id, e.g. "server" of "client". Used for
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   429
     *                  logging only.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   430
     * @param net       - Buffer with data to unwrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   431
     * @param result    - Array which first element will be used to output wrap
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   432
     *                  result object.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   433
     * @return - Buffer with unwrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   434
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   435
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   436
    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   437
            ByteBuffer net, SSLEngineResult[] result) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   438
        return doUnWrap(engine, unwrapper,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   439
                net, SSLEngineResult.Status.OK, result);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   440
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   441
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   442
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   443
     * Unwraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   444
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   445
     * @param engine       - SSLEngine that unwraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   446
     * @param unwrapper    - Set unwrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   447
     *                     Used for logging only.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   448
     * @param net          - Buffer with data to unwrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   449
     * @param wantedStatus - Specifies expected result status of wrapping.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   450
     * @return - Buffer with unwrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   451
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   452
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   453
    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   454
            ByteBuffer net,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   455
            SSLEngineResult.Status wantedStatus) throws SSLException {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   456
        return doUnWrap(engine, unwrapper, net, wantedStatus, null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   457
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   458
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   459
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   460
     * Unwraps data with the specified engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   461
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   462
     * @param engine       - SSLEngine that unwraps data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   463
     * @param unwrapper    - Set unwrapper id, e.g. "server" of "client".
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   464
     *                       Used for logging only.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   465
     * @param net          - Buffer with data to unwrap.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   466
     * @param wantedStatus - Specifies expected result status of wrapping.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   467
     * @param result       - Array which first element will be used to output
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   468
     *                       wrap result object.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   469
     * @return - Buffer with unwrapped data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   470
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   471
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   472
    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   473
            ByteBuffer net, SSLEngineResult.Status wantedStatus,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   474
            SSLEngineResult[] result) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   475
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   476
        ByteBuffer app = ByteBuffer.allocate(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   477
                engine.getSession().getApplicationBufferSize());
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   478
        int length = net.remaining();
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   479
        System.out.println(unwrapper + " unwrapping " + length + " bytes...");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   480
        SSLEngineResult r = engine.unwrap(net, app);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   481
        app.flip();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   482
        System.out.println(unwrapper + " handshake status is "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   483
                + engine.getHandshakeStatus());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   484
        checkResult(r, wantedStatus);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   485
        if (result != null && result.length > 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   486
            result[0] = r;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   487
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   488
        return app;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   489
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   490
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   491
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   492
     * Does the handshake of the two specified engines according to the
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   493
     * {@code mode} specified.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   494
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   495
     * @param clientEngine  - Client SSLEngine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   496
     * @param serverEngine  - Server SSLEngine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   497
     * @param maxPacketSize - Maximum packet size for MFLN of zero for no limit.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   498
     * @param mode          - Handshake mode according to
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   499
     *                        {@link HandshakeMode} enum.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   500
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   501
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   502
    public static void doHandshake(SSLEngine clientEngine,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   503
        SSLEngine serverEngine,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   504
        int maxPacketSize, HandshakeMode mode) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   505
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   506
        doHandshake(clientEngine, serverEngine, maxPacketSize, mode, false);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   507
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   508
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   509
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   510
     * Does the handshake of the two specified engines according to the
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   511
     * {@code mode} specified.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   512
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   513
     * @param clientEngine          - Client SSLEngine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   514
     * @param serverEngine          - Server SSLEngine.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   515
     * @param maxPacketSize         - Maximum packet size for MFLN of zero
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   516
     *                                for no limit.
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   517
     * @param mode                  - Handshake mode according to
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   518
     *                                {@link HandshakeMode} enum.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   519
     * @param enableReplicatedPacks - Set {@code true} to enable replicated
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   520
     *                                packet sending.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   521
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   522
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   523
    public static void doHandshake(SSLEngine clientEngine,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   524
            SSLEngine serverEngine, int maxPacketSize,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   525
            HandshakeMode mode,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   526
            boolean enableReplicatedPacks) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   527
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   528
        System.out.println("=============================================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   529
        System.out.println("Starting handshake " + mode.name());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   530
        int loop = 0;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   531
        if (maxPacketSize < 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   532
            throw new Error("Test issue: maxPacketSize is less than zero!");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   533
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   534
        SSLParameters params = clientEngine.getSSLParameters();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   535
        params.setMaximumPacketSize(maxPacketSize);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   536
        clientEngine.setSSLParameters(params);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   537
        params = serverEngine.getSSLParameters();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   538
        params.setMaximumPacketSize(maxPacketSize);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   539
        serverEngine.setSSLParameters(params);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   540
        SSLEngine firstEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   541
        SSLEngine secondEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   542
        switch (mode) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   543
            case INITIAL_HANDSHAKE:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   544
                firstEngine = clientEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   545
                secondEngine = serverEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   546
                doUnwrapForNotHandshakingStatus = false;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   547
                clientEngine.beginHandshake();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   548
                serverEngine.beginHandshake();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   549
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   550
            case REHANDSHAKE_BEGIN_CLIENT:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   551
                firstEngine = clientEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   552
                secondEngine = serverEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   553
                doUnwrapForNotHandshakingStatus = true;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   554
                clientEngine.beginHandshake();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   555
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   556
            case REHANDSHAKE_BEGIN_SERVER:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   557
                firstEngine = serverEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   558
                secondEngine = clientEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   559
                doUnwrapForNotHandshakingStatus = true;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   560
                serverEngine.beginHandshake();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   561
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   562
            default:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   563
                throw new Error("Test issue: unknown handshake mode");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   564
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   565
        endHandshakeLoop = false;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   566
        while (!endHandshakeLoop) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   567
            if (++loop > MAX_HANDSHAKE_LOOPS) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   568
                throw new Error("Too much loops for handshaking");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   569
            }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   570
            System.out.println("============================================");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   571
            System.out.println("Handshake loop " + loop + ": round 1");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   572
            System.out.println("==========================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   573
            handshakeProcess(firstEngine, secondEngine, maxPacketSize,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   574
                    enableReplicatedPacks);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   575
            if (endHandshakeLoop) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   576
                break;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   577
            }
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   578
            System.out.println("Handshake loop " + loop + ": round 2");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   579
            System.out.println("==========================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   580
            handshakeProcess(secondEngine, firstEngine, maxPacketSize,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   581
                    enableReplicatedPacks);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   582
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   583
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   584
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   585
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   586
     * Routine to send application data from one SSLEngine to another.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   587
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   588
     * @param fromEngine - Sending engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   589
     * @param toEngine   - Receiving engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   590
     * @return - Result of unwrap method of the receiving engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   591
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   592
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   593
    public static SSLEngineResult sendApplicationData(SSLEngine fromEngine,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   594
                                                      SSLEngine toEngine)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   595
            throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   596
        String sender = null;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   597
        String reciever = null;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   598
        String excMsgSent = EXCHANGE_MSG_SENT;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   599
        if (fromEngine.getUseClientMode() && !toEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   600
            sender = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   601
            reciever = "Server";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   602
            excMsgSent += " Client.";
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   603
        } else if (toEngine.getUseClientMode() &&
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   604
                !fromEngine.getUseClientMode()) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   605
            sender = "Server";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   606
            reciever = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   607
            excMsgSent += " Server.";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   608
        } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   609
            throw new Error("Test issue: both engines are in the same mode");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   610
        }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   611
        System.out.println("=============================================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   612
        System.out.println("Trying to send application data from " + sender
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   613
                + " to " + reciever);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   614
        ByteBuffer clientAppSent
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   615
                = ByteBuffer.wrap(excMsgSent.getBytes());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   616
        net = doWrap(fromEngine, sender, 0, clientAppSent);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   617
        SSLEngineResult[] r = new SSLEngineResult[1];
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   618
        ByteBuffer serverAppRecv = doUnWrap(toEngine, reciever, net, r);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   619
        byte[] serverAppRecvTrunc = Arrays.copyOf(serverAppRecv.array(),
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   620
                serverAppRecv.limit());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   621
        String msgRecv = new String(serverAppRecvTrunc);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   622
        if (!msgRecv.equals(excMsgSent)) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   623
            throw new AssertionError(sender + " to " + reciever
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   624
                    + ": application data"
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   625
                    + " has been altered while sending."
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   626
                    + " Message sent: " + "\"" + excMsgSent + "\"."
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   627
                    + " Message recieved: " + "\"" + msgRecv + "\".");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   628
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   629
        System.out.println("Successful sending application data from " + sender
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   630
                + " to " + reciever);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   631
        return r[0];
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   632
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   633
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   634
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   635
     * Close engines by sending "close outbound" message from one SSLEngine to
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   636
     * another.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   637
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   638
     * @param fromEngine - Sending engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   639
     * @param toEngine   - Receiving engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   640
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   641
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   642
    public static void closeEngines(SSLEngine fromEngine,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   643
                                    SSLEngine toEngine) throws SSLException {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   644
        String from = null;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   645
        String to = null;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   646
        ByteBuffer app;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   647
        if (fromEngine.getUseClientMode() && !toEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   648
            from = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   649
            to = "Server";
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   650
        } else if (toEngine.getUseClientMode() &&
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   651
                !fromEngine.getUseClientMode()) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   652
            from = "Server";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   653
            to = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   654
        } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   655
            throw new Error("Both engines are in the same mode");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   656
        }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   657
        System.out.println("=============================================");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   658
        System.out.println(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   659
                "Trying to close engines from " + from + " to " + to);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   660
        // Sending close outbound request to peer
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   661
        fromEngine.closeOutbound();
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   662
        app = ByteBuffer.allocate(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   663
                fromEngine.getSession().getApplicationBufferSize());
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   664
        net = doWrap(fromEngine, from, 0, app, SSLEngineResult.Status.CLOSED);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   665
        doUnWrap(toEngine, to, net, SSLEngineResult.Status.CLOSED);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   666
        app = ByteBuffer.allocate(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   667
                fromEngine.getSession().getApplicationBufferSize());
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   668
        net = doWrap(toEngine, to, 0, app, SSLEngineResult.Status.CLOSED);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   669
        doUnWrap(fromEngine, from, net, SSLEngineResult.Status.CLOSED);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   670
        if (!toEngine.isInboundDone()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   671
            throw new AssertionError(from + " sent close request to " + to
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   672
                    + ", but " + to + "did not close inbound.");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   673
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   674
        // Executing close inbound
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   675
        fromEngine.closeInbound();
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   676
        app = ByteBuffer.allocate(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   677
                fromEngine.getSession().getApplicationBufferSize());
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   678
        net = doWrap(fromEngine, from, 0, app, SSLEngineResult.Status.CLOSED);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   679
        doUnWrap(toEngine, to, net, SSLEngineResult.Status.CLOSED);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   680
        if (!toEngine.isOutboundDone()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   681
            throw new AssertionError(from + "sent close request to " + to
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   682
                    + ", but " + to + "did not close outbound.");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   683
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   684
        System.out.println("Successful closing from " + from + " to " + to);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   685
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   686
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   687
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   688
     * Runs the same test case for all given {@code ciphers}. Method counts all
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   689
     * failures and throws {@code AssertionError} if one or more tests fail.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   690
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   691
     * @param ciphers - Ciphers that should be tested.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   692
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   693
    public void runTests(Ciphers ciphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   694
        int total = ciphers.ciphers.length;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   695
        int failed = testSomeCiphers(ciphers);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   696
        if (failed > 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   697
            throw new AssertionError("" + failed + " of " + total
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   698
                    + " tests failed!");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   699
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   700
        System.out.println("All tests passed!");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   701
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   702
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   703
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   704
     * Runs test cases for ciphers defined by the test mode.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   705
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   706
    public void runTests() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   707
        switch (TEST_MODE) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   708
            case "norm":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   709
            case "norm_sni":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   710
                switch (TESTED_SECURITY_PROTOCOL) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   711
                    case "DTLSv1.0":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   712
                    case "TLSv1":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   713
                    case "TLSv1.1":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   714
                        runTests(Ciphers.SUPPORTED_NON_KRB_NON_SHA_CIPHERS);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   715
                        break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   716
                    default:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   717
                        runTests(Ciphers.SUPPORTED_NON_KRB_CIPHERS);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   718
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   719
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   720
            case "krb":
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   721
                runTests(Ciphers.SUPPORTED_KRB_CIPHERS);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   722
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   723
            default:
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   724
                throw new Error(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   725
                        "Test error: unexpected test mode: " + TEST_MODE);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   726
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   727
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   728
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   729
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   730
     * Returns maxPacketSize value used for MFLN extension testing
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   731
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   732
     * @return - MLFN extension max packet size.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   733
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   734
    public int getMaxPacketSize() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   735
        return maxPacketSize;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   736
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   737
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   738
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   739
     * Checks that status of result {@code r} is {@code wantedStatus}.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   740
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   741
     * @param r            - Result.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   742
     * @param wantedStatus - Wanted status of the result.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   743
     * @throws AssertionError - if status or {@code r} is not
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   744
     *                        {@code wantedStatus}.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   745
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   746
    public static void checkResult(SSLEngineResult r,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   747
                                   SSLEngineResult.Status wantedStatus) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   748
        SSLEngineResult.Status rs = r.getStatus();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   749
        if (!rs.equals(wantedStatus)) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   750
            throw new AssertionError("Unexpected status " + rs.name()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   751
                    + ", should be " + wantedStatus.name());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   752
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   753
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   754
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   755
    /**
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   756
     * Returns SSLContext with TESTED_SECURITY_PROTOCOL protocol and
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   757
     * sets up keys.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   758
     *
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   759
     * @return - SSLContext with a protocol specified by
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   760
     *           TESTED_SECURITY_PROTOCOL.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   761
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   762
    public static SSLContext getContext() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   763
        try {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   764
            java.security.Security.setProperty(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   765
                    "jdk.tls.disabledAlgorithms", "");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   766
            java.security.Security.setProperty(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   767
                    "jdk.certpath.disabledAlgorithms", "");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   768
            KeyStore ks = KeyStore.getInstance("JKS");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   769
            KeyStore ts = KeyStore.getInstance("JKS");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   770
            char[] passphrase = PASSWD.toCharArray();
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   771
            try (FileInputStream keyFileStream =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   772
                    new FileInputStream(KEY_FILE_NAME)) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   773
                ks.load(keyFileStream, passphrase);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   774
            }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   775
            try (FileInputStream trustFileStream =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   776
                    new FileInputStream(TRUST_FILE_NAME)) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   777
                ts.load(trustFileStream, passphrase);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   778
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   779
            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   780
            kmf.init(ks, passphrase);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   781
            TrustManagerFactory tmf =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   782
                    TrustManagerFactory.getInstance("SunX509");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   783
            tmf.init(ts);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   784
            SSLContext sslCtx =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   785
                    SSLContext.getInstance(TESTED_SECURITY_PROTOCOL);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   786
            sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   787
            return sslCtx;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   788
        } catch (KeyStoreException | IOException | NoSuchAlgorithmException |
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   789
                CertificateException | UnrecoverableKeyException |
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   790
                KeyManagementException ex) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   791
            throw new Error("Unexpected exception", ex);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   792
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   793
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   794
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   795
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   796
     * Sets up and starts kerberos KDC server.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   797
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   798
    public static void setUpAndStartKDC() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   799
        String servicePrincipal = "host/" + SERVER_NAME + "@" + KRB_REALM;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   800
        Map<String, String> principals = new HashMap<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   801
        principals.put(KRB_USER_PRINCIPAL, KRB_USER_PASSWORD);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   802
        principals.put(KRBTGT_PRINCIPAL, null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   803
        principals.put(servicePrincipal, null);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   804
        System.setProperty("java.security.krb5.conf", KRB5_CONF_FILENAME);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   805
        startKDC(KRB_REALM, principals, KTAB_FILENAME);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   806
        System.setProperty("java.security.auth.login.config",
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   807
                TEST_SRC + FS + JAAS_CONF_FILE);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   808
        System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   809
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   810
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   811
    /**
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   812
     * Sets up and starts kerberos KDC server if
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   813
     * SSLEngineTestCase.TEST_MODE is "krb".
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   814
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   815
    public static void setUpAndStartKDCIfNeeded() {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   816
        if (TEST_MODE.equals("krb")) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   817
            setUpAndStartKDC();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   818
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   819
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   820
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   821
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   822
     * Returns client ssl engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   823
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   824
     * @param context - SSLContext to get SSLEngine from.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   825
     * @param useSNI  - flag used to enable or disable using SNI extension.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   826
     *                Needed for Kerberos.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   827
     */
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   828
    public static SSLEngine getClientSSLEngine(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   829
            SSLContext context, boolean useSNI) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   830
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   831
        SSLEngine clientEngine = context.createSSLEngine(HOST, 80);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   832
        clientEngine.setUseClientMode(true);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   833
        if (useSNI) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   834
            SNIHostName serverName = new SNIHostName(SERVER_NAME);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   835
            List<SNIServerName> serverNames = new ArrayList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   836
            serverNames.add(serverName);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   837
            SSLParameters params = clientEngine.getSSLParameters();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   838
            params.setServerNames(serverNames);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   839
            clientEngine.setSSLParameters(params);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   840
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   841
        return clientEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   842
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   843
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   844
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   845
     * Returns server ssl engine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   846
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   847
     * @param context - SSLContext to get SSLEngine from.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   848
     * @param useSNI  - flag used to enable or disable using SNI extension.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   849
     *                Needed for Kerberos.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   850
     */
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   851
    public static SSLEngine getServerSSLEngine(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   852
            SSLContext context, boolean useSNI) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   853
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   854
        SSLEngine serverEngine = context.createSSLEngine();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   855
        serverEngine.setUseClientMode(false);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   856
        if (useSNI) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   857
            SNIMatcher matcher = SNIHostName.createSNIMatcher(SNI_PATTERN);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   858
            List<SNIMatcher> matchers = new ArrayList<>();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   859
            matchers.add(matcher);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   860
            SSLParameters params = serverEngine.getSSLParameters();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   861
            params.setSNIMatchers(matchers);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   862
            serverEngine.setSSLParameters(params);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   863
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   864
        return serverEngine;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   865
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   866
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   867
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   868
     * Runs the test case for one cipher suite.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   869
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   870
     * @param cipher - Cipher suite name.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   871
     * @throws SSLException - If tests fails.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   872
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   873
    abstract protected void testOneCipher(String cipher)
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   874
            throws SSLException;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   875
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   876
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   877
     * Iterates through an array of ciphers and runs the same test case for
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   878
     * every entry.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   879
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   880
     * @param ciphers - Array of cipher names.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   881
     * @return - Number of tests failed.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   882
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   883
    protected int testSomeCiphers(Ciphers ciphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   884
        int failedNum = 0;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   885
        String description = ciphers.description;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   886
        System.out.println("===============================================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   887
        System.out.println(description + " ciphers testing");
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   888
        System.out.println("===========================================");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   889
        for (String cs : ciphers.ciphers) {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   890
            System.out.println("---------------------------------------");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   891
            System.out.println("Testing cipher suite " + cs);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   892
            System.out.println("---------------------------------------");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   893
            Throwable error = null;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   894
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   895
            // Reset global mutable static variables
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   896
            net = null;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   897
            doUnwrapForNotHandshakingStatus = false;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   898
            endHandshakeLoop = false;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   899
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   900
            try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   901
                testOneCipher(cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   902
            } catch (Throwable t) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   903
                error = t;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   904
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   905
            switch (ciphers) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   906
                case SUPPORTED_NON_KRB_CIPHERS:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   907
                case SUPPORTED_NON_KRB_NON_SHA_CIPHERS:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   908
                case SUPPORTED_KRB_CIPHERS:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   909
                case ENABLED_NON_KRB_NOT_ANON_CIPHERS:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   910
                    if (error != null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   911
                        System.out.println("Test Failed: " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   912
                        System.err.println("Test Exception for " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   913
                        error.printStackTrace();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   914
                        failedNum++;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   915
                    } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   916
                        System.out.println("Test Passed: " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   917
                    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   918
                    break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   919
                case UNSUPPORTED_CIPHERS:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   920
                    if (error == null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   921
                        System.out.println("Test Failed: " + cs);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   922
                        System.err.println("Test for " + cs +
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   923
                                " should have thrown " +
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   924
                                "IllegalArgumentException, but it has not!");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   925
                        failedNum++;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   926
                    } else if (!(error instanceof IllegalArgumentException)) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   927
                        System.out.println("Test Failed: " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   928
                        System.err.println("Test Exception for " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   929
                        error.printStackTrace();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   930
                        failedNum++;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   931
                    } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   932
                        System.out.println("Test Passed: " + cs);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   933
                    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   934
                    break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   935
                default:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   936
                    throw new Error("Test issue: unexpected ciphers: "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   937
                            + ciphers.name());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   938
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   939
        }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   940
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   941
        return failedNum;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   942
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   943
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   944
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   945
     * Method used for the handshake routine.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   946
     *
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   947
     * @param wrapingEngine         - Engine that is expected to wrap data.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   948
     * @param unwrapingEngine       - Engine that is expected to unwrap data.
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   949
     * @param maxPacketSize         - Maximum packet size for MFLN of zero
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   950
     *                                for no limit.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   951
     * @param enableReplicatedPacks - Set {@code true} to enable replicated
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   952
     *                                packet sending.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   953
     * @throws SSLException - thrown on engine errors.
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   954
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   955
    private static void handshakeProcess(SSLEngine wrapingEngine,
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   956
            SSLEngine unwrapingEngine,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   957
            int maxPacketSize,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   958
            boolean enableReplicatedPacks) throws SSLException {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   959
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   960
        HandshakeStatus wrapingHSStatus = wrapingEngine.getHandshakeStatus();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   961
        HandshakeStatus unwrapingHSStatus =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   962
                unwrapingEngine.getHandshakeStatus();
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   963
        SSLEngineResult r;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   964
        String wrapper, unwrapper;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   965
        if (wrapingEngine.getUseClientMode()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   966
                && !unwrapingEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   967
            wrapper = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   968
            unwrapper = "Server";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   969
        } else if (unwrapingEngine.getUseClientMode()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   970
                && !wrapingEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   971
            wrapper = "Server";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   972
            unwrapper = "Client";
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   973
        } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   974
            throw new Error("Both engines are in the same mode");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   975
        }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   976
        System.out.println(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   977
                wrapper + " handshake (wrap) status " + wrapingHSStatus);
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   978
        System.out.println(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   979
                unwrapper + " handshake (unwrap) status " + unwrapingHSStatus);
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   980
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   981
        ByteBuffer netReplicatedClient = null;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   982
        ByteBuffer netReplicatedServer = null;
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   983
        switch (wrapingHSStatus) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   984
            case NEED_WRAP:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   985
                if (enableReplicatedPacks) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   986
                    if (net != null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   987
                        net.flip();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   988
                        if (net.remaining() != 0) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   989
                            if (wrapingEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   990
                                netReplicatedServer = net;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   991
                            } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   992
                                netReplicatedClient = net;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   993
                            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   994
                        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   995
                    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   996
                }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   997
                ByteBuffer app = ByteBuffer.allocate(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
   998
                        wrapingEngine.getSession().getApplicationBufferSize());
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
   999
                net = doWrap(wrapingEngine, wrapper, maxPacketSize, app);
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1000
                wrapingHSStatus = wrapingEngine.getHandshakeStatus();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1001
                // No break, falling into unwrapping.
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1002
            case NOT_HANDSHAKING:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1003
                switch (unwrapingHSStatus) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1004
                    case NEED_TASK:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1005
                        runDelegatedTasks(unwrapingEngine);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1006
                    case NEED_UNWRAP:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1007
                        doUnWrap(unwrapingEngine, unwrapper, net);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1008
                        if (enableReplicatedPacks) {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1009
                            System.out.println(unwrapper +
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1010
                                    " unwrapping replicated packet...");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1011
                            if (unwrapingEngine.getHandshakeStatus()
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1012
                                    .equals(HandshakeStatus.NEED_TASK)) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1013
                                runDelegatedTasks(unwrapingEngine);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1014
                            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1015
                            ByteBuffer netReplicated;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1016
                            if (unwrapingEngine.getUseClientMode()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1017
                                netReplicated = netReplicatedClient;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1018
                            } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1019
                                netReplicated = netReplicatedServer;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1020
                            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1021
                            if (netReplicated != null) {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1022
                                doUnWrap(unwrapingEngine,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1023
                                        unwrapper, netReplicated);
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1024
                            } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1025
                                net.flip();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1026
                                doUnWrap(unwrapingEngine, unwrapper, net);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1027
                            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1028
                        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1029
                        break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1030
                    case NEED_UNWRAP_AGAIN:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1031
                        break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1032
                    case NOT_HANDSHAKING:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1033
                        if (doUnwrapForNotHandshakingStatus) {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1034
                            System.out.println("Not handshake status unwrap");
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1035
                            doUnWrap(unwrapingEngine, unwrapper, net);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1036
                            doUnwrapForNotHandshakingStatus = false;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1037
                            break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1038
                        } else {
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1039
                            if (wrapingHSStatus ==
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1040
                                        HandshakeStatus.NOT_HANDSHAKING) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1041
                                System.out.println("Handshake is completed");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1042
                                endHandshakeLoop = true;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1043
                            }
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1044
                        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1045
                        break;
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1046
                    case NEED_WRAP:
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1047
                        SSLSession session = unwrapingEngine.getSession();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1048
                        int bufferSize = session.getApplicationBufferSize();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1049
                        ByteBuffer b = ByteBuffer.allocate(bufferSize);
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1050
                        net = doWrap(unwrapingEngine,
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1051
                                        unwrapper, maxPacketSize, b);
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1052
                        unwrapingHSStatus =
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1053
                                unwrapingEngine.getHandshakeStatus();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1054
                        if ((wrapingHSStatus ==
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1055
                                    HandshakeStatus.NOT_HANDSHAKING) &&
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1056
                            (unwrapingHSStatus ==
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1057
                                    HandshakeStatus.NOT_HANDSHAKING)) {
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1058
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1059
                            System.out.println("Handshake is completed");
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1060
                            endHandshakeLoop = true;
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1061
                        }
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1062
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1063
                        break;
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1064
                    default:
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1065
                        throw new Error(
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1066
                                "Unexpected unwraping engine handshake status "
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1067
                                + unwrapingHSStatus.name());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1068
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1069
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1070
            case NEED_UNWRAP:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1071
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1072
            case NEED_UNWRAP_AGAIN:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1073
                net.flip();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1074
                doUnWrap(wrapingEngine, wrapper, net);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1075
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1076
            case NEED_TASK:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1077
                runDelegatedTasks(wrapingEngine);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1078
                break;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1079
            default:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1080
                throw new Error("Unexpected wraping engine handshake status "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1081
                        + wrapingHSStatus.name());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1082
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1083
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1084
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1085
    private static void runDelegatedTasks(SSLEngine engine) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1086
        Runnable runnable;
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1087
        System.out.println("Running delegated tasks...");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1088
        while ((runnable = engine.getDelegatedTask()) != null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1089
            runnable.run();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1090
        }
41820
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1091
        HandshakeStatus hs = engine.getHandshakeStatus();
3d8c88d00c9f 8167680: DTLS implementation bugs
xuelei
parents: 31728
diff changeset
  1092
        if (hs == HandshakeStatus.NEED_TASK) {
31057
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1093
            throw new Error("Handshake shouldn't need additional tasks.");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1094
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1095
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1096
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1097
    /**
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1098
     * Start a KDC server:
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1099
     * - create a KDC instance
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1100
     * - create Kerberos principals
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1101
     * - save Kerberos configuration
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1102
     * - save keys to keytab file
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1103
     * - no pre-auth is required
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1104
     */
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1105
    private static void startKDC(String realm, Map<String, String> principals,
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1106
                                 String ktab) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1107
        try {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1108
            KDC kdc = KDC.create(realm, HOST, 0, true);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1109
            kdc.setOption(KDC.Option.PREAUTH_REQUIRED, Boolean.FALSE);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1110
            if (principals != null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1111
                principals.entrySet().stream().forEach((entry) -> {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1112
                    String name = entry.getKey();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1113
                    String password = entry.getValue();
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1114
                    if (password == null || password.isEmpty()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1115
                        System.out.println("KDC: add a principal '" + name
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1116
                                + "' with a random password");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1117
                        kdc.addPrincipalRandKey(name);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1118
                    } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1119
                        System.out.println("KDC: add a principal '" + name
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1120
                                + "' with '" + password + "' password");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1121
                        kdc.addPrincipal(name, password.toCharArray());
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1122
                    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1123
                });
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1124
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1125
            KDC.saveConfig(KRB5_CONF_FILENAME, kdc);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1126
            if (ktab != null) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1127
                File ktabFile = new File(ktab);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1128
                if (ktabFile.exists()) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1129
                    System.out.println("KDC: append keys to an exising "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1130
                            + "keytab file " + ktab);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1131
                    kdc.appendKtab(ktab);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1132
                } else {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1133
                    System.out.println("KDC: create a new keytab file "
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1134
                            + ktab);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1135
                    kdc.writeKtab(ktab);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1136
                }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1137
            }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1138
            System.out.println("KDC: started on " + HOST + ":" + kdc.getPort()
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1139
                    + " with '" + realm + "' realm");
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1140
        } catch (Exception e) {
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1141
            throw new RuntimeException("KDC: unexpected exception", e);
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1142
        }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1143
    }
babdeee3c007 8072515: Test Task: Develop new tests for JEP 219: Datagram Transport Layer Security (DTLS)
kshefov
parents:
diff changeset
  1144
}