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