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