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