25 import java.security.spec.*; |
25 import java.security.spec.*; |
26 import java.security.interfaces.*; |
26 import java.security.interfaces.*; |
27 |
27 |
28 /* |
28 /* |
29 * @test |
29 * @test |
30 * @bug 8080462 |
30 * @bug 8080462 8226651 |
31 * @summary testing interoperability of PSS signatures of PKCS11 provider |
31 * @summary testing interoperability of PSS signatures of PKCS11 provider |
32 * against SunRsaSign provider |
32 * against SunRsaSign provider |
33 * @library /test/lib .. |
33 * @library /test/lib .. |
34 * @modules jdk.crypto.cryptoki |
34 * @modules jdk.crypto.cryptoki |
35 * @run main/othervm SigInteropPSS |
35 * @run main/othervm SigInteropPSS |
62 Signature.getInstance("RSASSA-PSS", "SunRsaSign"); |
62 Signature.getInstance("RSASSA-PSS", "SunRsaSign"); |
63 |
63 |
64 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", p); |
64 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", p); |
65 kpg.initialize(3072); |
65 kpg.initialize(3072); |
66 KeyPair kp = kpg.generateKeyPair(); |
66 KeyPair kp = kpg.generateKeyPair(); |
67 boolean status; |
|
68 try { |
|
69 status = runTest(sigSunRsaSign, sigPkcs11, kp); |
|
70 status &= runTest(sigPkcs11, sigSunRsaSign, kp); |
|
71 } catch (Exception e) { |
|
72 System.out.println("Unexpected exception: " + e); |
|
73 e.printStackTrace(System.out); |
|
74 status = false; |
|
75 } |
|
76 |
67 |
77 if (!status) { |
68 runTest(sigSunRsaSign, sigPkcs11, kp); |
78 throw new RuntimeException("One or more test failed"); |
69 runTest(sigPkcs11, sigSunRsaSign, kp); |
79 } |
70 |
80 System.out.println("Test passed"); |
71 System.out.println("Test passed"); |
81 } |
72 } |
82 |
73 |
83 static boolean runTest(Signature signer, Signature verifier, KeyPair kp) throws Exception { |
74 static void runTest(Signature signer, Signature verifier, KeyPair kp) |
|
75 throws Exception { |
84 System.out.println("\tSign using " + signer.getProvider().getName()); |
76 System.out.println("\tSign using " + signer.getProvider().getName()); |
85 System.out.println("\tVerify using " + verifier.getProvider().getName()); |
77 System.out.println("\tVerify using " + verifier.getProvider().getName()); |
86 |
78 |
87 boolean status; |
79 for (String hash : DIGESTS) { |
88 for (String digestAlg : DIGESTS) { |
80 for (String mgfHash : DIGESTS) { |
89 System.out.println("\tDigest = " + digestAlg); |
81 System.out.println("\tDigest = " + hash); |
90 PSSParameterSpec params = new PSSParameterSpec(digestAlg, "MGF1", |
82 System.out.println("\tMGF = MGF1_" + mgfHash); |
91 new MGF1ParameterSpec(digestAlg), 0, 1); |
83 |
92 try { |
84 PSSParameterSpec params = new PSSParameterSpec(hash, "MGF1", |
|
85 new MGF1ParameterSpec(mgfHash), 0, 1); |
|
86 |
93 signer.setParameter(params); |
87 signer.setParameter(params); |
94 signer.initSign(kp.getPrivate()); |
88 signer.initSign(kp.getPrivate()); |
95 verifier.setParameter(params); |
89 verifier.setParameter(params); |
96 verifier.initVerify(kp.getPublic()); |
90 verifier.initVerify(kp.getPublic()); |
97 } catch (Exception e) { |
91 |
98 System.out.println("\tERROR: unexpected ex during init" + e); |
|
99 status = false; |
|
100 continue; |
|
101 } |
|
102 try { |
|
103 signer.update(MSG); |
92 signer.update(MSG); |
104 byte[] sigBytes = signer.sign(); |
93 byte[] sigBytes = signer.sign(); |
105 verifier.update(MSG); |
94 verifier.update(MSG); |
106 boolean isValid = verifier.verify(sigBytes); |
95 boolean isValid = verifier.verify(sigBytes); |
107 if (isValid) { |
96 if (isValid) { |
108 System.out.println("\tPSS Signature verified"); |
97 System.out.println("\tPSS Signature verified"); |
109 } else { |
98 } else { |
110 System.out.println("\tERROR verifying PSS Signature"); |
99 throw new RuntimeException("ERROR verifying PSS Signature"); |
111 status = false; |
|
112 } |
100 } |
113 } catch (Exception e) { |
|
114 System.out.println("\tERROR: unexpected ex" + e); |
|
115 e.printStackTrace(); |
|
116 status = false; |
|
117 } |
101 } |
118 } |
102 } |
119 return true; |
|
120 } |
103 } |
121 } |
104 } |