// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.jcajce.provider.keystore.util;

import java.io.BufferedInputStream;
import org.bouncycastle.util.Properties;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.io.OutputStream;
import java.util.Enumeration;
import java.security.KeyStoreException;
import java.util.Date;
import java.security.cert.Certificate;
import java.security.UnrecoverableKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Key;
import java.io.IOException;
import org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi;
import java.io.InputStream;
import org.bouncycastle.jcajce.util.JcaJceHelper;
import java.security.KeyStoreSpi;

public class AdaptingKeyStoreSpi extends KeyStoreSpi
{
    public static final String COMPAT_OVERRIDE = "keystore.type.compat";
    private final JKSKeyStoreSpi jksStore;
    private final KeyStoreSpi primaryStore;
    private KeyStoreSpi keyStoreSpi;
    
    public AdaptingKeyStoreSpi(final JcaJceHelper jcaJceHelper, final KeyStoreSpi keyStoreSpi) {
        this.jksStore = new JKSKeyStoreSpi(jcaJceHelper);
        this.primaryStore = keyStoreSpi;
        this.keyStoreSpi = keyStoreSpi;
    }
    
    @Override
    public boolean engineProbe(final InputStream inputStream) throws IOException {
        return this.keyStoreSpi instanceof PKCS12KeyStoreSpi && ((PKCS12KeyStoreSpi)this.keyStoreSpi).engineProbe(inputStream);
    }
    
    @Override
    public Key engineGetKey(final String s, final char[] array) throws NoSuchAlgorithmException, UnrecoverableKeyException {
        return this.keyStoreSpi.engineGetKey(s, array);
    }
    
    @Override
    public Certificate[] engineGetCertificateChain(final String s) {
        return this.keyStoreSpi.engineGetCertificateChain(s);
    }
    
    @Override
    public Certificate engineGetCertificate(final String s) {
        return this.keyStoreSpi.engineGetCertificate(s);
    }
    
    @Override
    public Date engineGetCreationDate(final String s) {
        return this.keyStoreSpi.engineGetCreationDate(s);
    }
    
    @Override
    public void engineSetKeyEntry(final String s, final Key key, final char[] array, final Certificate[] array2) throws KeyStoreException {
        this.keyStoreSpi.engineSetKeyEntry(s, key, array, array2);
    }
    
    @Override
    public void engineSetKeyEntry(final String s, final byte[] array, final Certificate[] array2) throws KeyStoreException {
        this.keyStoreSpi.engineSetKeyEntry(s, array, array2);
    }
    
    @Override
    public void engineSetCertificateEntry(final String s, final Certificate certificate) throws KeyStoreException {
        this.keyStoreSpi.engineSetCertificateEntry(s, certificate);
    }
    
    @Override
    public void engineDeleteEntry(final String s) throws KeyStoreException {
        this.keyStoreSpi.engineDeleteEntry(s);
    }
    
    @Override
    public Enumeration<String> engineAliases() {
        return this.keyStoreSpi.engineAliases();
    }
    
    @Override
    public boolean engineContainsAlias(final String s) {
        return this.keyStoreSpi.engineContainsAlias(s);
    }
    
    @Override
    public int engineSize() {
        return this.keyStoreSpi.engineSize();
    }
    
    @Override
    public boolean engineIsKeyEntry(final String s) {
        return this.keyStoreSpi.engineIsKeyEntry(s);
    }
    
    @Override
    public boolean engineIsCertificateEntry(final String s) {
        return this.keyStoreSpi.engineIsCertificateEntry(s);
    }
    
    @Override
    public String engineGetCertificateAlias(final Certificate certificate) {
        return this.keyStoreSpi.engineGetCertificateAlias(certificate);
    }
    
    @Override
    public void engineStore(final OutputStream outputStream, final char[] array) throws IOException, NoSuchAlgorithmException, CertificateException {
        this.keyStoreSpi.engineStore(outputStream, array);
    }
    
    @Override
    public void engineStore(final KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException {
        this.keyStoreSpi.engineStore(param);
    }
    
    @Override
    public void engineLoad(InputStream in, final char[] array) throws IOException, NoSuchAlgorithmException, CertificateException {
        if (in == null) {
            (this.keyStoreSpi = this.primaryStore).engineLoad(null, array);
        }
        else {
            if (Properties.isOverrideSet("keystore.type.compat") || !(this.primaryStore instanceof PKCS12KeyStoreSpi)) {
                if (!in.markSupported()) {
                    in = new BufferedInputStream(in);
                }
                in.mark(8);
                if (this.jksStore.engineProbe(in)) {
                    this.keyStoreSpi = this.jksStore;
                }
                else {
                    this.keyStoreSpi = this.primaryStore;
                }
                in.reset();
            }
            else {
                this.keyStoreSpi = this.primaryStore;
            }
            this.keyStoreSpi.engineLoad(in, array);
        }
    }
    
    @Override
    public void engineLoad(final KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException {
        this.keyStoreSpi.engineLoad(param);
    }
}
