1 /*
   2  * Copyright (c) 2003, 2015, 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 import java.io.*;
  25 import java.util.*;
  26 
  27 import java.security.KeyStore;
  28 import java.security.KeyStoreException;
  29 import java.security.KeyFactory;
  30 import java.security.KeyPairGenerator;
  31 import java.security.KeyPair;
  32 import java.security.SecureRandom;
  33 import java.security.AuthProvider;
  34 import java.security.PrivateKey;
  35 import java.security.Provider;
  36 import java.security.ProviderException;
  37 import java.security.Signature;
  38 import java.security.Security;
  39 
  40 import java.security.cert.*;
  41 import java.security.spec.*;
  42 import java.security.interfaces.*;
  43 
  44 import javax.crypto.SecretKey;
  45 
  46 import javax.security.auth.Subject;
  47 import javax.security.auth.login.LoginException;
  48 
  49 import com.sun.security.auth.module.*;
  50 import com.sun.security.auth.callback.*;
  51 
  52 
  53 public class Basic extends PKCS11Test {
  54 
  55     private static final char SEP = File.separatorChar;
  56 
  57     private static String DIR = System.getProperty("DIR");
  58     private static char[] tokenPwd;
  59     private static final char[] ibuttonPwd =
  60                         new char[0];
  61     private static final char[] activcardPwd =
  62                         new char[] { '1', '1', '2', '2', '3', '3' };
  63     private static final char[] nssPwd =
  64                         new char[] { 't', 'e', 's', 't', '1', '2' };
  65     private static final char[] solarisPwd =
  66                         new char[] { 'p', 'i', 'n' };
  67     private static final char[] sca1000Pwd =
  68                         new char[] { 'p', 'a', 's', 's', 'w', 'o', 'r', 'd' };
  69     private static final char[] sPwd = { 'f', 'o', 'o' };
  70 
  71     private static SecretKey sk1;
  72     private static SecretKey sk2;
  73     private static SecretKey sk3;
  74     private static SecretKey sk4;
  75 
  76     private static RSAPrivateCrtKey pk1;
  77     private static PrivateKey pk2;
  78     private static PrivateKey pk3;
  79 
  80     private static Certificate[] chain1;
  81     private static Certificate[] chain2;
  82     private static Certificate[] chain3;
  83     private static Certificate[] chain4;
  84 
  85     private static X509Certificate randomCert;
  86 
  87     private static KeyStore ks;
  88     private static final String KS_TYPE = "PKCS11";
  89     private static Provider provider;
  90 
  91     private static class FooEntry implements KeyStore.Entry { }
  92 
  93     private static class P11SecretKey implements SecretKey {
  94         String alg;
  95         int length;
  96         public P11SecretKey(String alg, int length) {
  97             this.alg = alg;
  98             this.length = length;
  99         }
 100         public String getAlgorithm() { return alg; }
 101         public String getFormat() { return "raw"; }
 102         public byte[] getEncoded() { return new byte[length/8]; }
 103     }
 104 
 105     public static void main(String[] args) throws Exception {
 106         main(new Basic());
 107     }
 108 
 109     public void main(Provider p) throws Exception {
 110 
 111         this.provider = p;
 112 
 113         // get private keys
 114         KeyFactory kf = KeyFactory.getInstance("RSA", "SunJSSE");
 115         KeyFactory dsaKf = KeyFactory.getInstance("DSA", "SUN");
 116 
 117         ObjectInputStream ois1 = new ObjectInputStream
 118                         (new FileInputStream(new File(DIR, "pk1.key")));
 119         byte[] keyBytes = (byte[])ois1.readObject();
 120         ois1.close();
 121         PrivateKey tmpKey =
 122                 kf.generatePrivate(new PKCS8EncodedKeySpec(keyBytes));
 123         pk1 = (RSAPrivateCrtKey)tmpKey;
 124 
 125         ObjectInputStream ois2 = new ObjectInputStream
 126                         (new FileInputStream(new File(DIR, "pk2.key")));
 127         keyBytes = (byte[])ois2.readObject();
 128         ois2.close();
 129         pk2 = kf.generatePrivate(new PKCS8EncodedKeySpec(keyBytes));
 130 
 131         ObjectInputStream ois3 = new ObjectInputStream
 132                         (new FileInputStream(new File(DIR, "pk3.key")));
 133         keyBytes = (byte[])ois3.readObject();
 134         pk3 = kf.generatePrivate(new PKCS8EncodedKeySpec(keyBytes));
 135         ois3.close();
 136 
 137         // get cert chains for private keys
 138         CertificateFactory cf = CertificateFactory.getInstance("X.509", "SUN");
 139         Certificate caCert = (X509Certificate)cf.generateCertificate
 140                         (new FileInputStream(new File(DIR, "ca.cert")));
 141         Certificate ca2Cert = (X509Certificate)cf.generateCertificate
 142                         (new FileInputStream(new File(DIR, "ca2.cert")));
 143         Certificate pk1cert = (X509Certificate)cf.generateCertificate
 144                         (new FileInputStream(new File(DIR, "pk1.cert")));
 145         Certificate pk1cert2 = (X509Certificate)cf.generateCertificate
 146                         (new FileInputStream(new File(DIR, "pk1.cert2")));
 147         Certificate pk2cert = (X509Certificate)cf.generateCertificate
 148                         (new FileInputStream(new File(DIR, "pk2.cert")));
 149         Certificate pk3cert = (X509Certificate)cf.generateCertificate
 150                         (new FileInputStream(new File(DIR, "pk3.cert")));
 151         chain1 = new Certificate[] { pk1cert, caCert };
 152         chain2 = new Certificate[] { pk2cert, caCert };
 153         chain3 = new Certificate[] { pk3cert, caCert };
 154         chain4 = new Certificate[] { pk1cert2, ca2Cert };
 155 
 156         // create secret keys
 157         sk1 = new P11SecretKey("DES", 64);
 158         sk2 = new P11SecretKey("DESede", 192);
 159         sk3 = new P11SecretKey("AES", 128);
 160         sk4 = new P11SecretKey("RC4", 128);
 161 
 162         // read randomCert
 163         randomCert = (X509Certificate)cf.generateCertificate
 164                         (new FileInputStream(new File(DIR, "random.cert")));
 165 
 166         doTest();
 167     }
 168 
 169     private static void doTest() throws Exception {
 170 
 171         String token = System.getProperty("TOKEN");
 172         String test = System.getProperty("TEST");
 173 
 174         if (token == null || token.length() == 0) {
 175             throw new Exception("token arg required");
 176         }
 177         if (test == null || test.length() == 0) {
 178             throw new Exception("test arg required");
 179         }
 180 
 181         if ("ibutton".equals(token)) {
 182             tokenPwd = ibuttonPwd;
 183         } else if ("activcard".equals(token)) {
 184             tokenPwd = activcardPwd;
 185         } else if ("nss".equals(token)) {
 186             tokenPwd = nssPwd;
 187         } else if ("sca1000".equals(token)) {
 188             tokenPwd = sca1000Pwd;
 189         } else if ("solaris".equals(token)) {
 190             tokenPwd = solarisPwd;
 191         }
 192 
 193         if ("list".equals(test)) {
 194             Basic.list();
 195         } else if ("basic".equals(test)) {
 196 
 197             int testnum = 1;
 198 
 199             if ("ibutton".equals(token)) {
 200                 // pkey and setAttribute
 201                 testnum = Basic.pkey(testnum);
 202                 testnum = Basic.setAttribute(testnum);
 203             } else if ("activcard".equals(token)) {
 204                 // sign
 205                 testnum = Basic.signAlias(testnum, null);
 206             } else if ("nss".equals(token)) {
 207                 // setAttribute, pkey, sign
 208                 testnum = Basic.setAttribute(testnum);
 209                 testnum = Basic.pkey(testnum);
 210                 testnum = Basic.sign(testnum);
 211                 testnum = Basic.copy(testnum);
 212             } else if ("solaris".equals(token)) {
 213                 testnum = Basic.setAttribute(testnum);
 214                 testnum = Basic.pkey(testnum);
 215                 testnum = Basic.sign(testnum);
 216                 testnum = Basic.skey(testnum);
 217                 testnum = Basic.copy(testnum);
 218             } else if ("sca1000".equals(token)) {
 219                 // setAttribute, pkey, sign, skey, copy
 220                 testnum = Basic.setAttribute(testnum);
 221                 testnum = Basic.pkey(testnum);
 222                 testnum = Basic.sign(testnum);
 223                 testnum = Basic.skey(testnum);
 224                 testnum = Basic.copy(testnum);
 225             }
 226 
 227         } else if ("pkey".equals(test)) {
 228             Basic.pkey(1);
 229         } else if ("skey".equals(test)) {
 230             Basic.skey(1);
 231         } else if ("setAttribute".equals(test)) {
 232             Basic.setAttribute(1);
 233         } else if ("copy".equals(test)) {
 234             Basic.copy(1);
 235         } else if ("sign".equals(test)) {
 236             Basic.sign(1);
 237         } else if ("module".equals(test)) {
 238             Basic.module();
 239         } else if ("nss-extended".equals(test)) {
 240 
 241             // this only works if NSS_TEST is set to true in P11KeyStore.java
 242 
 243             int testnum = 1;
 244             testnum = Basic.setAttribute(testnum);
 245             testnum = Basic.pkey(testnum);
 246             testnum = Basic.sign(testnum);
 247             testnum = Basic.extended(testnum);
 248         } else {
 249             System.out.println("unrecognized command");
 250         }
 251     }
 252 
 253     private static int sign(int testnum) throws Exception {
 254         if (ks == null) {
 255             ks = KeyStore.getInstance(KS_TYPE, provider);
 256             ks.load(null, tokenPwd);
 257         }
 258         if (!ks.containsAlias("pk1")) {
 259             ks.setKeyEntry("pk1", pk1, null, chain1);
 260         }
 261         System.out.println("test " + testnum++ + " passed");
 262 
 263         return signAlias(testnum, "pk1");
 264     }
 265 
 266     private static int signAlias(int testnum, String alias) throws Exception {
 267 
 268         if (ks == null) {
 269             ks = KeyStore.getInstance(KS_TYPE, provider);
 270             ks.load(null, tokenPwd);
 271         }
 272 
 273         if (alias == null) {
 274             Enumeration enu = ks.aliases();
 275             if (enu.hasMoreElements()) {
 276                 alias = (String)enu.nextElement();
 277             }
 278         }
 279 
 280         PrivateKey pkey = (PrivateKey)ks.getKey(alias, null);
 281         if ("RSA".equals(pkey.getAlgorithm())) {
 282             System.out.println("got [" + alias + "] signing key: " + pkey);
 283         } else {
 284             throw new SecurityException
 285                 ("expected RSA, got " + pkey.getAlgorithm());
 286         }
 287 
 288         Signature s = Signature.getInstance("MD5WithRSA", ks.getProvider());
 289         s.initSign(pkey);
 290         System.out.println("initialized signature object with key");
 291         s.update("hello".getBytes());
 292         System.out.println("signature object updated with [hello] bytes");
 293 
 294         byte[] signed = s.sign();
 295         System.out.println("received signature " + signed.length +
 296                         " bytes in length");
 297 
 298         Signature v = Signature.getInstance("MD5WithRSA", ks.getProvider());
 299         v.initVerify(ks.getCertificate(alias));
 300         v.update("hello".getBytes());
 301         v.verify(signed);
 302         System.out.println("signature verified");
 303         System.out.println("test " + testnum++ + " passed");
 304 
 305         return testnum;
 306     }
 307 
 308     private static int copy(int testnum) throws Exception {
 309 
 310         if (ks == null) {
 311             ks = KeyStore.getInstance(KS_TYPE, provider);
 312             ks.load(null, tokenPwd);
 313         }
 314 
 315         KeyFactory kf = KeyFactory.getInstance("RSA", provider);
 316         PrivateKey pkSession = (PrivateKey)kf.translateKey(pk3);
 317         System.out.println("pkSession = " + pkSession);
 318         ks.setKeyEntry("pkSession", pkSession, null, chain3);
 319 
 320         KeyStore.PrivateKeyEntry pke =
 321                 (KeyStore.PrivateKeyEntry)ks.getEntry("pkSession", null);
 322         System.out.println("pkSession = " + pke.getPrivateKey());
 323         Certificate[] chain = pke.getCertificateChain();
 324         if (chain.length != chain3.length) {
 325             throw new SecurityException("received chain not correct length");
 326         }
 327         for (int i = 0; i < chain.length; i++) {
 328             if (!chain[i].equals(chain3[i])) {
 329                 throw new SecurityException("received chain not equal");
 330             }
 331         }
 332 
 333         System.out.println("test " + testnum++ + " passed");
 334 
 335         return testnum;
 336     }
 337 
 338     private static void list() throws Exception {
 339         int testnum = 1;
 340 
 341         ks = KeyStore.getInstance(KS_TYPE, provider);
 342 
 343         // check instance
 344         if (ks.getProvider() instanceof java.security.AuthProvider) {
 345             System.out.println("keystore provider instance of AuthProvider");
 346             System.out.println("test " + testnum++ + " passed");
 347         } else {
 348             throw new SecurityException("did not get AuthProvider KeyStore");
 349         }
 350 
 351         // load
 352         ks.load(null, tokenPwd);
 353         System.out.println("test " + testnum++ + " passed");
 354 
 355         // aliases
 356         Enumeration enu = ks.aliases();
 357         int count = 0;
 358         while (enu.hasMoreElements()) {
 359             count++;
 360             System.out.println("alias " +
 361                                 count +
 362                                 " = " +
 363                                 (String)enu.nextElement());
 364         }
 365     }
 366 
 367     private static void module() throws Exception {
 368 
 369         // perform Security.addProvider of P11 provider
 370         Security.addProvider(getSunPKCS11(System.getProperty("CUSTOM_P11_CONFIG")));
 371 
 372         String KS_PROVIDER = "SunPKCS11-" + System.getProperty("TOKEN");
 373 
 374         KeyStoreLoginModule m = new KeyStoreLoginModule();
 375         Subject s = new Subject();
 376         Map options = new HashMap();
 377         options.put("keyStoreURL", "NONE");
 378         options.put("keyStoreType", KS_TYPE);
 379         options.put("keyStoreProvider", KS_PROVIDER);
 380         options.put("debug", "true");
 381         m.initialize(s, new TextCallbackHandler(), new HashMap(), options);
 382         m.login();
 383         m.commit();
 384         System.out.println("authenticated subject = " + s);
 385         m.logout();
 386         System.out.println("authenticated subject = " + s);
 387     }
 388 
 389     /**
 390      * SCA1000 does not handle extended secret key tests
 391      * . Blowfish (CKR_TEMPLATE_INCOMPLETE)
 392      * . AES (CKR_TEMPLATE_INCOMPLETE)
 393      * . RC4 (CKR_ATTRIBUTE_TYPE_INVALID)
 394      * so do this instead
 395      */
 396     private static int skey(int testnum) throws Exception {
 397         if (ks == null) {
 398             ks = KeyStore.getInstance(KS_TYPE, provider);
 399             ks.load(null, tokenPwd);
 400         }
 401 
 402         // delete all old aliases
 403         Enumeration enu = ks.aliases();
 404         int count = 0;
 405         while (enu.hasMoreElements()) {
 406             String next = (String)enu.nextElement();
 407             ks.deleteEntry(next);
 408             System.out.println("deleted entry for: " + next);
 409         }
 410 
 411         // set good ske 1
 412         ks.setKeyEntry("sk1", sk1, null, null);
 413         System.out.println("test " + testnum++ + " passed");
 414 
 415         // set good ske 2
 416         ks.setKeyEntry("sk2", sk2, null, null);
 417         System.out.println("test " + testnum++ + " passed");
 418 
 419         // getEntry good ske 1
 420         KeyStore.SecretKeyEntry ske =
 421                 (KeyStore.SecretKeyEntry)ks.getEntry("sk1", null);
 422         if ("DES".equals(ske.getSecretKey().getAlgorithm())) {
 423             System.out.println("test " + testnum++ + " passed");
 424         } else {
 425             throw new SecurityException
 426                 ("expected DES, got " + ske.getSecretKey().getAlgorithm());
 427         }
 428 
 429         // getEntry good ske 2
 430         ske = (KeyStore.SecretKeyEntry)ks.getEntry("sk2", null);
 431         if ("DESede".equals(ske.getSecretKey().getAlgorithm())) {
 432             System.out.println("test " + testnum++ + " passed");
 433         } else {
 434             throw new SecurityException
 435                 ("expected DESede, got " + ske.getSecretKey().getAlgorithm());
 436         }
 437 
 438         // getKey good ske 1
 439         SecretKey skey = (SecretKey)ks.getKey("sk1", null);
 440         if ("DES".equals(skey.getAlgorithm())) {
 441             System.out.println("test " + testnum++ + " passed");
 442         } else {
 443             throw new SecurityException
 444                 ("expected DES, got " + skey.getAlgorithm());
 445         }
 446 
 447         // getKey good ske 2
 448         skey = (SecretKey)ks.getKey("sk2", null);
 449         if ("DESede".equals(skey.getAlgorithm())) {
 450             System.out.println("test " + testnum++ + " passed");
 451         } else {
 452             throw new SecurityException
 453                 ("expected DESede, got " + skey.getAlgorithm());
 454         }
 455 
 456         // aliases
 457         enu = ks.aliases();
 458         count = 0;
 459         while (enu.hasMoreElements()) {
 460             count++;
 461             System.out.println("alias " +
 462                                 count +
 463                                 " = " +
 464                                 (String)enu.nextElement());
 465         }
 466         if (count == 2) {
 467             System.out.println("test " + testnum++ + " passed");
 468         } else {
 469             throw new SecurityException("expected 2 aliases");
 470         }
 471 
 472         // size
 473         if (ks.size() == 2) {
 474             System.out.println("test " + testnum++ + " passed");
 475         } else {
 476             throw new SecurityException("expected size 2");
 477         }
 478 
 479         // isCertificateEntry sk1
 480         if (!ks.isCertificateEntry("sk1")) {
 481             System.out.println("test " + testnum++ + " passed");
 482         } else {
 483             throw new SecurityException("expected ske");
 484         }
 485 
 486         // isKeyEntry sk1
 487         if (ks.isKeyEntry("sk1")) {
 488             System.out.println("test " + testnum++ + " passed");
 489         } else {
 490             throw new SecurityException("expected ske");
 491         }
 492 
 493         // entryInstanceOf sk2
 494         if (ks.entryInstanceOf("sk2", KeyStore.SecretKeyEntry.class)) {
 495             System.out.println("test " + testnum++ + " passed");
 496         } else {
 497             throw new SecurityException("expected ske");
 498         }
 499 
 500         return testnum;
 501     }
 502 
 503     private static int setAttribute(int testnum) throws Exception {
 504 
 505         if (ks == null) {
 506             ks = KeyStore.getInstance(KS_TYPE, provider);
 507             ks.load(null, tokenPwd);
 508         }
 509 
 510         if (!ks.containsAlias("pk1")) {
 511             // set good pke 1
 512             ks.setKeyEntry("pk1", pk1, null, chain1);
 513             System.out.println("test " + testnum++ + " passed");
 514         }
 515 
 516         // delete all old aliases except pk1
 517         Enumeration enu = ks.aliases();
 518         int count = 0;
 519         while (enu.hasMoreElements()) {
 520             String next = (String)enu.nextElement();
 521             if (!"pk1".equals(next)) {
 522                 ks.deleteEntry(next);
 523                 System.out.println("deleted entry for: " + next);
 524             }
 525         }
 526 
 527         KeyStore.PrivateKeyEntry pke =
 528                 (KeyStore.PrivateKeyEntry)ks.getEntry("pk1", null);
 529         System.out.println("pk1 = " + pke.getPrivateKey());
 530         Certificate[] chain = pke.getCertificateChain();
 531         if (chain.length != chain1.length) {
 532             throw new SecurityException("received chain not correct length");
 533         }
 534         for (int i = 0; i < chain.length; i++) {
 535             if (!chain[i].equals(chain1[i])) {
 536                 throw new SecurityException("received chain not equal");
 537             }
 538         }
 539         System.out.println("test " + testnum++ + " passed");
 540 
 541         /**
 542          * test change alias only
 543          */
 544 
 545         // test C_SetAttribute
 546         PrivateKey pkey = pke.getPrivateKey();
 547         ks.setEntry("pk1SA",
 548                 new KeyStore.PrivateKeyEntry(pkey, chain1),
 549                 null);
 550         System.out.println("test " + testnum++ + " passed");
 551 
 552         // aliases
 553         enu = ks.aliases();
 554         count = 0;
 555         String newAlias = null;
 556         while (enu.hasMoreElements()) {
 557             count++;
 558             newAlias = (String)enu.nextElement();
 559             System.out.println("alias " +
 560                                 count +
 561                                 " = " +
 562                                 newAlias);
 563         }
 564         if (count == 1 && "pk1SA".equals(newAlias)) {
 565             System.out.println("test " + testnum++ + " passed");
 566         } else {
 567             throw new SecurityException("expected 1 alias");
 568         }
 569 
 570         // size
 571         if (ks.size() == 1) {
 572             System.out.println("test " + testnum++ + " passed");
 573         } else {
 574             throw new SecurityException("expected size 1");
 575         }
 576 
 577         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk1", null);
 578         if (pke != null) {
 579             throw new SecurityException("expected not to find pk1");
 580         }
 581         System.out.println("test " + testnum++ + " passed");
 582 
 583         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk1SA", null);
 584         System.out.println("pk1SA = " + pke.getPrivateKey());
 585         chain = pke.getCertificateChain();
 586         if (chain.length != chain1.length) {
 587             throw new SecurityException("received chain not correct length");
 588         }
 589         for (int i = 0; i < chain.length; i++) {
 590             if (!chain[i].equals(chain1[i])) {
 591                 throw new SecurityException("received chain not equal");
 592             }
 593         }
 594         System.out.println("test " + testnum++ + " passed");
 595 
 596         /**
 597          * test change cert chain
 598          */
 599 
 600         pkey = pke.getPrivateKey();
 601         ks.setEntry("pk1SA-2",
 602                 new KeyStore.PrivateKeyEntry(pkey, chain4),
 603                 null);
 604         System.out.println("test " + testnum++ + " passed");
 605 
 606         // aliases
 607         enu = ks.aliases();
 608         count = 0;
 609         newAlias = null;
 610         while (enu.hasMoreElements()) {
 611             count++;
 612             newAlias = (String)enu.nextElement();
 613             System.out.println("alias " +
 614                                 count +
 615                                 " = " +
 616                                 newAlias);
 617         }
 618         if (count == 1 && "pk1SA-2".equals(newAlias)) {
 619             System.out.println("test " + testnum++ + " passed");
 620         } else {
 621             throw new SecurityException("expected 1 alias");
 622         }
 623 
 624         // size
 625         if (ks.size() == 1) {
 626             System.out.println("test " + testnum++ + " passed");
 627         } else {
 628             throw new SecurityException("expected size 1");
 629         }
 630 
 631         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk1SA", null);
 632         if (pke != null) {
 633             throw new SecurityException("expected not to find pk1SA");
 634         }
 635         System.out.println("test " + testnum++ + " passed");
 636 
 637         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk1SA-2", null);
 638         System.out.println("pk1SA-2 = " + pke.getPrivateKey());
 639         chain = pke.getCertificateChain();
 640         if (chain.length != chain4.length) {
 641             throw new SecurityException("received chain not correct length");
 642         }
 643         for (int i = 0; i < chain.length; i++) {
 644             if (!chain[i].equals(chain4[i])) {
 645                 throw new SecurityException("received chain not equal");
 646             }
 647         }
 648         System.out.println("test " + testnum++ + " passed");
 649 
 650         return testnum;
 651     }
 652 
 653     private static int pkey(int testnum) throws Exception {
 654 
 655         if (ks == null) {
 656             ks = KeyStore.getInstance(KS_TYPE, provider);
 657             ks.load(null, tokenPwd);
 658             System.out.println("test " + testnum++ + " passed");
 659         }
 660 
 661         // check instance
 662         if (ks.getProvider() instanceof java.security.AuthProvider) {
 663             System.out.println("keystore provider instance of AuthProvider");
 664             System.out.println("test " + testnum++ + " passed");
 665         } else {
 666             throw new SecurityException("did not get AuthProvider KeyStore");
 667         }
 668 
 669         // delete all old aliases
 670         Enumeration enu = ks.aliases();
 671         int count = 0;
 672         while (enu.hasMoreElements()) {
 673             String next = (String)enu.nextElement();
 674             ks.deleteEntry(next);
 675             System.out.println("deleted entry for: " + next);
 676         }
 677 
 678         // set good pke 1
 679         ks.setKeyEntry("pk1", pk1, null, chain1);
 680         System.out.println("test " + testnum++ + " passed");
 681 
 682         // set good pke 2
 683         ks.setEntry("pk2",
 684                 new KeyStore.PrivateKeyEntry(pk2, chain2),
 685                 null);
 686         System.out.println("test " + testnum++ + " passed");
 687 
 688         // getEntry good pke 1
 689         KeyStore.PrivateKeyEntry pke =
 690                 (KeyStore.PrivateKeyEntry)ks.getEntry("pk1", null);
 691         System.out.println("pk1 = " + pke.getPrivateKey());
 692         Certificate[] chain = pke.getCertificateChain();
 693         if (chain.length != chain1.length) {
 694             throw new SecurityException("received chain not correct length");
 695         }
 696         for (int i = 0; i < chain.length; i++) {
 697             if (!chain[i].equals(chain1[i])) {
 698                 throw new SecurityException("received chain not equal");
 699             }
 700         }
 701 
 702         // getKey good pke 1
 703         PrivateKey pkey = (PrivateKey)ks.getKey("pk1", null);
 704         System.out.println("pk1 = " + pkey);
 705         if ("RSA".equals(pkey.getAlgorithm())) {
 706             System.out.println("test " + testnum++ + " passed");
 707         } else {
 708             throw new SecurityException
 709                 ("expected RSA, got " + pkey.getAlgorithm());
 710         }
 711 
 712         // getCertificate chain chain 1
 713         chain = ks.getCertificateChain("pk1");
 714         if (chain.length != chain1.length) {
 715             throw new SecurityException("received chain not correct length");
 716         }
 717         for (int i = 0; i < chain.length; i++) {
 718             if (!chain[i].equals(chain1[i])) {
 719                 throw new SecurityException("received chain not equal");
 720             }
 721         }
 722         System.out.println("test " + testnum++ + " passed");
 723 
 724         // getEntry good pke 2
 725         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk2", null);
 726         if ("RSA".equals(pke.getPrivateKey().getAlgorithm())) {
 727             System.out.println("test " + testnum++ + " passed");
 728         } else {
 729             throw new SecurityException
 730                 ("expected RSA, got " + pke.getPrivateKey().getAlgorithm());
 731         }
 732         System.out.println("pk2 = " + pke.getPrivateKey());
 733         chain = pke.getCertificateChain();
 734         if (chain.length != chain2.length) {
 735             throw new SecurityException("received chain not correct length");
 736         }
 737         for (int i = 0; i < chain.length; i++) {
 738             if (!chain[i].equals(chain2[i])) {
 739                 throw new SecurityException("received chain not equal");
 740             }
 741         }
 742 
 743         // getKey good pke 2
 744         pkey = (PrivateKey)ks.getKey("pk2", null);
 745         if ("RSA".equals(pkey.getAlgorithm())) {
 746             System.out.println("test " + testnum++ + " passed");
 747         } else {
 748             throw new SecurityException
 749                 ("expected RSA, got " + pkey.getAlgorithm());
 750         }
 751 
 752         // getCertificate chain chain 2
 753         chain = ks.getCertificateChain("pk2");
 754         if (chain.length != chain2.length) {
 755             throw new SecurityException("received chain not correct length");
 756         }
 757         for (int i = 0; i < chain.length; i++) {
 758             if (!chain[i].equals(chain2[i])) {
 759                 throw new SecurityException("received chain not equal");
 760             }
 761         }
 762         System.out.println("test " + testnum++ + " passed");
 763 
 764         // aliases
 765         enu = ks.aliases();
 766         count = 0;
 767         while (enu.hasMoreElements()) {
 768             count++;
 769             System.out.println("alias " +
 770                                 count +
 771                                 " = " +
 772                                 (String)enu.nextElement());
 773         }
 774         if (count == 2) {
 775             System.out.println("test " + testnum++ + " passed");
 776         } else {
 777             throw new SecurityException("expected 2 aliases");
 778         }
 779 
 780         // size
 781         if (ks.size() == 2) {
 782             System.out.println("test " + testnum++ + " passed");
 783         } else {
 784             throw new SecurityException("expected size 2");
 785         }
 786 
 787         // getCertificate
 788         if (ks.getCertificate("pk1").equals(chain1[0])) {
 789             System.out.println("test " + testnum++ + " passed");
 790         } else {
 791             throw new SecurityException("expected certificate pk1 end entity");
 792         }
 793 
 794         // containsAlias
 795         if (ks.containsAlias("pk1") && ks.containsAlias("pk2") &&
 796             !ks.containsAlias("foobar") &&
 797             !ks.containsAlias("pk1.2") && !ks.containsAlias("pk2.2")) {
 798             System.out.println("test " + testnum++ + " passed");
 799         } else {
 800             throw new SecurityException("unexpected aliases encountered");
 801         }
 802 
 803         // isKeyEntry
 804         if (ks.isKeyEntry("pk1") && ks.isKeyEntry("pk2") &&
 805             !ks.isKeyEntry("foobar")) {
 806             System.out.println("test " + testnum++ + " passed");
 807         } else {
 808             throw new SecurityException("isKeyEntry failed");
 809         }
 810 
 811         // isCertificateEntry
 812         if (!ks.isCertificateEntry("foobar") &&
 813             !ks.isCertificateEntry("pk1") && !ks.isCertificateEntry("pk2")) {
 814             System.out.println("test " + testnum++ + " passed");
 815         } else {
 816             throw new SecurityException("isCertificateEntry failed");
 817         }
 818 
 819         // getCertificateAlias
 820         if (ks.getCertificateAlias(chain1[0]).equals("pk1") &&
 821             ks.getCertificateAlias(chain2[0]).equals("pk2") &&
 822             ks.getCertificateAlias(randomCert) == null) {
 823             System.out.println("test " + testnum++ + " passed");
 824         } else {
 825             throw new SecurityException("getCertificateAlias failed");
 826         }
 827 
 828         if (ks.entryInstanceOf("pk1", KeyStore.PrivateKeyEntry.class) &&
 829             ks.entryInstanceOf("pk2", KeyStore.PrivateKeyEntry.class) &&
 830         !ks.entryInstanceOf("pk1", KeyStore.TrustedCertificateEntry.class) &&
 831         !ks.entryInstanceOf("pk2", KeyStore.TrustedCertificateEntry.class) &&
 832         !ks.entryInstanceOf("foobar", KeyStore.TrustedCertificateEntry.class) &&
 833           !ks.entryInstanceOf("foobar", KeyStore.PrivateKeyEntry.class)) {
 834             System.out.println("test " + testnum++ + " passed");
 835         } else {
 836             throw new SecurityException("entryInstanceOf failed");
 837         }
 838 
 839         ks.deleteEntry("pk2");
 840         if (ks.containsAlias("pk1") && !ks.containsAlias("pk2")) {
 841             System.out.println("test " + testnum++ + " passed");
 842         } else {
 843             throw new SecurityException("deleteEntry failed");
 844         }
 845 
 846         // getEntry good pke 1
 847         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk1", null);
 848         System.out.println("pk1 = " + pke.getPrivateKey());
 849         chain = pke.getCertificateChain();
 850         if (chain.length != chain1.length) {
 851             throw new SecurityException("received chain not correct length");
 852         }
 853         for (int i = 0; i < chain.length; i++) {
 854             if (!chain[i].equals(chain1[i])) {
 855                 throw new SecurityException("received chain not equal");
 856             }
 857         }
 858         System.out.println("test " + testnum++ + " passed");
 859 
 860         // aliases
 861         enu = ks.aliases();
 862         count = 0;
 863         while (enu.hasMoreElements()) {
 864             count++;
 865             System.out.println("alias " +
 866                                 count +
 867                                 " = " +
 868                                 (String)enu.nextElement());
 869         }
 870         if (count == 1) {
 871             System.out.println("test " + testnum++ + " passed");
 872         } else {
 873             throw new SecurityException("expected 1 alias");
 874         }
 875 
 876         // size
 877         if (ks.size() == 1) {
 878             System.out.println("test " + testnum++ + " passed");
 879         } else {
 880             throw new SecurityException("expected size 1");
 881         }
 882 
 883         return testnum;
 884     }
 885 
 886     private static int extended(int testnum) throws Exception {
 887 
 888         // setEntry unknown entry type
 889         try {
 890             ks.setEntry("foo", new FooEntry(), null);
 891             throw new SecurityException("setEntry should have failed");
 892         } catch (KeyStoreException kse) {
 893             System.out.println("test " + testnum++ + " passed");
 894         }
 895 
 896         // getEntry random foo
 897         if (ks.getEntry("foo", null) != null) {
 898             throw new SecurityException("expected null entry");
 899         } else {
 900             System.out.println("test " + testnum++ + " passed");
 901         }
 902 
 903         // set good ske 1
 904         ks.setKeyEntry("sk1", sk1, null, null);
 905         System.out.println("test " + testnum++ + " passed");
 906 
 907         // set good ske 2
 908         ks.setKeyEntry("sk2", sk2, null, null);
 909         System.out.println("test " + testnum++ + " passed");
 910 
 911         // set good ske 3
 912         ks.setEntry("sk3",
 913                 new KeyStore.SecretKeyEntry(sk3),
 914                 null);
 915         System.out.println("test " + testnum++ + " passed");
 916 
 917         // set good ske 4
 918         ks.setEntry("sk4",
 919                 new KeyStore.SecretKeyEntry(sk4),
 920                 null);
 921         System.out.println("test " + testnum++ + " passed");
 922 
 923         // getEntry good ske 1
 924         KeyStore.SecretKeyEntry ske =
 925                 (KeyStore.SecretKeyEntry)ks.getEntry("sk1", null);
 926         if ("DES".equals(ske.getSecretKey().getAlgorithm())) {
 927             System.out.println("test " + testnum++ + " passed");
 928         } else {
 929             throw new SecurityException
 930                 ("expected DES, got " + ske.getSecretKey().getAlgorithm());
 931         }
 932 
 933         // getEntry good ske 2
 934         ske = (KeyStore.SecretKeyEntry)ks.getEntry("sk2", null);
 935         if ("DESede".equals(ske.getSecretKey().getAlgorithm())) {
 936             System.out.println("test " + testnum++ + " passed");
 937         } else {
 938             throw new SecurityException
 939                 ("expected DESede, got " + ske.getSecretKey().getAlgorithm());
 940         }
 941 
 942         // getEntry good ske 3
 943         ske = (KeyStore.SecretKeyEntry)ks.getEntry("sk3", null);
 944         if ("AES".equals(ske.getSecretKey().getAlgorithm())) {
 945             System.out.println("test " + testnum++ + " passed");
 946         } else {
 947             throw new SecurityException
 948                 ("expected AES, got " + ske.getSecretKey().getAlgorithm());
 949         }
 950 
 951         // getEntry good ske 4
 952         ske = (KeyStore.SecretKeyEntry)ks.getEntry("sk4", null);
 953         if ("ARCFOUR".equals(ske.getSecretKey().getAlgorithm())) {
 954             System.out.println("test " + testnum++ + " passed");
 955         } else {
 956             throw new SecurityException
 957                 ("expected ARCFOUR, got " + ske.getSecretKey().getAlgorithm());
 958         }
 959 
 960         // getKey good ske 1
 961         SecretKey skey = (SecretKey)ks.getKey("sk1", null);
 962         if ("DES".equals(skey.getAlgorithm())) {
 963             System.out.println("test " + testnum++ + " passed");
 964         } else {
 965             throw new SecurityException
 966                 ("expected DES, got " + skey.getAlgorithm());
 967         }
 968 
 969         // getKey good ske 2
 970         skey = (SecretKey)ks.getKey("sk2", null);
 971         if ("DESede".equals(skey.getAlgorithm())) {
 972             System.out.println("test " + testnum++ + " passed");
 973         } else {
 974             throw new SecurityException
 975                 ("expected DESede, got " + skey.getAlgorithm());
 976         }
 977 
 978         // getKey good ske 3
 979         skey = (SecretKey)ks.getKey("sk3", null);
 980         if ("AES".equals(skey.getAlgorithm())) {
 981             System.out.println("test " + testnum++ + " passed");
 982         } else {
 983             throw new SecurityException
 984                 ("expected AES, got " + skey.getAlgorithm());
 985         }
 986 
 987         // getKey good ske 4
 988         skey = (SecretKey)ks.getKey("sk4", null);
 989         if ("ARCFOUR".equals(skey.getAlgorithm())) {
 990             System.out.println("test " + testnum++ + " passed");
 991         } else {
 992             throw new SecurityException
 993                 ("expected ARCFOUR, got " + skey.getAlgorithm());
 994         }
 995 
 996         // aliases
 997         Enumeration enu = ks.aliases();
 998         int count = 0;
 999         while (enu.hasMoreElements()) {
1000             count++;
1001             System.out.println("alias " +
1002                                 count +
1003                                 " = " +
1004                                 (String)enu.nextElement());
1005         }
1006         if (count == 5) {
1007             System.out.println("test " + testnum++ + " passed");
1008         } else {
1009             throw new SecurityException("expected 5 aliases");
1010         }
1011 
1012         // size
1013         if (ks.size() == 5) {
1014             System.out.println("test " + testnum++ + " passed");
1015         } else {
1016             throw new SecurityException("expected size 5");
1017         }
1018 
1019         // set good pke 2
1020         ks.setEntry("pk2",
1021                 new KeyStore.PrivateKeyEntry(pk2, chain2),
1022                 null);
1023         System.out.println("test " + testnum++ + " passed");
1024 
1025         // set good pke 3
1026         ks.setEntry("pk3",
1027                 new KeyStore.PrivateKeyEntry(pk3, chain3),
1028                 null);
1029         System.out.println("test " + testnum++ + " passed");
1030 
1031         // getEntry good pke 1
1032         KeyStore.PrivateKeyEntry pke =
1033                 (KeyStore.PrivateKeyEntry)ks.getEntry("pk1", null);
1034         System.out.println("pk1 = " + pke.getPrivateKey());
1035         Certificate[] chain = pke.getCertificateChain();
1036         if (chain.length != chain1.length) {
1037             throw new SecurityException("received chain not correct length");
1038         }
1039         for (int i = 0; i < chain.length; i++) {
1040             if (!chain[i].equals(chain1[i])) {
1041                 throw new SecurityException("received chain not equal");
1042             }
1043         }
1044 
1045         // getEntry good pke 2
1046         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk2", null);
1047         System.out.println("pk2 = " + pke.getPrivateKey());
1048         chain = pke.getCertificateChain();
1049         if (chain.length != chain2.length) {
1050             throw new SecurityException("received chain not correct length");
1051         }
1052         for (int i = 0; i < chain.length; i++) {
1053             if (!chain[i].equals(chain2[i])) {
1054                 throw new SecurityException("received chain not equal");
1055             }
1056         }
1057 
1058         // getEntry good pke 3
1059         pke = (KeyStore.PrivateKeyEntry)ks.getEntry("pk3", null);
1060         System.out.println("pk3 = " + pke.getPrivateKey());
1061         chain = pke.getCertificateChain();
1062         if (chain.length != chain3.length) {
1063             throw new SecurityException("received chain not correct length");
1064         }
1065         for (int i = 0; i < chain.length; i++) {
1066             if (!chain[i].equals(chain3[i])) {
1067                 throw new SecurityException("received chain not equal");
1068             }
1069         }
1070 
1071         // getKey good pke 1
1072         PrivateKey pkey = (PrivateKey)ks.getKey("pk1", null);
1073         if ("RSA".equals(pkey.getAlgorithm())) {
1074             System.out.println("test " + testnum++ + " passed");
1075         } else {
1076             throw new SecurityException
1077                 ("expected RSA, got " + pkey.getAlgorithm());
1078         }
1079 
1080         // getCertificate chain chain 1
1081         chain = ks.getCertificateChain("pk1");
1082         if (chain.length != chain1.length) {
1083             throw new SecurityException("received chain not correct length");
1084         }
1085         for (int i = 0; i < chain.length; i++) {
1086             if (!chain[i].equals(chain1[i])) {
1087                 throw new SecurityException("received chain not equal");
1088             }
1089         }
1090 
1091         // getKey good pke 2
1092         pkey = (PrivateKey)ks.getKey("pk2", null);
1093         if ("RSA".equals(pkey.getAlgorithm())) {
1094             System.out.println("test " + testnum++ + " passed");
1095         } else {
1096             throw new SecurityException
1097                 ("expected RSA, got " + pkey.getAlgorithm());
1098         }
1099 
1100         // getCertificate chain chain 2
1101         chain = ks.getCertificateChain("pk2");
1102         if (chain.length != chain2.length) {
1103             throw new SecurityException("received chain not correct length");
1104         }
1105         for (int i = 0; i < chain.length; i++) {
1106             if (!chain[i].equals(chain2[i])) {
1107                 throw new SecurityException("received chain not equal");
1108             }
1109         }
1110 
1111         // getKey good pke 3
1112         pkey = (PrivateKey)ks.getKey("pk3", null);
1113         if ("RSA".equals(pkey.getAlgorithm())) {
1114             System.out.println("test " + testnum++ + " passed");
1115         } else {
1116             throw new SecurityException
1117                 ("expected RSA, got " + pkey.getAlgorithm());
1118         }
1119 
1120         // getCertificate chain chain 3
1121         chain = ks.getCertificateChain("pk3");
1122         if (chain.length != chain3.length) {
1123             throw new SecurityException("received chain not correct length");
1124         }
1125         for (int i = 0; i < chain.length; i++) {
1126             if (!chain[i].equals(chain3[i])) {
1127                 throw new SecurityException("received chain not equal");
1128             }
1129         }
1130 
1131         // aliases
1132         enu = ks.aliases();
1133         count = 0;
1134         while (enu.hasMoreElements()) {
1135             count++;
1136             System.out.println("alias " +
1137                                 count +
1138                                 " = " +
1139                                 (String)enu.nextElement());
1140         }
1141         if (count == 7) {
1142             System.out.println("test " + testnum++ + " passed");
1143         } else {
1144             throw new SecurityException("expected 7 aliases");
1145         }
1146 
1147         // size
1148         if (ks.size() == 7) {
1149             System.out.println("test " + testnum++ + " passed");
1150         } else {
1151             throw new SecurityException("expected size 7");
1152         }
1153 
1154         // getCertificate good chain 1
1155         if (ks.getCertificate("pk1").equals(chain1[0])) {
1156             System.out.println("test " + testnum++ + " passed");
1157         } else {
1158             throw new SecurityException("retrieved cert not equal");
1159         }
1160 
1161         // getCertificate good chain 3
1162         if (ks.getCertificate("pk3").equals(chain3[0])) {
1163             System.out.println("test " + testnum++ + " passed");
1164         } else {
1165             throw new SecurityException("retrieved cert not equal");
1166         }
1167 
1168         // getKey good ske 1
1169         skey = (SecretKey)ks.getKey("sk1", null);
1170         if ("DES".equals(skey.getAlgorithm())) {
1171             System.out.println("test " + testnum++ + " passed");
1172         } else {
1173             throw new SecurityException
1174                 ("expected DES, got " + skey.getAlgorithm());
1175         }
1176 
1177         // getKey good ske 4
1178         skey = (SecretKey)ks.getKey("sk4", null);
1179         if ("ARCFOUR".equals(skey.getAlgorithm())) {
1180             System.out.println("test " + testnum++ + " passed");
1181         } else {
1182             throw new SecurityException
1183                 ("expected ARCFOUR, got " + skey.getAlgorithm());
1184         }
1185 
1186         // getKey good pke 1
1187         pkey = (PrivateKey)ks.getKey("pk1", null);
1188         if ("RSA".equals(pkey.getAlgorithm())) {
1189             System.out.println("test " + testnum++ + " passed");
1190         } else {
1191             throw new SecurityException
1192                 ("expected RSA, got " + pkey.getAlgorithm());
1193         }
1194 
1195         // getKey good pke 3
1196         pkey = (PrivateKey)ks.getKey("pk3", null);
1197         if ("RSA".equals(pkey.getAlgorithm())) {
1198             System.out.println("test " + testnum++ + " passed");
1199         } else {
1200             throw new SecurityException
1201                 ("expected RSA, got " + pkey.getAlgorithm());
1202         }
1203 
1204         // contains alias
1205         if (!ks.containsAlias("pk1") ||
1206                 !ks.containsAlias("pk2") ||
1207                 !ks.containsAlias("pk3") ||
1208                 !ks.containsAlias("sk1") ||
1209                 !ks.containsAlias("sk2") ||
1210                 !ks.containsAlias("sk3") ||
1211                 !ks.containsAlias("sk4")) {
1212             throw new SecurityException("did not contain all aliases");
1213         }
1214         System.out.println("test " + testnum++ + " passed");
1215 
1216         // getCertificateAlias pk1
1217         if (ks.getCertificateAlias(chain1[0]).equals("pk1")) {
1218             System.out.println("test " + testnum++ + " passed");
1219         } else {
1220             throw new SecurityException("expected cert pk1");
1221         }
1222 
1223         // getCertificateAlias pk3
1224         if (ks.getCertificateAlias(chain3[0]).equals("pk3")) {
1225             System.out.println("test " + testnum++ + " passed");
1226         } else {
1227             throw new SecurityException("expected cert pk3");
1228         }
1229 
1230         // isCertificateEntry pk1
1231         if (!ks.isCertificateEntry("pk1")) {
1232             System.out.println("test " + testnum++ + " passed");
1233         } else {
1234             throw new SecurityException("expected pke");
1235         }
1236 
1237         // isCertificateEntry pk3
1238         if (!ks.isCertificateEntry("pk3")) {
1239             System.out.println("test " + testnum++ + " passed");
1240         } else {
1241             throw new SecurityException("expected pke");
1242         }
1243 
1244         // isCertificateEntry sk1
1245         if (!ks.isCertificateEntry("sk1")) {
1246             System.out.println("test " + testnum++ + " passed");
1247         } else {
1248             throw new SecurityException("expected ske");
1249         }
1250 
1251         // isCertificateEntry sk4
1252         if (!ks.isCertificateEntry("sk4")) {
1253             System.out.println("test " + testnum++ + " passed");
1254         } else {
1255             throw new SecurityException("expected ske");
1256         }
1257 
1258         // isKeyEntry pk1
1259         if (ks.isKeyEntry("pk1")) {
1260             System.out.println("test " + testnum++ + " passed");
1261         } else {
1262             throw new SecurityException("expected pke");
1263         }
1264 
1265         // isKeyEntry pk3
1266         if (ks.isKeyEntry("pk3")) {
1267             System.out.println("test " + testnum++ + " passed");
1268         } else {
1269             throw new SecurityException("expected pke");
1270         }
1271 
1272         // isKeyEntry sk1
1273         if (ks.isKeyEntry("sk1")) {
1274             System.out.println("test " + testnum++ + " passed");
1275         } else {
1276             throw new SecurityException("expected ske");
1277         }
1278 
1279         // isKeyEntry sk4
1280         if (ks.isKeyEntry("sk4")) {
1281             System.out.println("test " + testnum++ + " passed");
1282         } else {
1283             throw new SecurityException("expected ske");
1284         }
1285 
1286         // isCertificateEntry random foo
1287         if (!ks.isCertificateEntry("foo")) {
1288             System.out.println("test " + testnum++ + " passed");
1289         } else {
1290             throw new SecurityException("expected foo");
1291         }
1292 
1293         // isKeyEntry random foo
1294         if (!ks.isKeyEntry("foo")) {
1295             System.out.println("test " + testnum++ + " passed");
1296         } else {
1297             throw new SecurityException("expected foo");
1298         }
1299 
1300         // entryInstanceOf pk1
1301         if (!ks.entryInstanceOf
1302                 ("pk1", KeyStore.TrustedCertificateEntry.class)) {
1303             System.out.println("test " + testnum++ + " passed");
1304         } else {
1305             throw new SecurityException("expected tce");
1306         }
1307 
1308         // entryInstanceOf pk3
1309         if (!ks.entryInstanceOf
1310                 ("pk3", KeyStore.TrustedCertificateEntry.class)) {
1311             System.out.println("test " + testnum++ + " passed");
1312         } else {
1313             throw new SecurityException("expected tce");
1314         }
1315 
1316         // entryInstanceOf sk1
1317         if (!ks.entryInstanceOf
1318                 ("sk1", KeyStore.TrustedCertificateEntry.class)) {
1319             System.out.println("test " + testnum++ + " passed");
1320         } else {
1321             throw new SecurityException("expected tce");
1322         }
1323 
1324         // entryInstanceOf sk4
1325         if (!ks.entryInstanceOf
1326                 ("sk4", KeyStore.TrustedCertificateEntry.class)) {
1327             System.out.println("test " + testnum++ + " passed");
1328         } else {
1329             throw new SecurityException("expected tce");
1330         }
1331 
1332         // entryInstanceOf pk1
1333         if (ks.entryInstanceOf("pk1", KeyStore.PrivateKeyEntry.class)) {
1334             System.out.println("test " + testnum++ + " passed");
1335         } else {
1336             throw new SecurityException("expected pke");
1337         }
1338 
1339         // entryInstanceOf pk3
1340         if (ks.entryInstanceOf("pk3", KeyStore.PrivateKeyEntry.class)) {
1341             System.out.println("test " + testnum++ + " passed");
1342         } else {
1343             throw new SecurityException("expected pke");
1344         }
1345 
1346         // entryInstanceOf sk1
1347         if (!ks.entryInstanceOf("sk1", KeyStore.PrivateKeyEntry.class)) {
1348             System.out.println("test " + testnum++ + " passed");
1349         } else {
1350             throw new SecurityException("expected pke");
1351         }
1352 
1353         // entryInstanceOf sk4
1354         if (!ks.entryInstanceOf("sk4", KeyStore.PrivateKeyEntry.class)) {
1355             System.out.println("test " + testnum++ + " passed");
1356         } else {
1357             throw new SecurityException("expected pke");
1358         }
1359 
1360         // entryInstanceOf sk1
1361         if (ks.entryInstanceOf("sk1", KeyStore.SecretKeyEntry.class)) {
1362             System.out.println("test " + testnum++ + " passed");
1363         } else {
1364             throw new SecurityException("expected ske");
1365         }
1366 
1367         // entryInstanceOf sk4
1368         if (ks.entryInstanceOf("sk4", KeyStore.SecretKeyEntry.class)) {
1369             System.out.println("test " + testnum++ + " passed");
1370         } else {
1371             throw new SecurityException("expected ske");
1372         }
1373 
1374         // entryInstanceOf pk1
1375         if (!ks.entryInstanceOf("pk1", KeyStore.SecretKeyEntry.class)) {
1376             System.out.println("test " + testnum++ + " passed");
1377         } else {
1378             throw new SecurityException("expected ske");
1379         }
1380 
1381         // entryInstanceOf pk3
1382         if (!ks.entryInstanceOf("pk3", KeyStore.SecretKeyEntry.class)) {
1383             System.out.println("test " + testnum++ + " passed");
1384         } else {
1385             throw new SecurityException("expected ske");
1386         }
1387 
1388         // getEntry random foobar
1389         if (ks.getEntry("foobar", null) != null) {
1390             throw new SecurityException("expected null entry");
1391         } else {
1392             System.out.println("test " + testnum++ + " passed");
1393         }
1394 
1395         // deleteEntry
1396         ks.deleteEntry("pk1");
1397         ks.deleteEntry("pk3");
1398         ks.deleteEntry("sk2");
1399         ks.deleteEntry("sk3");
1400         System.out.println("test " + testnum++ + " passed");
1401 
1402         // aliases
1403         enu = ks.aliases();
1404         count = 0;
1405         while (enu.hasMoreElements()) {
1406             count++;
1407             System.out.println("alias " +
1408                                 count +
1409                                 " = " +
1410                                 (String)enu.nextElement());
1411         }
1412         if (count == 3) {
1413             System.out.println("test " + testnum++ + " passed");
1414         } else {
1415             throw new SecurityException("expected 3 aliases");
1416         }
1417 
1418         // size
1419         if (ks.size() == 3) {
1420             System.out.println("test " + testnum++ + " passed");
1421         } else {
1422             throw new SecurityException("expected size 6");
1423         }
1424 
1425         // entryInstanceOf sk1
1426         if (!ks.entryInstanceOf("sk1", KeyStore.PrivateKeyEntry.class)) {
1427             System.out.println("test " + testnum++ + " passed");
1428         } else {
1429             throw new SecurityException("expected pke");
1430         }
1431 
1432         // entryInstanceOf sk4
1433         if (!ks.entryInstanceOf("sk4", KeyStore.PrivateKeyEntry.class)) {
1434             System.out.println("test " + testnum++ + " passed");
1435         } else {
1436             throw new SecurityException("expected pke");
1437         }
1438 
1439         // entryInstanceOf pk2
1440         if (ks.entryInstanceOf("pk2", KeyStore.PrivateKeyEntry.class)) {
1441             System.out.println("test " + testnum++ + " passed");
1442         } else {
1443             throw new SecurityException("expected pke");
1444         }
1445         System.out.println("test " + testnum++ + " passed");
1446 
1447         return testnum;
1448     }
1449 }