1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.operator;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.HashMap;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.Map;
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERNull;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom// BEGIN android-removed
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom// END android-removed
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.pkcs.RSASSAPSSparams;
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.AlgorithmIdentifier;
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class DefaultDigestAlgorithmIdentifierFinder
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    implements DigestAlgorithmIdentifierFinder
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private static Map digestOids = new HashMap();
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private static Map digestNameToOids = new HashMap();
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    static
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        //
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digests
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        //
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // BEGIN android-removed
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(OIWObjectIdentifiers.md4WithRSAEncryption, PKCSObjectIdentifiers.md4);
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(OIWObjectIdentifiers.md4WithRSA, PKCSObjectIdentifiers.md4);
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // END android-removed
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(OIWObjectIdentifiers.sha1WithRSA, OIWObjectIdentifiers.idSHA1);
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3687490acd76f544251011cf49753d4d0a61f86a66Kenny Root        digestOids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, NISTObjectIdentifiers.id_sha224);
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, NISTObjectIdentifiers.id_sha256);
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, NISTObjectIdentifiers.id_sha384);
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, NISTObjectIdentifiers.id_sha512);
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // BEGIN android-removed
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(PKCSObjectIdentifiers.md2WithRSAEncryption, PKCSObjectIdentifiers.md2);
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(PKCSObjectIdentifiers.md4WithRSAEncryption, PKCSObjectIdentifiers.md4);
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // END android-removed
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(PKCSObjectIdentifiers.md5WithRSAEncryption, PKCSObjectIdentifiers.md5);
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(PKCSObjectIdentifiers.sha1WithRSAEncryption, OIWObjectIdentifiers.idSHA1);
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, OIWObjectIdentifiers.idSHA1);
4887490acd76f544251011cf49753d4d0a61f86a66Kenny Root        digestOids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, NISTObjectIdentifiers.id_sha224);
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(X9ObjectIdentifiers.ecdsa_with_SHA256, NISTObjectIdentifiers.id_sha256);
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(X9ObjectIdentifiers.ecdsa_with_SHA384, NISTObjectIdentifiers.id_sha384);
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(X9ObjectIdentifiers.ecdsa_with_SHA512, NISTObjectIdentifiers.id_sha512);
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(X9ObjectIdentifiers.id_dsa_with_sha1, OIWObjectIdentifiers.idSHA1);
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
5487490acd76f544251011cf49753d4d0a61f86a66Kenny Root        digestOids.put(NISTObjectIdentifiers.dsa_with_sha224, NISTObjectIdentifiers.id_sha224);
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(NISTObjectIdentifiers.dsa_with_sha256, NISTObjectIdentifiers.id_sha256);
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(NISTObjectIdentifiers.dsa_with_sha384, NISTObjectIdentifiers.id_sha384);
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestOids.put(NISTObjectIdentifiers.dsa_with_sha512, NISTObjectIdentifiers.id_sha512);
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // BEGIN android-removed
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128, TeleTrusTObjectIdentifiers.ripemd128);
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160, TeleTrusTObjectIdentifiers.ripemd160);
62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256, TeleTrusTObjectIdentifiers.ripemd256);
63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        //
64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, CryptoProObjectIdentifiers.gostR3411);
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestOids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, CryptoProObjectIdentifiers.gostR3411);
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // END android-removed
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestNameToOids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
6987490acd76f544251011cf49753d4d0a61f86a66Kenny Root        digestNameToOids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestNameToOids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestNameToOids.put("SHA-384", NISTObjectIdentifiers.id_sha384);
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestNameToOids.put("SHA-512", NISTObjectIdentifiers.id_sha512);
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // BEGIN android-removed
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("GOST3411", CryptoProObjectIdentifiers.gostR3411);
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        //
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("MD2", PKCSObjectIdentifiers.md2);
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("MD4", PKCSObjectIdentifiers.md4);
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // END android-removed
80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        digestNameToOids.put("MD5", PKCSObjectIdentifiers.md5);
81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // BEGIN android-removed
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128);
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160);
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // digestNameToOids.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256);
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // END android-removed
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public AlgorithmIdentifier find(AlgorithmIdentifier sigAlgId)
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        AlgorithmIdentifier digAlgId;
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
9570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom            digAlgId = RSASSAPSSparams.getInstance(sigAlgId.getParameters()).getHashAlgorithm();
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        else
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            digAlgId = new AlgorithmIdentifier((ASN1ObjectIdentifier)digestOids.get(sigAlgId.getAlgorithm()), DERNull.INSTANCE);
100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return digAlgId;
103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public AlgorithmIdentifier find(String digAlgName)
106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new AlgorithmIdentifier((ASN1ObjectIdentifier)digestNameToOids.get(digAlgName), DERNull.INSTANCE);
108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
10970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom}