📄 jdkkeyfactory.java
字号:
/** * create a private key from the given DER encoded input stream. */ protected static PrivateKey createPrivateKeyFromDERStream( byte[] in) throws IOException { return createPrivateKeyFromPrivateKeyInfo( new PrivateKeyInfo((ASN1Sequence) ASN1Object.fromByteArray(in))); } /** * create a private key from the given public key info object. */ static PrivateKey createPrivateKeyFromPrivateKeyInfo( PrivateKeyInfo info) { DERObjectIdentifier algOid = info.getAlgorithmId().getObjectId(); if (RSAUtil.isRsaOid(algOid)) { return new JCERSAPrivateCrtKey(info); } else if (algOid.equals(PKCSObjectIdentifiers.dhKeyAgreement)) { return new JCEDHPrivateKey(info); } else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm)) { return new JCEElGamalPrivateKey(info); } else if (algOid.equals(X9ObjectIdentifiers.id_dsa)) { return new JDKDSAPrivateKey(info); } else if (algOid.equals(X9ObjectIdentifiers.id_ecPublicKey)) { return new JCEECPrivateKey(info); } else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94)) { return new JDKGOST3410PrivateKey(info); } else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001)) { return new JCEECPrivateKey(info); } else { throw new RuntimeException("algorithm identifier " + algOid + " in key not recognised"); } } public static class RSA extends JDKKeyFactory { public RSA() { } protected PrivateKey engineGeneratePrivate( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof PKCS8EncodedKeySpec) { try { return JDKKeyFactory.createPrivateKeyFromDERStream( ((PKCS8EncodedKeySpec)keySpec).getEncoded()); } catch (Exception e) { // // in case it's just a RSAPrivateKey object... // try { return new JCERSAPrivateCrtKey( new RSAPrivateKeyStructure( (ASN1Sequence) ASN1Object.fromByteArray(((PKCS8EncodedKeySpec)keySpec).getEncoded()))); } catch (Exception ex) { throw new InvalidKeySpecException(ex.toString()); } } } else if (keySpec instanceof RSAPrivateCrtKeySpec) { return new JCERSAPrivateCrtKey((RSAPrivateCrtKeySpec)keySpec); } else if (keySpec instanceof RSAPrivateKeySpec) { return new JCERSAPrivateKey((RSAPrivateKeySpec)keySpec); } throw new InvalidKeySpecException("Unknown KeySpec type: " + keySpec.getClass().getName()); } protected PublicKey engineGeneratePublic( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof RSAPublicKeySpec) { return new JCERSAPublicKey((RSAPublicKeySpec)keySpec); } return super.engineGeneratePublic(keySpec); } } public static class DH extends JDKKeyFactory { public DH() { } protected PrivateKey engineGeneratePrivate( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof DHPrivateKeySpec) { return new JCEDHPrivateKey((DHPrivateKeySpec)keySpec); } return super.engineGeneratePrivate(keySpec); } protected PublicKey engineGeneratePublic( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof DHPublicKeySpec) { return new JCEDHPublicKey((DHPublicKeySpec)keySpec); } return super.engineGeneratePublic(keySpec); } } public static class DSA extends JDKKeyFactory { public DSA() { } protected PrivateKey engineGeneratePrivate( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof DSAPrivateKeySpec) { return new JDKDSAPrivateKey((DSAPrivateKeySpec)keySpec); } return super.engineGeneratePrivate(keySpec); } protected PublicKey engineGeneratePublic( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof DSAPublicKeySpec) { return new JDKDSAPublicKey((DSAPublicKeySpec)keySpec); } return super.engineGeneratePublic(keySpec); } } public static class GOST3410 extends JDKKeyFactory { public GOST3410() { } protected PrivateKey engineGeneratePrivate( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof GOST3410PrivateKeySpec) { return new JDKGOST3410PrivateKey((GOST3410PrivateKeySpec)keySpec); } return super.engineGeneratePrivate(keySpec); } protected PublicKey engineGeneratePublic( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof GOST3410PublicKeySpec) { return new JDKGOST3410PublicKey((GOST3410PublicKeySpec)keySpec); } return super.engineGeneratePublic(keySpec); } } public static class ElGamal extends JDKKeyFactory { public ElGamal() { elGamalFactory = true; } protected PrivateKey engineGeneratePrivate( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof ElGamalPrivateKeySpec) { return new JCEElGamalPrivateKey((ElGamalPrivateKeySpec)keySpec); } else if (keySpec instanceof DHPrivateKeySpec) { return new JCEElGamalPrivateKey((DHPrivateKeySpec)keySpec); } return super.engineGeneratePrivate(keySpec); } protected PublicKey engineGeneratePublic( KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof ElGamalPublicKeySpec) { return new JCEElGamalPublicKey((ElGamalPublicKeySpec)keySpec); } else if (keySpec instanceof DHPublicKeySpec) { return new JCEElGamalPublicKey((DHPublicKeySpec)keySpec); } return super.engineGeneratePublic(keySpec); } } /** * This isn't really correct, however the class path project API seems to think such * a key factory will exist. */ public static class X509 extends JDKKeyFactory { public X509() { } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -