1 /*
2 * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test %W% %E%
26 * @bug 6695485
27 * @summary Make sure initSign/initVerify() check RSA key lengths
28 * @author Yu-Ching Valerie Peng
29 * @library ..
30 * @modules jdk.crypto.cryptoki
31 * @run main/othervm TestRSAKeyLength
32 * @run main/othervm TestRSAKeyLength sm
33 */
34
35 import java.security.InvalidKeyException;
36 import java.security.KeyPair;
37 import java.security.KeyPairGenerator;
38 import java.security.PrivateKey;
39 import java.security.Provider;
40 import java.security.PublicKey;
41 import java.security.Signature;
42 import java.security.SignedObject;
43
44 public class TestRSAKeyLength extends PKCS11Test {
45
46 public static void main(String[] args) throws Exception {
47 main(new TestRSAKeyLength(), args);
48 }
49
50 @Override
51 public void main(Provider p) throws Exception {
52
53 /*
54 * Use Solaris SPARC 11.2 or later to avoid an intermittent failure
55 * when running SunPKCS11-Solaris (8044554)
56 */
57 if (p.getName().equals("SunPKCS11-Solaris") &&
58 props.getProperty("os.name").equals("SunOS") &&
59 props.getProperty("os.arch").equals("sparcv9") &&
60 props.getProperty("os.version").compareTo("5.11") <= 0 &&
61 getDistro().compareTo("11.2") < 0) {
62
63 System.out.println("SunPKCS11-Solaris provider requires " +
64 "Solaris SPARC 11.2 or later, skipping");
65 return;
66 }
67
68 boolean isValidKeyLength[] = { true, true, true, false, false };
69 String algos[] = { "SHA1withRSA", "SHA224withRSA", "SHA256withRSA",
70 "SHA384withRSA", "SHA512withRSA" };
71 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", p);
72 kpg.initialize(512);
73 KeyPair kp = kpg.generateKeyPair();
74 PrivateKey privKey = kp.getPrivate();
75 PublicKey pubKey = kp.getPublic();
76
77 if (algos.length != isValidKeyLength.length) {
78 throw new Exception("Internal Error: number of test algos" +
79 " and results length mismatch!");
80 }
81 for (int i = 0; i < algos.length; i++) {
82 Signature sig = Signature.getInstance(algos[i], p);
83 System.out.println("Testing RSA signature " + algos[i]);
84 try {
85 sig.initSign(privKey);
86 if (!isValidKeyLength[i]) {
87 throw new Exception("initSign: Expected IKE not thrown!");
88 }
89 } catch (InvalidKeyException ike) {
90 if (isValidKeyLength[i]) {
91 throw new Exception("initSign: Unexpected " + ike);
92 }
93 }
94 try {
95 sig.initVerify(pubKey);
96 if (!isValidKeyLength[i]) {
97 throw new RuntimeException("initVerify: Expected IKE not thrown!");
98 }
99 new SignedObject("Test string for getSignature test.", privKey, sig);
100 } catch (InvalidKeyException ike) {
101 if (isValidKeyLength[i]) {
102 throw new Exception("initSign: Unexpected " + ike);
103 }
104 }
105 }
106 }
107 }