1a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompackage org.bouncycastle.operator.bc; 2a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 3a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.util.Collections; 4a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.util.HashMap; 5a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport java.util.Map; 6a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 7a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed 8a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed 10a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 11a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 12a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 13a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 14a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.asn1.x509.AlgorithmIdentifier; 15a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.ExtendedDigest; 16a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed 17a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.GOST3411Digest; 18a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.MD2Digest; 19a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.MD4Digest; 20a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed 21a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.digests.MD5Digest; 22a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed 23a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 24a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 25a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.RIPEMD256Digest; 26a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed 27a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.digests.SHA1Digest; 2887490acd76f544251011cf49753d4d0a61f86a66Kenny Rootimport org.bouncycastle.crypto.digests.SHA224Digest; 29a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.digests.SHA256Digest; 30a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.digests.SHA384Digest; 31a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.crypto.digests.SHA512Digest; 32a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.operator.OperatorCreationException; 33a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 34a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrompublic class BcDefaultDigestProvider 35a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom implements BcDigestProvider 36a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom{ 37a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private static final Map lookup = createTable(); 38a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 39a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private static Map createTable() 40a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 41a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom Map table = new HashMap(); 42a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 43a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom table.put(OIWObjectIdentifiers.idSHA1, new BcDigestProvider() 44a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 45a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 46a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new SHA1Digest(); 48a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom }); 5087490acd76f544251011cf49753d4d0a61f86a66Kenny Root table.put(NISTObjectIdentifiers.id_sha224, new BcDigestProvider() 5187490acd76f544251011cf49753d4d0a61f86a66Kenny Root { 5287490acd76f544251011cf49753d4d0a61f86a66Kenny Root public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 5387490acd76f544251011cf49753d4d0a61f86a66Kenny Root { 5487490acd76f544251011cf49753d4d0a61f86a66Kenny Root return new SHA224Digest(); 5587490acd76f544251011cf49753d4d0a61f86a66Kenny Root } 5687490acd76f544251011cf49753d4d0a61f86a66Kenny Root }); 57a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom table.put(NISTObjectIdentifiers.id_sha256, new BcDigestProvider() 58a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 60a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 61a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new SHA256Digest(); 62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom }); 64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom table.put(NISTObjectIdentifiers.id_sha384, new BcDigestProvider() 65a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 66a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 67a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 68a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new SHA384Digest(); 69a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 70a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom }); 71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom table.put(NISTObjectIdentifiers.id_sha512, new BcDigestProvider() 72a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 73a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 74a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 75a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new SHA512Digest(); 76a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 77a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom }); 78a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom table.put(PKCSObjectIdentifiers.md5, new BcDigestProvider() 79a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 80a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 81a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 82a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return new MD5Digest(); 83a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 84a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom }); 85a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 86a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(PKCSObjectIdentifiers.md4, new BcDigestProvider() 87a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 88a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 89a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 90a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new MD4Digest(); 91a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 92a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 93a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(PKCSObjectIdentifiers.md2, new BcDigestProvider() 94a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 95a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 96a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 97a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new MD2Digest(); 98a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 99a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 100a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(CryptoProObjectIdentifiers.gostR3411, new BcDigestProvider() 101a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 102a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 103a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 104a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new GOST3411Digest(); 105a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 106a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 107a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(TeleTrusTObjectIdentifiers.ripemd128, new BcDigestProvider() 108a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 109a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 110a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 111a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new RIPEMD128Digest(); 112a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 113a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 114a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(TeleTrusTObjectIdentifiers.ripemd160, new BcDigestProvider() 115a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 116a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 117a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 118a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new RIPEMD160Digest(); 119a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 120a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 121a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // table.put(TeleTrusTObjectIdentifiers.ripemd256, new BcDigestProvider() 122a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 123a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 124a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 125a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return new RIPEMD256Digest(); 126a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 127a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // }); 128a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 129a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 130a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return Collections.unmodifiableMap(table); 131a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 132a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 133a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public static final BcDigestProvider INSTANCE = new BcDefaultDigestProvider(); 134a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 135a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private BcDefaultDigestProvider() 136a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 137a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 138a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 139a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 140a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 141a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throws OperatorCreationException 142a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 143a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom BcDigestProvider extProv = (BcDigestProvider)lookup.get(digestAlgorithmIdentifier.getAlgorithm()); 144a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 145a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (extProv == null) 146a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 147a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom throw new OperatorCreationException("cannot recognise digest"); 148a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 149a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 150a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return extProv.get(digestAlgorithmIdentifier); 151a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 152a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom} 153