1 package org.apache.harmony.security.tests.java.security; 2 3 import junit.framework.TestCase; 4 5 import org.apache.harmony.security.tests.support.MyProvider; 6 import org.apache.harmony.security.tests.support.TestKeyStoreSpi; 7 import org.apache.harmony.security.tests.support.cert.MyCertificate; 8 9 import java.io.ByteArrayInputStream; 10 import java.io.ByteArrayOutputStream; 11 import java.io.IOException; 12 import java.io.InputStream; 13 import java.io.OutputStream; 14 import java.security.Key; 15 import java.security.KeyStore; 16 import java.security.KeyStoreException; 17 import java.security.NoSuchAlgorithmException; 18 import java.security.NoSuchProviderException; 19 import java.security.Provider; 20 import java.security.Security; 21 import java.security.UnrecoverableEntryException; 22 import java.security.UnrecoverableKeyException; 23 import java.security.KeyStore.Entry; 24 import java.security.KeyStore.ProtectionParameter; 25 import java.security.cert.Certificate; 26 import java.security.cert.CertificateException; 27 28 public class KeyStore4Test extends TestCase { 29 30 Provider provider = new MyProvider(); 31 KeyStore keyStore; 32 KeyStore uninitialized; 33 KeyStore failing; 34 35 public static final String KEY_STORE_TYPE = "TestKeyStore"; 36 setUp()37 protected void setUp() throws Exception{ 38 super.setUp(); 39 40 Security.addProvider(new MyProvider()); 41 42 try { 43 keyStore = KeyStore.getInstance(KEY_STORE_TYPE); 44 keyStore.load(null, "PASSWORD".toCharArray()); 45 } catch (KeyStoreException e) { 46 fail("test class not available"); 47 } 48 49 try { 50 uninitialized = KeyStore.getInstance(KEY_STORE_TYPE); 51 } catch (KeyStoreException e) { 52 fail("test keystore not available"); 53 } 54 55 } 56 57 @Override tearDown()58 protected void tearDown() throws Exception { 59 super.tearDown(); 60 61 Security.removeProvider(provider.getName()); 62 } 63 testGetInstanceString()64 public void testGetInstanceString() { 65 try { 66 KeyStore ks = KeyStore.getInstance("TestKeyStore"); 67 assertNotNull("keystore is null", ks); 68 assertEquals("KeyStore is not of expected Type", "TestKeyStore", ks.getType()); 69 } catch (KeyStoreException e) { 70 fail("unexpected exception: " + e); 71 } 72 73 try { 74 KeyStore.getInstance("UnknownKeyStore"); 75 fail("expected KeyStoreException"); 76 } catch (KeyStoreException e) { 77 // ok 78 } 79 80 try { 81 KeyStore.getInstance(null); 82 fail("expected NullPointerException"); 83 } catch (NullPointerException e) { 84 // ok 85 } catch (KeyStoreException e) { 86 fail("unexpected exception: " + e); 87 } 88 } 89 testGetInstanceStringString()90 public void testGetInstanceStringString() { 91 try { 92 KeyStore ks = KeyStore.getInstance("TestKeyStore", provider.getName()); 93 assertNotNull("keystore is null", ks); 94 assertEquals("KeyStore is not of expected type", "TestKeyStore", ks.getType()); 95 } catch (KeyStoreException e) { 96 fail("unexpected exception: " + e); 97 } catch (NoSuchProviderException e) { 98 fail("unexpected exception: " + e); 99 } 100 101 try { 102 KeyStore.getInstance("UnknownKeyStore", provider.getName()); 103 fail("expected KeyStoreException"); 104 } catch (KeyStoreException e) { 105 // ok 106 } catch (NoSuchProviderException e) { 107 fail("unexpected exception: " + e); 108 } 109 110 try { 111 KeyStore.getInstance("TestKeyStore", (String)null); 112 fail("expected IllegalArgumentException"); 113 } catch (KeyStoreException e) { 114 fail("unexpected exception: " + e); 115 } catch (NoSuchProviderException e) { 116 fail("unexpected exception: " + e); 117 } catch (IllegalArgumentException e) { 118 // ok 119 } 120 121 try { 122 KeyStore.getInstance("TestKeyStore", ""); 123 fail("expected IllegalArgumentException"); 124 } catch (KeyStoreException e) { 125 fail("unexpected exception: " + e); 126 } catch (NoSuchProviderException e) { 127 fail("unexpected exception: " + e); 128 } catch (IllegalArgumentException e) { 129 // ok 130 } 131 132 try { 133 KeyStore.getInstance(null, provider.getName()); 134 fail("expected KeyStoreException"); 135 } catch (KeyStoreException e) { 136 // ok 137 } catch (NoSuchProviderException e) { 138 fail("unexpected exception: " + e); 139 } catch (NullPointerException e) { 140 // also ok 141 } 142 143 try { 144 KeyStore.getInstance("TestKeyStore", "UnknownProvider"); 145 fail("expected NoSuchProviderException"); 146 } catch (NoSuchProviderException e) { 147 // ok 148 } catch (KeyStoreException e) { 149 fail("unexpected exception: " + e); 150 } 151 } 152 testGetInstanceStringProvider()153 public void testGetInstanceStringProvider() { 154 try { 155 KeyStore ks = KeyStore.getInstance("TestKeyStore", provider); 156 assertNotNull("KeyStore is null", ks); 157 assertEquals("KeyStore is not of expected type", "TestKeyStore", ks.getType()); 158 } catch (KeyStoreException e) { 159 fail("unexpected exception: " + e); 160 } 161 162 try { 163 KeyStore.getInstance("UnknownKeyStore", provider); 164 fail("expected KeyStoreException"); 165 } catch (KeyStoreException e) { 166 // ok; 167 } 168 169 try { 170 KeyStore.getInstance("TestKeyStore", (Provider)null); 171 fail("expected IllegalArgumentException"); 172 } catch (KeyStoreException e) { 173 fail("unexpected exception: " + e); 174 } catch (IllegalArgumentException e) { 175 // ok 176 } 177 178 try { 179 KeyStore.getInstance(null, provider); 180 fail("expected NullPointerException"); 181 } catch (KeyStoreException e) { 182 fail("unexpected exception: " + e); 183 } catch (NullPointerException e) { 184 // ok 185 } 186 } 187 188 testGetKey()189 public void testGetKey() { 190 try { 191 Key key = keyStore.getKey("keyalias", null); 192 assertNotNull(key); 193 } catch (KeyStoreException e) { 194 fail("unexpected exception: " + e); 195 } catch (NoSuchAlgorithmException e) { 196 fail("unexpected exception: " + e); 197 } catch (UnrecoverableKeyException e) { 198 fail("unexpected exception: " + e); 199 } 200 201 try { 202 keyStore.getKey("certalias", null); 203 fail("expected NoSuchAlgorithmException"); 204 } catch (KeyStoreException e) { 205 fail("unexpected exception: " + e); 206 } catch (NoSuchAlgorithmException e) { 207 // ok 208 } catch (UnrecoverableKeyException e) { 209 fail("unexpected exception: " + e); 210 } 211 212 try { 213 uninitialized.getKey("keyalias", null); 214 fail("expected KeyStoreException"); 215 } catch (KeyStoreException e) { 216 // ok 217 } catch (NoSuchAlgorithmException e) { 218 fail("unexpected exception: " + e); 219 } catch (UnrecoverableKeyException e) { 220 fail("unexpected exception: " + e); 221 } 222 223 try { 224 keyStore.getKey("unknownalias", null); 225 fail("expected NoSuchAlgorithmException"); 226 } catch (KeyStoreException e) { 227 fail("unexpected exception: " + e); 228 } catch (NoSuchAlgorithmException e) { 229 // ok 230 } catch (UnrecoverableKeyException e) { 231 fail("unexpected exception: " + e); 232 } 233 234 try { 235 keyStore.getKey("unknownalias", "PASSWORD".toCharArray()); 236 fail("expected UnrecoverableKeyException"); 237 } catch (UnrecoverableKeyException e) { 238 // ok 239 } catch (KeyStoreException e) { 240 fail("unexpected exception: " + e); 241 } catch (NoSuchAlgorithmException e) { 242 fail("unexpected exception: " + e); 243 } 244 245 } 246 247 testGetCertificateAlias()248 public void testGetCertificateAlias() { 249 try { 250 String alias = keyStore.getCertificateAlias(TestKeyStoreSpi.CERT); 251 assertNotNull("alias is null", alias); 252 assertEquals("alias is not expected", "certalias", alias); 253 } catch (KeyStoreException e) { 254 fail("unexpected exception: " + e); 255 } 256 257 try { 258 uninitialized.getCertificateAlias(TestKeyStoreSpi.CERT); 259 fail("expected KeyStoreException"); 260 } catch (KeyStoreException e) { 261 // ok 262 } 263 264 try { 265 keyStore.getCertificateAlias(null); 266 fail("expected NullPointerException"); 267 } catch (KeyStoreException e) { 268 fail("unexpected exception: " + e); 269 } catch (NullPointerException e) { 270 // ok 271 } 272 273 try { 274 String certificateAlias = keyStore.getCertificateAlias(new MyCertificate("dummy", null)); 275 assertNull("alias was not null", certificateAlias); 276 } catch (KeyStoreException e) { 277 fail("unexpected exception: " + e); 278 } 279 } 280 testStoreOutputStreamCharArray()281 public void testStoreOutputStreamCharArray() { 282 OutputStream os = new ByteArrayOutputStream(); 283 char[] password = "PASSWORD".toCharArray(); 284 285 try { 286 keyStore.store(os, password); 287 } catch (KeyStoreException e) { 288 fail("unexpected exception: " + e); 289 } catch (NoSuchAlgorithmException e) { 290 fail("unexpected exception: " + e); 291 } catch (CertificateException e) { 292 fail("unexpected exception: " + e); 293 } catch (IOException e) { 294 fail("unexpected exception: " + e); 295 } 296 297 try { 298 keyStore.store(os, null); 299 fail("expected NoSuchAlgorithmException"); 300 } catch (KeyStoreException e) { 301 fail("unexpected exception: " + e); 302 } catch (NoSuchAlgorithmException e) { 303 // ok 304 } catch (CertificateException e) { 305 fail("unexpected exception: " + e); 306 } catch (IOException e) { 307 // ok 308 } 309 310 try { 311 keyStore.store(os, "".toCharArray()); 312 fail("expected CertificateException"); 313 } catch (KeyStoreException e) { 314 fail("unexpected exception: " + e); 315 } catch (NoSuchAlgorithmException e) { 316 fail("unexpected exception: " + e); 317 } catch (CertificateException e) { 318 // ok 319 } catch (IOException e) { 320 fail("unexpected exception: " + e); 321 } 322 323 try { 324 keyStore.store(null, null); 325 fail("expected IOException"); 326 } catch (KeyStoreException e) { 327 fail("unexpected exception: " + e); 328 } catch (NoSuchAlgorithmException e) { 329 fail("unexpected exception: " + e); 330 } catch (CertificateException e) { 331 fail("unexpected exception: " + e); 332 } catch (IOException e) { 333 // ok 334 } 335 336 try { 337 uninitialized.store(null, null); 338 fail("expected KeyStoreException"); 339 } catch (KeyStoreException e) { 340 // ok 341 } catch (NoSuchAlgorithmException e) { 342 fail("unexpected exception: " + e); 343 } catch (CertificateException e) { 344 fail("unexpected exception: " + e); 345 } catch (IOException e) { 346 fail("unexpected exception: " + e); 347 } 348 349 350 351 352 } 353 testStoreLoadStoreParameter()354 public void testStoreLoadStoreParameter() { 355 try { 356 keyStore.store(new KeyStore.LoadStoreParameter() { 357 358 public ProtectionParameter getProtectionParameter() { 359 return new KeyStore.PasswordProtection("PASSWORD".toCharArray()); 360 }}); 361 } catch (NoSuchAlgorithmException e) { 362 fail("unexpected exception: " + e); 363 } catch (CertificateException e) { 364 fail("unexpected exception: " + e); 365 } catch (IOException e) { 366 fail("unexpected exception: " + e); 367 } catch (KeyStoreException e) { 368 fail("unexpected exception: " + e); 369 } 370 371 try { 372 keyStore.store(null); 373 fail("expected IOException"); 374 } catch (KeyStoreException e) { 375 fail("unexpected exception: " + e); 376 } catch (NoSuchAlgorithmException e) { 377 fail("unexpected exception: " + e); 378 } catch (CertificateException e) { 379 fail("unexpected exception: " + e); 380 } catch (IOException e) { 381 // ok 382 } 383 384 try { 385 keyStore.store(new KeyStore.LoadStoreParameter() { 386 387 public ProtectionParameter getProtectionParameter() { 388 return null; 389 }}); 390 fail("expected UnsupportedOperationException"); 391 } catch (KeyStoreException e) { 392 fail("unexpected exception: " + e); 393 } catch (NoSuchAlgorithmException e) { 394 fail("unexpected exception: " + e); 395 } catch (CertificateException e) { 396 fail("unexpected exception: " + e); 397 } catch (IOException e) { 398 fail("unexpected exception: " + e); 399 } catch (UnsupportedOperationException e) { 400 // ok 401 } 402 403 try { 404 keyStore.store(new KeyStore.LoadStoreParameter() { 405 406 public ProtectionParameter getProtectionParameter() { 407 return new KeyStore.PasswordProtection("".toCharArray()); 408 }}); 409 } catch (KeyStoreException e) { 410 fail("unexpected exception: " + e); 411 } catch (NoSuchAlgorithmException e) { 412 fail("unexpected exception: " + e); 413 } catch (CertificateException e) { 414 // ok 415 } catch (IOException e) { 416 fail("unexpected exception: " + e); 417 } 418 419 try { 420 keyStore.store(new KeyStore.LoadStoreParameter() { 421 422 public ProtectionParameter getProtectionParameter() { 423 return new KeyStore.PasswordProtection(null); 424 }} ); 425 } catch (KeyStoreException e) { 426 fail("unexpected exception: " + e); 427 } catch (NoSuchAlgorithmException e) { 428 // ok 429 } catch (CertificateException e) { 430 fail("unexpected exception: " + e); 431 } catch (IOException e) { 432 fail("unexpected exception: " + e); 433 } 434 435 try { 436 uninitialized.store(null); 437 fail("expected KeyStoreException"); 438 } catch (KeyStoreException e) { 439 // ok 440 } catch (NoSuchAlgorithmException e) { 441 fail("unexpected exception: " + e); 442 } catch (CertificateException e) { 443 fail("unexpected exception: " + e); 444 } catch (IOException e) { 445 fail("unexpected exception: " + e); 446 } 447 } 448 testLoadInputStreamCharArray()449 public void testLoadInputStreamCharArray() { 450 InputStream is = new ByteArrayInputStream("DATA".getBytes()); 451 char[] password = "PASSWORD".toCharArray(); 452 try { 453 keyStore.load(is, password); 454 assertTrue(keyStore.containsAlias("keyalias")); 455 } catch (NoSuchAlgorithmException e) { 456 fail("unexpected exception: " + e); 457 } catch (CertificateException e) { 458 fail("unexpected exception: " + e); 459 } catch (IOException e) { 460 fail("unexpected exception: " + e); 461 } catch (KeyStoreException e) { 462 fail("unexpected exception: " + e); 463 } 464 465 try { 466 keyStore.load(new ByteArrayInputStream("".getBytes()), password); 467 fail("expected IOException"); 468 } catch (NoSuchAlgorithmException e) { 469 fail("unexpected exception: " + e); 470 } catch (CertificateException e) { 471 fail("unexpected exception: " + e); 472 } catch (IOException e) { 473 // ok 474 } 475 476 try { 477 keyStore.load(is, null); 478 fail("expected NoSuchAlgorithmException"); 479 } catch (NoSuchAlgorithmException e) { 480 // ok 481 } catch (CertificateException e) { 482 fail("unexpected exception: " + e); 483 } catch (IOException e) { 484 fail("unexpected exception: " + e); 485 } 486 487 try { 488 keyStore.load(is, new char[] {}); 489 fail("expected CertificateException"); 490 } catch (NoSuchAlgorithmException e) { 491 fail("unexpected exception: " + e); 492 } catch (CertificateException e) { 493 // ok 494 } catch (IOException e) { 495 fail("unexpected exception: " + e); 496 } 497 } 498 testLoadLoadStoreParameter()499 public void testLoadLoadStoreParameter() { 500 try { 501 keyStore.load(null); 502 fail("expected NoSuchAlgorithmException"); 503 } catch (NoSuchAlgorithmException e) { 504 // ok 505 } catch (CertificateException e) { 506 fail("unexpected exception: " + e); 507 } catch (IOException e) { 508 fail("unexpected exception: " + e); 509 } 510 511 try { 512 keyStore.load(new KeyStore.LoadStoreParameter() { 513 514 public ProtectionParameter getProtectionParameter() { 515 return new KeyStore.PasswordProtection("PASSWORD".toCharArray()); 516 } 517 518 }); 519 } catch (NoSuchAlgorithmException e) { 520 fail("unexpected exception: " + e); 521 } catch (CertificateException e) { 522 fail("unexpected exception: " + e); 523 } catch (IOException e) { 524 fail("unexpected exception: " + e); 525 } 526 527 try { 528 keyStore.load(new KeyStore.LoadStoreParameter() { 529 530 public ProtectionParameter getProtectionParameter() { 531 return null; 532 } 533 534 }); 535 fail("expected NoSuchAlgorithmException"); 536 } catch (NoSuchAlgorithmException e) { 537 // ok 538 } catch (CertificateException e) { 539 fail("unexpected exception: " + e); 540 } catch (IOException e) { 541 fail("unexpected exception: " + e); 542 } 543 544 try { 545 keyStore.load(new KeyStore.LoadStoreParameter() { 546 547 public ProtectionParameter getProtectionParameter() { 548 return new KeyStore.ProtectionParameter() {}; 549 } 550 551 }); 552 fail("expected CertificateException"); 553 } catch (NoSuchAlgorithmException e) { 554 fail("unexpected exception: " + e); 555 } catch (CertificateException e) { 556 // ok 557 } catch (IOException e) { 558 fail("unexpected exception: " + e); 559 } 560 } 561 testGetEntry()562 public void testGetEntry() { 563 try { 564 Entry entry = keyStore.getEntry("certalias", null); 565 assertNotNull("entry is null", entry); 566 assertTrue("entry is not cert entry", entry instanceof KeyStore.TrustedCertificateEntry); 567 } catch (NoSuchAlgorithmException e) { 568 fail("unexpected exception: " + e); 569 } catch (UnrecoverableEntryException e) { 570 fail("unexpected exception: " + e); 571 } catch (KeyStoreException e) { 572 fail("unexpected exception: " + e); 573 } 574 575 try { 576 Entry entry = keyStore.getEntry("certalias", new KeyStore.ProtectionParameter() {}); 577 assertNotNull(entry); 578 } catch (NoSuchAlgorithmException e) { 579 fail("unexpected exception: " + e); 580 } catch (UnrecoverableEntryException e) { 581 fail("unexpected exception: " + e); 582 } catch (KeyStoreException e) { 583 fail("unexpected exception: " + e); 584 } catch (UnsupportedOperationException e) { 585 // ok 586 } 587 588 try { 589 Entry entry = keyStore.getEntry("keyalias", new KeyStore.PasswordProtection(new char[] {} )); 590 assertNotNull(entry); 591 assertTrue(entry instanceof KeyStore.SecretKeyEntry); 592 } catch (NoSuchAlgorithmException e) { 593 fail("unexpected exception: " + e); 594 } catch (UnrecoverableEntryException e) { 595 fail("unexpected exception: " + e); 596 } catch (KeyStoreException e) { 597 fail("unexpected exception: " + e); 598 } 599 600 try { 601 keyStore.getEntry("unknownalias", new KeyStore.PasswordProtection(new char[] {})); 602 fail("expected NoSuchAlgorithmException"); 603 } catch (NoSuchAlgorithmException e) { 604 // ok 605 } catch (UnrecoverableEntryException e) { 606 fail("unexpected exception: " + e); 607 } catch (KeyStoreException e) { 608 fail("unexpected exception: " + e); 609 } catch (UnsupportedOperationException e) { 610 // also ok 611 } 612 613 try { 614 keyStore.getEntry(null, new KeyStore.ProtectionParameter() {}); 615 fail("expected NullPointerException"); 616 } catch (NoSuchAlgorithmException e) { 617 fail("unexpected exception: " + e); 618 } catch (UnrecoverableEntryException e) { 619 fail("unexpected exception: " + e); 620 } catch (KeyStoreException e) { 621 fail("unexpected exception: " + e); 622 } catch (NullPointerException e) { 623 // ok 624 } 625 } 626 627 628 testGetType()629 public void testGetType() { 630 assertEquals(KEY_STORE_TYPE, keyStore.getType()); 631 } 632 testGetProvider()633 public void testGetProvider() { 634 assertNotNull(keyStore.getProvider()); 635 assertEquals("not equal", provider, keyStore.getProvider()); 636 } 637 638 } 639