1package org.bouncycastle.jcajce.provider.asymmetric;
2
3import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
4import org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil;
5import org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi;
6import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
7import org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider;
8import org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter;
9
10public class DSA
11{
12    private static final String PREFIX = "org.bouncycastle.jcajce.provider.asymmetric" + ".dsa.";
13
14    public static class Mappings
15        extends AsymmetricAlgorithmProvider
16    {
17        public Mappings()
18        {
19        }
20
21        public void configure(ConfigurableProvider provider)
22        {
23            provider.addAlgorithm("AlgorithmParameters.DSA", PREFIX + "AlgorithmParametersSpi");
24
25            provider.addAlgorithm("AlgorithmParameterGenerator.DSA", PREFIX + "AlgorithmParameterGeneratorSpi");
26
27            provider.addAlgorithm("KeyPairGenerator.DSA", PREFIX + "KeyPairGeneratorSpi");
28            provider.addAlgorithm("KeyFactory.DSA", PREFIX + "KeyFactorySpi");
29
30            // BEGIN Android-changed: Change primary ID from DSA to SHA1withDSA
31            // provider.addAlgorithm("Signature.DSA", PREFIX + "DSASigner$stdDSA");
32            provider.addAlgorithm("Signature.SHA1withDSA", PREFIX + "DSASigner$stdDSA");
33            provider.addAlgorithm("Alg.Alias.Signature.DSA", "SHA1withDSA");
34            // END Android-changed: Change primary ID from DSA to SHA1withDSA
35            provider.addAlgorithm("Signature.NONEWITHDSA", PREFIX + "DSASigner$noneDSA");
36
37            provider.addAlgorithm("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA");
38
39            // BEGIN Android-removed: Unsupported algorithms
40            /*
41            provider.addAlgorithm("Signature.DETDSA", PREFIX + "DSASigner$detDSA");
42            provider.addAlgorithm("Signature.SHA1WITHDETDSA", PREFIX + "DSASigner$detDSA");
43            provider.addAlgorithm("Signature.SHA224WITHDETDSA", PREFIX + "DSASigner$detDSA224");
44            provider.addAlgorithm("Signature.SHA256WITHDETDSA", PREFIX + "DSASigner$detDSA256");
45            provider.addAlgorithm("Signature.SHA384WITHDETDSA", PREFIX + "DSASigner$detDSA384");
46            provider.addAlgorithm("Signature.SHA512WITHDETDSA", PREFIX + "DSASigner$detDSA512");
47
48            provider.addAlgorithm("Signature.DDSA", PREFIX + "DSASigner$detDSA");
49            provider.addAlgorithm("Signature.SHA1WITHDDSA", PREFIX + "DSASigner$detDSA");
50            provider.addAlgorithm("Signature.SHA224WITHDDSA", PREFIX + "DSASigner$detDSA224");
51            provider.addAlgorithm("Signature.SHA256WITHDDSA", PREFIX + "DSASigner$detDSA256");
52            provider.addAlgorithm("Signature.SHA384WITHDDSA", PREFIX + "DSASigner$detDSA384");
53            provider.addAlgorithm("Signature.SHA512WITHDDSA", PREFIX + "DSASigner$detDSA512");
54            provider.addAlgorithm("Signature.SHA3-224WITHDDSA", PREFIX + "DSASigner$detDSASha3_224");
55            provider.addAlgorithm("Signature.SHA3-256WITHDDSA", PREFIX + "DSASigner$detDSASha3_256");
56            provider.addAlgorithm("Signature.SHA3-384WITHDDSA", PREFIX + "DSASigner$detDSASha3_384");
57            provider.addAlgorithm("Signature.SHA3-512WITHDDSA", PREFIX + "DSASigner$detDSASha3_512");
58            */
59            // END Android-removed: Unsupported algorithms
60
61            addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
62            addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
63            // BEGIN Android-removed: Unsupported algorithms
64            /*
65            addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
66            addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
67
68            addSignatureAlgorithm(provider, "SHA3-224", "DSA", PREFIX + "DSASigner$dsaSha3_224", NISTObjectIdentifiers.id_dsa_with_sha3_224);
69            addSignatureAlgorithm(provider, "SHA3-256", "DSA", PREFIX + "DSASigner$dsaSha3_256", NISTObjectIdentifiers.id_dsa_with_sha3_256);
70            addSignatureAlgorithm(provider, "SHA3-384", "DSA", PREFIX + "DSASigner$dsaSha3_384", NISTObjectIdentifiers.id_dsa_with_sha3_384);
71            addSignatureAlgorithm(provider, "SHA3-512", "DSA", PREFIX + "DSASigner$dsaSha3_512", NISTObjectIdentifiers.id_dsa_with_sha3_512);
72            */
73            // END Android-removed: Unsupported algorithms
74
75            // BEGIN Android-changed: Change primary ID from DSA to SHA1withDSA
76            provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
77            provider.addAlgorithm("Alg.Alias.Signature.SHA1withDSA", "SHA1withDSA");
78            provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA");
79            provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA");
80            provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA");
81            provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
82            provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA");
83            provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA");
84            provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA");
85            // END Android-changed: Change primary ID from DSA to SHA1withDSA
86
87            // BEGIN Android-removed: Unsupported algorithms
88            // provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA");
89            // END Android-removed: Unsupported algorithms
90
91            AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi();
92
93            for (int i = 0; i != DSAUtil.dsaOids.length; i++)
94            {
95                // BEGIN Android-changed: Change primary ID from DSA to SHA1withDSA
96                provider.addAlgorithm("Alg.Alias.Signature." + DSAUtil.dsaOids[i], "SHA1withDSA");
97                // END Android-changed: Change primary ID from DSA to SHA1withDSA
98
99                registerOid(provider, DSAUtil.dsaOids[i], "DSA", keyFact);
100                registerOidAlgorithmParameterGenerator(provider, DSAUtil.dsaOids[i], "DSA");
101            }
102        }
103    }
104}
105