package java.security; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.util.Date; import java.util.Enumeration; public class KeyStore extends Object { private KeyStoreSpi keyStoreSpi; private Provider provider; private String type; private boolean initialised; protected KeyStore( KeyStoreSpi keyStoreSpi, Provider provider, String type) { this.keyStoreSpi = keyStoreSpi; this.provider = provider; this.type = type; this.initialised = false; } public final Enumeration aliases() throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineAliases(); } public final boolean containsAlias(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineContainsAlias(alias); } public final void deleteEntry(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); keyStoreSpi.engineDeleteEntry(alias); } public final Certificate getCertificate(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineGetCertificate(alias); } public final String getCertificateAlias(Certificate cert) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineGetCertificateAlias(cert); } public final Certificate[] getCertificateChain(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineGetCertificateChain(alias); } public final Date getCreationDate(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineGetCreationDate(alias); } public static final String getDefaultType() { return "JKS"; } public static KeyStore getInstance(String type) throws KeyStoreException { try { SecurityUtil.Implementation imp = SecurityUtil.getImplementation("KeyStore", type, null); if (imp != null) { return new KeyStore((KeyStoreSpi)imp.getEngine(), imp.getProvider(), type); } throw new KeyStoreException("can't find type " + type); } catch (NoSuchProviderException e) { throw new KeyStoreException(type + " not found"); } } public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException { SecurityUtil.Implementation imp = SecurityUtil.getImplementation("KeyStore", type, provider); if (imp != null) { return new KeyStore((KeyStoreSpi)imp.getEngine(), imp.getProvider(), type); } throw new KeyStoreException("can't find type " + type); } public final Key getKey(String alias, char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineGetKey(alias, password); } public final Provider getProvider() { return provider; } public final String getType() { return type; } public final boolean isCertificateEntry(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineIsCertificateEntry(alias); } public final boolean isKeyEntry(String alias) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineIsKeyEntry(alias); } public final void load( InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException { keyStoreSpi.engineLoad(stream, password); initialised = true; } public final void setCertificateEntry(String alias, Certificate cert) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); keyStoreSpi.engineSetCertificateEntry(alias, cert); } public final void setKeyEntry( String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); keyStoreSpi.engineSetKeyEntry(alias, key, password, chain); } public final void setKeyEntry( String alias, byte[] key, Certificate[] chain) throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); keyStoreSpi.engineSetKeyEntry(alias, key, chain); } public final int size() throws KeyStoreException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); return keyStoreSpi.engineSize(); } public final void store( OutputStream stream, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { if ( !initialised ) throw new KeyStoreException("KeyStore not initialised."); keyStoreSpi.engineStore(stream, password); } }