org.bouncycastle.jce.provider
Class JDKPKCS12KeyStore

java.lang.Object
  extended by java.security.KeyStoreSpi
      extended by org.bouncycastle.jce.provider.JDKPKCS12KeyStore
All Implemented Interfaces:
PKCSObjectIdentifiers, X509ObjectIdentifiers, BCKeyStore
Direct Known Subclasses:
JDKPKCS12KeyStore.BCPKCS12KeyStore, JDKPKCS12KeyStore.DefPKCS12KeyStore

public class JDKPKCS12KeyStore
extends java.security.KeyStoreSpi
implements PKCSObjectIdentifiers, X509ObjectIdentifiers, BCKeyStore


Nested Class Summary
static class JDKPKCS12KeyStore.BCPKCS12KeyStore
           
private  class JDKPKCS12KeyStore.CertId
           
static class JDKPKCS12KeyStore.DefPKCS12KeyStore
           
private static class JDKPKCS12KeyStore.IgnoresCaseHashtable
           
 
Field Summary
private static java.lang.String CERT_ALGORITHM
           
private  java.security.cert.CertificateFactory certFact
           
(package private) static int CERTIFICATE
           
private  JDKPKCS12KeyStore.IgnoresCaseHashtable certs
           
private  java.util.Hashtable chainCerts
           
(package private) static int KEY
           
private static java.lang.String KEY_ALGORITHM
           
(package private) static int KEY_PRIVATE
           
(package private) static int KEY_PUBLIC
           
(package private) static int KEY_SECRET
           
private  java.util.Hashtable keyCerts
           
private  JDKPKCS12KeyStore.IgnoresCaseHashtable keys
           
private  java.util.Hashtable localIds
           
private static int MIN_ITERATIONS
           
(package private) static int NULL
           
protected  java.security.SecureRandom random
           
private static int SALT_SIZE
           
(package private) static int SEALED
           
(package private) static int SECRET
           
 
Fields inherited from interface org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
bagtypes, canNotDecryptAny, certBag, crlBag, data, des_EDE3_CBC, dhKeyAgreement, digestAlgorithm, digestedData, encryptedData, encryptionAlgorithm, envelopedData, id_aa, id_aa_commitmentType, id_aa_contentHint, id_aa_contentIdentifier, id_aa_encrypKeyPref, id_aa_otherSigCert, id_aa_receiptRequest, id_aa_signatureTimeStampToken, id_aa_signerLocation, id_aa_signingCertificate, id_aa_sigPolicyId, id_alg_CMS3DESwrap, id_alg_CMSRC2wrap, id_alg_PWRI_KEK, id_ct, id_ct_compressedData, id_ct_TSTInfo, id_cti, id_cti_ets_proofOfApproval, id_cti_ets_proofOfCreation, id_cti_ets_proofOfDelivery, id_cti_ets_proofOfOrigin, id_cti_ets_proofOfReceipt, id_cti_ets_proofOfSender, id_hmacWithSHA1, id_hmacWithSHA224, id_hmacWithSHA256, id_hmacWithSHA384, id_hmacWithSHA512, id_mgf1, id_PBES2, id_PBKDF2, id_pSpecified, id_RSAES_OAEP, id_RSASSA_PSS, keyBag, md2, md2WithRSAEncryption, md4, md4WithRSAEncryption, md5, md5WithRSAEncryption, pbeWithMD2AndDES_CBC, pbeWithMD2AndRC2_CBC, pbeWithMD5AndDES_CBC, pbeWithMD5AndRC2_CBC, pbeWithSHA1AndDES_CBC, pbeWithSHA1AndRC2_CBC, pbeWithSHAAnd128BitRC2_CBC, pbeWithSHAAnd128BitRC4, pbeWithSHAAnd2_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC, pbewithSHAAnd40BitRC2_CBC, pbeWithSHAAnd40BitRC4, pkcs_1, pkcs_12, pkcs_12PbeIds, pkcs_3, pkcs_5, pkcs_7, pkcs_9, pkcs_9_at_challengePassword, pkcs_9_at_contentType, pkcs_9_at_counterSignature, pkcs_9_at_emailAddress, pkcs_9_at_extendedCertificateAttributes, pkcs_9_at_extensionRequest, pkcs_9_at_friendlyName, pkcs_9_at_localKeyId, pkcs_9_at_messageDigest, pkcs_9_at_signingDescription, pkcs_9_at_signingTime, pkcs_9_at_smimeCapabilities, pkcs_9_at_unstructuredAddress, pkcs_9_at_unstructuredName, pkcs8ShroudedKeyBag, preferSignedData, RC2_CBC, rsaEncryption, safeContentsBag, secretBag, sha1WithRSAEncryption, sha224WithRSAEncryption, sha256WithRSAEncryption, sha384WithRSAEncryption, sha512WithRSAEncryption, signedAndEnvelopedData, signedData, sMIMECapabilitiesVersions, srsaOAEPEncryptionSET, x509certType
 
Fields inherited from interface org.bouncycastle.asn1.x509.X509ObjectIdentifiers
commonName, countryName, crlAccessMethod, id, id_ad, id_ad_caIssuers, id_ad_ocsp, id_ea_rsa, id_pe, id_pkix, id_SHA1, localityName, ocspAccessMethod, organization, organizationalUnitName, ripemd160, ripemd160WithRSAEncryption, stateOrProvinceName
 
Constructor Summary
JDKPKCS12KeyStore(java.lang.String provider)
           
 
Method Summary
private  SubjectKeyIdentifier createSubjectKeyId(java.security.PublicKey pubKey)
           
protected  ASN1Sequence decryptData(AlgorithmIdentifier algId, byte[] data, char[] password, boolean wrongPKCS12Zero)
           
protected  byte[] encryptData(java.lang.String algorithm, byte[] data, PKCS12PBEParams pbeParams, char[] password)
           
 java.util.Enumeration engineAliases()
           
 boolean engineContainsAlias(java.lang.String alias)
           
 void engineDeleteEntry(java.lang.String alias)
          this is quite complete - we should follow up on the chain, a bit tricky if a certificate appears in more than one chain...
 java.security.cert.Certificate engineGetCertificate(java.lang.String alias)
          simply return the cert for the private key
 java.lang.String engineGetCertificateAlias(java.security.cert.Certificate cert)
           
 java.security.cert.Certificate[] engineGetCertificateChain(java.lang.String alias)
           
 java.util.Date engineGetCreationDate(java.lang.String alias)
           
 java.security.Key engineGetKey(java.lang.String alias, char[] password)
           
 boolean engineIsCertificateEntry(java.lang.String alias)
           
 boolean engineIsKeyEntry(java.lang.String alias)
           
 void engineLoad(java.io.InputStream stream, char[] password)
           
 void engineSetCertificateEntry(java.lang.String alias, java.security.cert.Certificate cert)
           
 void engineSetKeyEntry(java.lang.String alias, byte[] key, java.security.cert.Certificate[] chain)
           
 void engineSetKeyEntry(java.lang.String alias, java.security.Key key, char[] password, java.security.cert.Certificate[] chain)
           
 int engineSize()
           
 void engineStore(java.io.OutputStream stream, char[] password)
           
 void setRandom(java.security.SecureRandom rand)
          set the random source for the key store
protected  java.security.PrivateKey unwrapKey(AlgorithmIdentifier algId, byte[] data, char[] password, boolean wrongPKCS12Zero)
           
protected  byte[] wrapKey(java.lang.String algorithm, java.security.Key key, PKCS12PBEParams pbeParams, char[] password)
           
 
Methods inherited from class java.security.KeyStoreSpi
engineEntryInstanceOf, engineGetEntry, engineLoad, engineSetEntry, engineStore
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SALT_SIZE

private static final int SALT_SIZE
See Also:
Constant Field Values

MIN_ITERATIONS

private static final int MIN_ITERATIONS
See Also:
Constant Field Values

KEY_ALGORITHM

private static final java.lang.String KEY_ALGORITHM
See Also:
Constant Field Values

CERT_ALGORITHM

private static final java.lang.String CERT_ALGORITHM
See Also:
Constant Field Values

keys

private JDKPKCS12KeyStore.IgnoresCaseHashtable keys

localIds

private java.util.Hashtable localIds

certs

private JDKPKCS12KeyStore.IgnoresCaseHashtable certs

chainCerts

private java.util.Hashtable chainCerts

keyCerts

private java.util.Hashtable keyCerts

NULL

static final int NULL
See Also:
Constant Field Values

CERTIFICATE

static final int CERTIFICATE
See Also:
Constant Field Values

KEY

static final int KEY
See Also:
Constant Field Values

SECRET

static final int SECRET
See Also:
Constant Field Values

SEALED

static final int SEALED
See Also:
Constant Field Values

KEY_PRIVATE

static final int KEY_PRIVATE
See Also:
Constant Field Values

KEY_PUBLIC

static final int KEY_PUBLIC
See Also:
Constant Field Values

KEY_SECRET

static final int KEY_SECRET
See Also:
Constant Field Values

random

protected java.security.SecureRandom random

certFact

private java.security.cert.CertificateFactory certFact
Constructor Detail

JDKPKCS12KeyStore

public JDKPKCS12KeyStore(java.lang.String provider)
Method Detail

createSubjectKeyId

private SubjectKeyIdentifier createSubjectKeyId(java.security.PublicKey pubKey)

setRandom

public void setRandom(java.security.SecureRandom rand)
Description copied from interface: BCKeyStore
set the random source for the key store

Specified by:
setRandom in interface BCKeyStore

engineAliases

public java.util.Enumeration engineAliases()
Specified by:
engineAliases in class java.security.KeyStoreSpi

engineContainsAlias

public boolean engineContainsAlias(java.lang.String alias)
Specified by:
engineContainsAlias in class java.security.KeyStoreSpi

engineDeleteEntry

public void engineDeleteEntry(java.lang.String alias)
                       throws java.security.KeyStoreException
this is quite complete - we should follow up on the chain, a bit tricky if a certificate appears in more than one chain...

Specified by:
engineDeleteEntry in class java.security.KeyStoreSpi
Throws:
java.security.KeyStoreException

engineGetCertificate

public java.security.cert.Certificate engineGetCertificate(java.lang.String alias)
simply return the cert for the private key

Specified by:
engineGetCertificate in class java.security.KeyStoreSpi

engineGetCertificateAlias

public java.lang.String engineGetCertificateAlias(java.security.cert.Certificate cert)
Specified by:
engineGetCertificateAlias in class java.security.KeyStoreSpi

engineGetCertificateChain

public java.security.cert.Certificate[] engineGetCertificateChain(java.lang.String alias)
Specified by:
engineGetCertificateChain in class java.security.KeyStoreSpi

engineGetCreationDate

public java.util.Date engineGetCreationDate(java.lang.String alias)
Specified by:
engineGetCreationDate in class java.security.KeyStoreSpi

engineGetKey

public java.security.Key engineGetKey(java.lang.String alias,
                                      char[] password)
                               throws java.security.NoSuchAlgorithmException,
                                      java.security.UnrecoverableKeyException
Specified by:
engineGetKey in class java.security.KeyStoreSpi
Throws:
java.security.NoSuchAlgorithmException
java.security.UnrecoverableKeyException

engineIsCertificateEntry

public boolean engineIsCertificateEntry(java.lang.String alias)
Specified by:
engineIsCertificateEntry in class java.security.KeyStoreSpi

engineIsKeyEntry

public boolean engineIsKeyEntry(java.lang.String alias)
Specified by:
engineIsKeyEntry in class java.security.KeyStoreSpi

engineSetCertificateEntry

public void engineSetCertificateEntry(java.lang.String alias,
                                      java.security.cert.Certificate cert)
                               throws java.security.KeyStoreException
Specified by:
engineSetCertificateEntry in class java.security.KeyStoreSpi
Throws:
java.security.KeyStoreException

engineSetKeyEntry

public void engineSetKeyEntry(java.lang.String alias,
                              byte[] key,
                              java.security.cert.Certificate[] chain)
                       throws java.security.KeyStoreException
Specified by:
engineSetKeyEntry in class java.security.KeyStoreSpi
Throws:
java.security.KeyStoreException

engineSetKeyEntry

public void engineSetKeyEntry(java.lang.String alias,
                              java.security.Key key,
                              char[] password,
                              java.security.cert.Certificate[] chain)
                       throws java.security.KeyStoreException
Specified by:
engineSetKeyEntry in class java.security.KeyStoreSpi
Throws:
java.security.KeyStoreException

engineSize

public int engineSize()
Specified by:
engineSize in class java.security.KeyStoreSpi

unwrapKey

protected java.security.PrivateKey unwrapKey(AlgorithmIdentifier algId,
                                             byte[] data,
                                             char[] password,
                                             boolean wrongPKCS12Zero)
                                      throws java.io.IOException
Throws:
java.io.IOException

wrapKey

protected byte[] wrapKey(java.lang.String algorithm,
                         java.security.Key key,
                         PKCS12PBEParams pbeParams,
                         char[] password)
                  throws java.io.IOException
Throws:
java.io.IOException

decryptData

protected ASN1Sequence decryptData(AlgorithmIdentifier algId,
                                   byte[] data,
                                   char[] password,
                                   boolean wrongPKCS12Zero)
                            throws java.io.IOException
Throws:
java.io.IOException

encryptData

protected byte[] encryptData(java.lang.String algorithm,
                             byte[] data,
                             PKCS12PBEParams pbeParams,
                             char[] password)
                      throws java.io.IOException
Throws:
java.io.IOException

engineLoad

public void engineLoad(java.io.InputStream stream,
                       char[] password)
                throws java.io.IOException
Specified by:
engineLoad in class java.security.KeyStoreSpi
Throws:
java.io.IOException

engineStore

public void engineStore(java.io.OutputStream stream,
                        char[] password)
                 throws java.io.IOException
Specified by:
engineStore in class java.security.KeyStoreSpi
Throws:
java.io.IOException