test/jdk/java/security/Signature/Offsets.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:
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
     1
/*
56542
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
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    24
import java.security.*;
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    25
import java.security.spec.*;
45288
58be10a068c2 8180805: move RandomFactory to the top level testlibrary
iignatyev
parents: 30791
diff changeset
    26
import jdk.test.lib.RandomFactory;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    27
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    28
/*
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    29
 * @test
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    30
 * @bug 8050374 8181048 8146293
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    31
 * @key randomness
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    32
 * @summary This test validates signature verification
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    33
 *          Signature.verify(byte[], int, int). The test uses RandomFactory to
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    34
 *          get random set of clear text data to sign. After the signature
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    35
 *          generation, the test tries to verify signature with the above API
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    36
 *          and passing in different signature offset (0, 33, 66, 99).
45288
58be10a068c2 8180805: move RandomFactory to the top level testlibrary
iignatyev
parents: 30791
diff changeset
    37
 * @library /test/lib
45467
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45288
diff changeset
    38
 * @build jdk.test.lib.RandomFactory
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    39
 * @run main Offsets SUN NONEwithDSA
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    40
 * @run main Offsets SUN SHA1withDSA
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    41
 * @run main Offsets SUN SHA224withDSA
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    42
 * @run main Offsets SUN SHA256withDSA
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    43
 * @run main Offsets SunRsaSign SHA512withRSA
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    44
 * @run main Offsets SunRsaSign SHA512/224withRSA
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    45
 * @run main Offsets SunRsaSign SHA512/256withRSA
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    46
 */
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    47
public class Offsets {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    48
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    49
    private final int size;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    50
    private final byte[] cleartext;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    51
    private final PublicKey pubkey;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    52
    private final Signature signature;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    53
    private final byte[] signed;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    54
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    55
    private Offsets(Signature signature, PublicKey pubkey, PrivateKey privkey,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    56
            int size, byte[] cleartext) throws InvalidKeyException,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    57
                SignatureException {
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    58
        System.out.println("Testing signature " + signature.getAlgorithm()); 
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    59
        this.pubkey = pubkey;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    60
        this.signature = signature;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    61
        this.size = size;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    62
        this.cleartext = cleartext;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    63
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    64
        String sigAlg = signature.getAlgorithm();
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    65
        signature.initSign(privkey);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    66
        signature.update(cleartext, 0, size);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    67
        signed = signature.sign();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    68
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    69
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    70
    int getDataSize() {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    71
        return size;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    72
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    73
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    74
    int getSignatureLength() {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    75
        return signed.length;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    76
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    77
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    78
    byte[] shiftSignData(int offset) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    79
        byte[] testSignData = new byte[offset + signed.length];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    80
        System.arraycopy(signed, 0, testSignData, offset,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    81
                signed.length);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    82
        return testSignData;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    83
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    84
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    85
    boolean verifySignature(byte[] sigData, int sigOffset, int sigLength,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    86
            int updateOffset, int updateLength)
56542
56aaa6cb3693 Initial TLSv1.3 Implementation
wetmore
parents: 47421
diff changeset
    87
            throws InvalidKeyException, SignatureException {
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    88
        signature.initVerify(pubkey);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    89
        signature.update(cleartext, updateOffset, updateLength);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    90
        return signature.verify(sigData, sigOffset, sigLength);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    91
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    92
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    93
    static Offsets init(String provider, String algorithm)
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    94
            throws NoSuchAlgorithmException, NoSuchProviderException,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    95
            InvalidKeyException, SignatureException {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    96
        // fill the cleartext data with random bytes
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    97
        byte[] cleartext = new byte[100];
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    98
        RandomFactory.getRandom().nextBytes(cleartext);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
    99
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   100
        // NONEwith requires input to be of 20 bytes
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   101
        int size = algorithm.contains("NONEwith") ? 20 : 100;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   102
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   103
        // create signature instance
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   104
        Signature signature = Signature.getInstance(algorithm, provider);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   105
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   106
        String keyAlgo;
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   107
        int keySize = 2048;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   108
        if (algorithm.contains("RSA")) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   109
            keyAlgo = "RSA";
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   110
        } else if (algorithm.contains("ECDSA")) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   111
            keyAlgo = "EC";
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   112
            keySize = 256;
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   113
        } else if (algorithm.contains("DSA")) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   114
            keyAlgo = "DSA";
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   115
            if (algorithm.startsWith("SHAwith") ||
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   116
                    algorithm.startsWith("SHA1with")) {
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   117
                keySize = 1024;
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   118
            }
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   119
        } else {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   120
            throw new RuntimeException("Test doesn't support this signature "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   121
                    + "algorithm: " + algorithm);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   122
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   123
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   124
        KeyPairGenerator kpg = KeyPairGenerator.getInstance(keyAlgo, provider);
47421
f9e03aef3a49 8181048: Refactor existing providers to refer to the same constants for default values for key length
valeriep
parents: 47216
diff changeset
   125
        kpg.initialize(keySize);
30791
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   126
        KeyPair kp = kpg.generateKeyPair();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   127
        PublicKey pubkey = kp.getPublic();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   128
        PrivateKey privkey = kp.getPrivate();
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   129
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   130
        return new Offsets(signature, pubkey, privkey, size, cleartext);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   131
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   132
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   133
    public static void main(String[] args) throws NoSuchAlgorithmException,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   134
            InvalidKeyException, SignatureException {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   135
        if (args.length < 2) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   136
            throw new RuntimeException("Wrong parameters");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   137
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   138
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   139
        boolean result = true;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   140
        try {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   141
            Offsets test = init(args[0], args[1]);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   142
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   143
            // We are trying 3 different offsets, data size has nothing to do
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   144
            // with signature length
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   145
            for (int chunk = 3; chunk > 0; chunk--) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   146
                int signOffset = test.getDataSize() / chunk;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   147
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   148
                System.out.println("Running test with offset " + signOffset);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   149
                byte[] signData = test.shiftSignData(signOffset);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   150
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   151
                boolean success = test.verifySignature(signData, signOffset,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   152
                        test.getSignatureLength(), 0, test.getDataSize());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   153
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   154
                if (success) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   155
                    System.out.println("Successfully verified with offset "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   156
                            + signOffset);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   157
                } else {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   158
                    System.out.println("Verification failed with offset "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   159
                            + signOffset);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   160
                    result = false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   161
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   162
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   163
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   164
            // save signature to offset 0
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   165
            byte[] signData = test.shiftSignData(0);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   166
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   167
            // Negative tests
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   168
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   169
            // Test signature offset 0.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   170
            // Wrong test data will be passed to update,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   171
            // so signature verification should fail.
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   172
            for (int chunk = 3; chunk > 0; chunk--) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   173
                int dataOffset = (test.getDataSize() - 1) / chunk;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   174
                boolean success;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   175
                try {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   176
                    success = test.verifySignature(signData, 0,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   177
                            test.getSignatureLength(), dataOffset,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   178
                            (test.getDataSize() - dataOffset));
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   179
                } catch (SignatureException e) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   180
                    // Since we are trying different data size, it can throw
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   181
                    // SignatureException
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   182
                    success = false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   183
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   184
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   185
                if (!success) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   186
                    System.out.println("Signature verification failed "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   187
                            + "as expected, with data offset " + dataOffset
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   188
                            + " and length "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   189
                            + (test.getDataSize() - dataOffset));
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   190
                } else {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   191
                    System.out.println("Signature verification "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   192
                            + "should not succeed, with data offset "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   193
                            + dataOffset + " and length "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   194
                            + (test.getDataSize() - dataOffset));
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   195
                    result = false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   196
                }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   197
            }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   198
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   199
            // Tests with manipulating offset and length
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   200
            result &= Offsets.checkFailure(test, signData, -1,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   201
                    test.getSignatureLength());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   202
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   203
            result &= Offsets.checkFailure(test, signData, 0,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   204
                    test.getSignatureLength() - 1);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   205
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   206
            result &= Offsets.checkFailure(test, signData,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   207
                    test.getSignatureLength() + 1, test.getSignatureLength());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   208
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   209
            result &= Offsets.checkFailure(test, signData, 0,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   210
                    test.getSignatureLength() + 1);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   211
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   212
            result &= Offsets.checkFailure(test, signData, 0, 0);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   213
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   214
            result &= Offsets.checkFailure(test, signData, 0, -1);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   215
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   216
            result &= Offsets.checkFailure(test, signData,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   217
                    2147483646, test.getSignatureLength());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   218
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   219
            result &= Offsets.checkFailure(test, null, 0,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   220
                    test.getSignatureLength());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   221
        } catch (NoSuchProviderException nspe) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   222
            System.out.println("No such provider: " + nspe);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   223
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   224
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   225
        if (!result) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   226
            throw new RuntimeException("Some test cases failed");
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   227
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   228
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   229
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   230
    static boolean checkFailure(Offsets test, byte[] signData, int offset,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   231
            int length) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   232
        boolean success;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   233
        try {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   234
            success = test.verifySignature(signData, offset, length, 0,
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   235
                    test.getDataSize());
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   236
        } catch (IllegalArgumentException | SignatureException e) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   237
            System.out.println("Expected exception: " + e);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   238
            success = false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   239
        } catch (InvalidKeyException e) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   240
            System.out.println("Unexpected exception: " + e);
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
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   244
        if (!success) {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   245
            System.out.println("Signature verification failed as expected, "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   246
                    + "with signature offset " + offset + " and length "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   247
                    + length);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   248
            return true;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   249
        } else {
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   250
            System.out.println("Signature verification should not succeed, "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   251
                    + "with signature offset " + offset + " and length "
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   252
                    + length);
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   253
            return false;
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   254
        }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   255
    }
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   256
425c19d93347 8050374: More Signature tests
asmotrak
parents:
diff changeset
   257
}