DigestFactory.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.jcajce.provider.util;
2
3import java.util.HashMap;
4import java.util.HashSet;
5import java.util.Map;
6import java.util.Set;
7
8import org.bouncycastle.asn1.ASN1ObjectIdentifier;
9import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
10import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
11import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
12import org.bouncycastle.crypto.Digest;
13// BEGIN android-removed
14// import org.bouncycastle.crypto.digests.MD5Digest;
15// import org.bouncycastle.crypto.digests.SHA1Digest;
16// import org.bouncycastle.crypto.digests.SHA224Digest;
17// import org.bouncycastle.crypto.digests.SHA256Digest;
18// import org.bouncycastle.crypto.digests.SHA384Digest;
19// import org.bouncycastle.crypto.digests.SHA512Digest;
20// END android-removed
21// BEGIN android-added
22import org.bouncycastle.crypto.digests.AndroidDigestFactory;
23// END android-added
24import org.bouncycastle.util.Strings;
25
26public class DigestFactory
27{
28    private static Set md5 = new HashSet();
29    private static Set sha1 = new HashSet();
30    // BEGIN android-removed
31    // private static Set sha224 = new HashSet();
32    // END android-removed
33    private static Set sha256 = new HashSet();
34    private static Set sha384 = new HashSet();
35    private static Set sha512 = new HashSet();
36
37    private static Map oids = new HashMap();
38
39    static
40    {
41        md5.add("MD5");
42        md5.add(PKCSObjectIdentifiers.md5.getId());
43
44        sha1.add("SHA1");
45        sha1.add("SHA-1");
46        sha1.add(OIWObjectIdentifiers.idSHA1.getId());
47
48        // BEGIN android-removed
49        // sha224.add("SHA224");
50        // sha224.add("SHA-224");
51        // sha224.add(NISTObjectIdentifiers.id_sha224.getId());
52        // END android-removed
53
54        sha256.add("SHA256");
55        sha256.add("SHA-256");
56        sha256.add(NISTObjectIdentifiers.id_sha256.getId());
57
58        sha384.add("SHA384");
59        sha384.add("SHA-384");
60        sha384.add(NISTObjectIdentifiers.id_sha384.getId());
61
62        sha512.add("SHA512");
63        sha512.add("SHA-512");
64        sha512.add(NISTObjectIdentifiers.id_sha512.getId());
65
66        oids.put("MD5", PKCSObjectIdentifiers.md5);
67        oids.put(PKCSObjectIdentifiers.md5.getId(), PKCSObjectIdentifiers.md5);
68
69        oids.put("SHA1", OIWObjectIdentifiers.idSHA1);
70        oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
71        oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1);
72
73        // BEGIN android-removed
74        // oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
75        // oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
76        // oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
77        // END android-removed
78
79        oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
80        oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
81        oids.put(NISTObjectIdentifiers.id_sha256.getId(), NISTObjectIdentifiers.id_sha256);
82
83        oids.put("SHA384", NISTObjectIdentifiers.id_sha384);
84        oids.put("SHA-384", NISTObjectIdentifiers.id_sha384);
85        oids.put(NISTObjectIdentifiers.id_sha384.getId(), NISTObjectIdentifiers.id_sha384);
86
87        oids.put("SHA512", NISTObjectIdentifiers.id_sha512);
88        oids.put("SHA-512", NISTObjectIdentifiers.id_sha512);
89        oids.put(NISTObjectIdentifiers.id_sha512.getId(), NISTObjectIdentifiers.id_sha512);
90    }
91
92    public static Digest getDigest(
93        String digestName)
94    {
95        digestName = Strings.toUpperCase(digestName);
96
97        if (sha1.contains(digestName))
98        {
99            // BEGIN android-changed
100            return AndroidDigestFactory.getSHA1();
101            // END android-changed
102        }
103        if (md5.contains(digestName))
104        {
105            // BEGIN android-changed
106            return AndroidDigestFactory.getMD5();
107            // END android-changed
108        }
109        // BEGIN android-removed
110        // if (sha224.contains(digestName))
111        // {
112        //     return new SHA224Digest();
113        // }
114        // END android-removed
115        if (sha256.contains(digestName))
116        {
117            // BEGIN android-changed
118            return AndroidDigestFactory.getSHA256();
119            // END android-changed
120        }
121        if (sha384.contains(digestName))
122        {
123            // BEGIN android-changed
124            return AndroidDigestFactory.getSHA384();
125            // END android-changed
126        }
127        if (sha512.contains(digestName))
128        {
129            // BEGIN android-changed
130            return AndroidDigestFactory.getSHA512();
131            // END android-changed
132        }
133
134        return null;
135    }
136
137    public static boolean isSameDigest(
138        String digest1,
139        String digest2)
140    {
141        return (sha1.contains(digest1) && sha1.contains(digest2))
142            // BEGIN android-removed
143            // || (sha224.contains(digest1) && sha224.contains(digest2))
144            // END android-removed
145            || (sha256.contains(digest1) && sha256.contains(digest2))
146            || (sha384.contains(digest1) && sha384.contains(digest2))
147            || (sha512.contains(digest1) && sha512.contains(digest2))
148            || (md5.contains(digest1) && md5.contains(digest2));
149    }
150
151    public static ASN1ObjectIdentifier getOID(
152        String digestName)
153    {
154        return (ASN1ObjectIdentifier)oids.get(digestName);
155    }
156}
157