test/jdk/java/security/SignedObject/Chain.java
author wetmore
Fri, 11 May 2018 15:53:12 -0700
branchJDK-8145252-TLS13-branch
changeset 56542 56aaa6cb3693
parent 47421 f9e03aef3a49
child 56592 b1902b22005e
permissions -rw-r--r--
Initial TLSv1.3 Implementation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
     1
/**
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
     2
 * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     4
 *
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     7
 * published by the Free Software Foundation.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     8
 *
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    13
 * accompanied this code).
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    14
 *
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    18
 *
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    21
 * questions.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    22
 */
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    23
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    24
import java.security.Signature;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    25
import java.security.SignedObject;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    26
import java.security.KeyPairGenerator;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    27
import java.security.KeyPair;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    28
import java.security.NoSuchProviderException;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    29
import java.security.PrivateKey;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    30
import java.security.PublicKey;
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    31
import java.security.spec.*;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    32
import java.util.*;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    33
import jdk.test.lib.SigTestUtil;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    34
import static jdk.test.lib.SigTestUtil.SignatureType;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    35
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    36
/*
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    37
 * @test
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    38
 * @bug 8050374 8181048 8146293
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    39
 * @summary Verify a chain of signed objects
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    40
 * @library /test/lib
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    41
 * @build jdk.test.lib.SigTestUtil
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    42
 * @run main Chain
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    43
 */
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    44
public class Chain {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    45
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    46
    static enum KeyAlg {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    47
        RSA("RSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    48
        DSA("DSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    49
        EC("EC");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    50
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    51
        final String name;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    52
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    53
        KeyAlg(String alg) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    54
            this.name = alg;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    55
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    56
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    57
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    58
    static enum Provider {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    59
        Default("default"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    60
        SunRsaSign("SunRsaSign"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    61
        Sun("SUN"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    62
        SunEC("SunEC"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    63
        SunJSSE("SunJSSE"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    64
        SunMSCAPI("SunMSCAPI");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    65
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    66
        final String name;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    67
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    68
        Provider(String name) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    69
            this.name = name;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    70
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    71
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    72
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    73
    static enum SigAlg {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    74
        MD2withRSA("MD2withRSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    75
        MD5withRSA("md5withRSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    76
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    77
        SHA1withDSA("SHA1withDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    78
        SHA224withDSA("SHA224withDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    79
        SHA256withDSA("SHA256withDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    80
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    81
        SHA1withRSA("Sha1withrSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    82
        SHA224withRSA("SHA224withRSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    83
        SHA256withRSA("SHA256withRSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    84
        SHA384withRSA("SHA384withRSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    85
        SHA512withRSA("SHA512withRSA"),
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    86
        SHA512_224withRSA("SHA512/224withRSA"),
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    87
        SHA512_256withRSA("SHA512/256withRSA"),
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    88
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    89
        SHA1withECDSA("SHA1withECDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    90
        SHA256withECDSA("SHA256withECDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    91
        SHA224withECDSA("SHA224withECDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    92
        SHA384withECDSA("SHA384withECDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    93
        SHA512withECDSA("SHA512withECDSA"),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    94
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    95
        MD5andSHA1withRSA("MD5andSHA1withRSA"),
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    96
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    97
        RSASSA_PSS("RSASSA-PSS");
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    98
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    99
        final String name;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   100
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   101
        SigAlg(String name) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   102
            this.name = name;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   103
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   104
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   105
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   106
    static class Test {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   107
        final Provider provider;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   108
        final KeyAlg keyAlg;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   109
        final SigAlg sigAlg;
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   110
        final int keySize;
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   111
        final AlgorithmParameterSpec sigParams;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   112
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   113
        Test(SigAlg sigAlg, KeyAlg keyAlg, Provider provider) {
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   114
            this(sigAlg, keyAlg, provider, -1, null);
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   115
        }
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   116
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   117
        Test(SigAlg sigAlg, KeyAlg keyAlg, Provider provider, int keySize) {
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   118
            this(sigAlg, keyAlg, provider, keySize, null);
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   119
        }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   120
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   121
        Test(SigAlg sigAlg, KeyAlg keyAlg, Provider provider, int keySize,
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   122
                AlgorithmParameterSpec sigParams) {
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   123
            this.provider = provider;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   124
            this.keyAlg = keyAlg;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   125
            this.sigAlg = sigAlg;
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   126
            this.keySize = keySize;
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   127
            this.sigParams = sigParams;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   128
        }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   129
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   130
        private static String formatParams(AlgorithmParameterSpec aps) {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   131
            if (aps == null) return "null";
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   132
            if (aps instanceof PSSParameterSpec) {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   133
                PSSParameterSpec p = (PSSParameterSpec) aps;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   134
                return String.format("PSSParameterSpec (%s, %s, %s, %s)",
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   135
                    p.getDigestAlgorithm(), formatParams(p.getMGFParameters()),
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   136
                    p.getSaltLength(), p.getTrailerField());
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   137
            } else if (aps instanceof MGF1ParameterSpec) {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   138
                return "MGF1" +
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   139
                    ((MGF1ParameterSpec)aps).getDigestAlgorithm();
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   140
            } else {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   141
                return aps.toString();
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   142
            }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   143
        }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   144
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   145
        public String toString() {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   146
            return String.format("Test: provider = %s, signature alg = %s, "
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   147
                + " w/ %s, key alg = %s", provider, sigAlg,
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   148
                formatParams(sigParams), keyAlg);
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   149
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   150
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   151
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   152
    private static final Test[] tests = {
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   153
        new Test(SigAlg.SHA1withDSA, KeyAlg.DSA, Provider.Default, 1024),
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   154
        new Test(SigAlg.MD2withRSA, KeyAlg.RSA, Provider.Default),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   155
        new Test(SigAlg.MD5withRSA, KeyAlg.RSA, Provider.Default),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   156
        new Test(SigAlg.SHA1withRSA, KeyAlg.RSA, Provider.Default),
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   157
        new Test(SigAlg.SHA1withDSA, KeyAlg.DSA, Provider.Sun, 1024),
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   158
        new Test(SigAlg.SHA224withDSA, KeyAlg.DSA, Provider.Sun, 2048),
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   159
        new Test(SigAlg.SHA256withDSA, KeyAlg.DSA, Provider.Sun, 2048),
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   160
    };
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   161
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   162
    private static final String str = "to-be-signed";
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   163
    private static final int N = 3;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   164
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   165
    public static void main(String argv[]) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   166
        boolean result = Arrays.stream(tests).allMatch((test) -> runTest(test));
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   167
        result &= runTestPSS(2048);
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   168
        if (result) {
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   169
            System.out.println("All tests passed");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   170
        } else {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   171
            throw new RuntimeException("Some tests failed");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   172
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   173
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   174
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   175
    private static boolean runTestPSS(int keysize) {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   176
        boolean result = true;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   177
        SigAlg pss = SigAlg.RSASSA_PSS;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   178
        Iterator<String> mdAlgs = SigTestUtil.getDigestAlgorithms
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   179
            (SignatureType.RSASSA_PSS, keysize).iterator();
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   180
        while (mdAlgs.hasNext()) {
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   181
            result &= runTest(new Test(pss, KeyAlg.RSA, Provider.SunRsaSign,
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   182
                keysize, SigTestUtil.generateDefaultParameter
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   183
                    (SignatureType.RSASSA_PSS, mdAlgs.next())));
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   184
        }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   185
        return result;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   186
    }
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   187
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   188
    static boolean runTest(Test test) {
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   189
        System.out.println(test);
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   190
        try {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   191
            // Generate all private/public key pairs
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   192
            PrivateKey[] privKeys = new PrivateKey[N];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   193
            PublicKey[] pubKeys = new PublicKey[N];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   194
            PublicKey[] anotherPubKeys = new PublicKey[N];
44116
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   195
            Signature signature;
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   196
            KeyPairGenerator kpg;
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   197
            if (test.provider != Provider.Default) {
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   198
                signature = Signature.getInstance(test.sigAlg.name,
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   199
                        test.provider.name);
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   200
                kpg = KeyPairGenerator.getInstance(
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   201
                    test.keyAlg.name, test.provider.name);
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   202
            } else {
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   203
                signature = Signature.getInstance(test.sigAlg.name);
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   204
                kpg = KeyPairGenerator.getInstance(test.keyAlg.name);
fa73683c2c10 8176183: sun/security/mscapi/SignedObjectChain.java fails on Windows
asmotrak
parents: 39502
diff changeset
   205
            }
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   206
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   207
            signature.setParameter(test.sigParams);
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
   208
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   209
            for (int j=0; j < N; j++) {
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   210
                if (test.keySize != -1) {
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   211
                    kpg.initialize(test.keySize);
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   212
                }
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   213
                KeyPair kp = kpg.genKeyPair();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   214
                KeyPair anotherKp = kpg.genKeyPair();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   215
                privKeys[j] = kp.getPrivate();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   216
                pubKeys[j] = kp.getPublic();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   217
                anotherPubKeys[j] = anotherKp.getPublic();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   218
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   219
                if (Arrays.equals(pubKeys[j].getEncoded(),
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   220
                        anotherPubKeys[j].getEncoded())) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   221
                    System.out.println("Failed: it should not get "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   222
                            + "the same pair of public key");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   223
                    return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   224
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   225
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   226
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   227
            // Create a chain of signed objects
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   228
            SignedObject[] objects = new SignedObject[N];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   229
            objects[0] = new SignedObject(str, privKeys[0], signature);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   230
            for (int j = 1; j < N; j++) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   231
                objects[j] = new SignedObject(objects[j - 1], privKeys[j],
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   232
                        signature);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   233
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   234
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   235
            // Verify the chain
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   236
            int n = objects.length - 1;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   237
            SignedObject object = objects[n];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   238
            do {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   239
                if (!object.verify(pubKeys[n], signature)) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   240
                    System.out.println("Failed: verification failed, n = " + n);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   241
                    return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   242
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   243
                if (object.verify(anotherPubKeys[n], signature)) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   244
                    System.out.println("Failed: verification should not "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   245
                            + "succeed with wrong public key, n = " + n);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   246
                    return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   247
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   248
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   249
                object = (SignedObject) object.getObject();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   250
                n--;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   251
            } while (n > 0);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   252
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   253
            System.out.println("signed data: " + object.getObject());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   254
            if (!str.equals(object.getObject())) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   255
                System.out.println("Failed: signed data is not equal to "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   256
                        + "original one");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   257
                return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   258
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   259
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   260
            System.out.println("Test passed");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   261
            return true;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   262
        } catch (NoSuchProviderException nspe) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   263
            if (test.provider == Provider.SunMSCAPI
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   264
                    && !System.getProperty("os.name").startsWith("Windows")) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   265
                System.out.println("SunMSCAPI is available only on Windows: "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   266
                        + nspe);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   267
                return true;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   268
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   269
            System.out.println("Unexpected exception: " + nspe);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   270
            return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   271
        } catch (Exception e) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   272
            System.out.println("Unexpected exception: " + e);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   273
            e.printStackTrace(System.out);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   274
            return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   275
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   276
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   277
}
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   278