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