test/jdk/sun/security/pkcs11/Signature/SigInteropPSS.java
changeset 55530 6aa047de311b
parent 55332 f492567244ab
child 58679 9c3209ff7550
equal deleted inserted replaced
55529:33766821f738 55530:6aa047de311b
    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 }