26 * @bug 7081411
27 * @summary DSA keypair generation affected by Solaris bug
28 * @modules java.base/sun.security.provider
29 */
30
31 import java.security.KeyPair;
32 import java.security.KeyPairGenerator;
33 import java.security.Signature;
34 import sun.security.provider.DSAPrivateKey;
35
36 public class SolarisShortDSA {
37 static byte[] data = new byte[0];
38 public static void main(String args[]) throws Exception {
39 for (int i=0; i<10000; i++) {
40 KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
41 KeyPair kp = kpg.generateKeyPair();
42 DSAPrivateKey dpk = (DSAPrivateKey)kp.getPrivate();
43 int len = dpk.getX().bitLength();
44 if (len <= 152) {
45 if (!use(kp)) {
46 String os = System.getProperty("os.name");
47 // Solaris bug, update the following line once it's fixed
48 if (os.equals("SunOS")) {
49 throw new IllegalStateException(
50 "Don't panic. This is a Solaris bug");
51 } else {
52 throw new RuntimeException("Real test failure");
53 }
54 }
55 break;
56 }
57 }
58 }
59
60 static boolean use(KeyPair kp) throws Exception {
61 Signature sig = Signature.getInstance("SHA1withDSA");
62 sig.initSign(kp.getPrivate());
63 sig.update(data);
64 byte[] signed = sig.sign();
65 Signature sig2 = Signature.getInstance("SHA1withDSA");
66 sig2.initVerify(kp.getPublic());
67 sig2.update(data);
68 return sig2.verify(signed);
69 }
70 }
|
26 * @bug 7081411
27 * @summary DSA keypair generation affected by Solaris bug
28 * @modules java.base/sun.security.provider
29 */
30
31 import java.security.KeyPair;
32 import java.security.KeyPairGenerator;
33 import java.security.Signature;
34 import sun.security.provider.DSAPrivateKey;
35
36 public class SolarisShortDSA {
37 static byte[] data = new byte[0];
38 public static void main(String args[]) throws Exception {
39 for (int i=0; i<10000; i++) {
40 KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
41 KeyPair kp = kpg.generateKeyPair();
42 DSAPrivateKey dpk = (DSAPrivateKey)kp.getPrivate();
43 int len = dpk.getX().bitLength();
44 if (len <= 152) {
45 if (!use(kp)) {
46 throw new RuntimeException("Real test failure");
47 }
48 break;
49 }
50 }
51 }
52
53 static boolean use(KeyPair kp) throws Exception {
54 Signature sig = Signature.getInstance("SHA1withDSA");
55 sig.initSign(kp.getPrivate());
56 sig.update(data);
57 byte[] signed = sig.sign();
58 Signature sig2 = Signature.getInstance("SHA1withDSA");
59 sig2.initVerify(kp.getPublic());
60 sig2.update(data);
61 return sig2.verify(signed);
62 }
63 }
|