1package org.bouncycastle.jcajce.provider.digest;
2
3import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
4import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
5import org.bouncycastle.crypto.CipherKeyGenerator;
6import org.bouncycastle.crypto.digests.SHA384Digest;
7import org.bouncycastle.crypto.macs.HMac;
8// Android-removed: Unsupported algorithms
9// import org.bouncycastle.crypto.macs.OldHMac;
10import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
11import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
12import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
13
14public class SHA384
15{
16    private SHA384()
17    {
18
19    }
20
21    static public class Digest
22        extends BCMessageDigest
23        implements Cloneable
24    {
25        public Digest()
26        {
27            super(new SHA384Digest());
28        }
29
30        public Object clone()
31            throws CloneNotSupportedException
32        {
33            Digest d = (Digest)super.clone();
34            d.digest = new SHA384Digest((SHA384Digest)digest);
35
36            return d;
37        }
38    }
39
40    public static class HashMac
41        extends BaseMac
42    {
43        public HashMac()
44        {
45            super(new HMac(new SHA384Digest()));
46        }
47    }
48
49    /**
50     * HMACSHA384
51     */
52    public static class KeyGenerator
53        extends BaseKeyGenerator
54    {
55        public KeyGenerator()
56        {
57            super("HMACSHA384", 384, new CipherKeyGenerator());
58        }
59    }
60
61    // BEGIN Android-removed: Unsupported algorithms
62    /*
63    public static class OldSHA384
64        extends BaseMac
65    {
66        public OldSHA384()
67        {
68            super(new OldHMac(new SHA384Digest()));
69        }
70    }
71    */
72    // END Android-removed: Unsupported algorithms
73
74    public static class Mappings
75        extends DigestAlgorithmProvider
76    {
77        private static final String PREFIX = SHA384.class.getName();
78
79        public Mappings()
80        {
81        }
82
83        public void configure(ConfigurableProvider provider)
84        {
85            provider.addAlgorithm("MessageDigest.SHA-384", PREFIX + "$Digest");
86            provider.addAlgorithm("Alg.Alias.MessageDigest.SHA384", "SHA-384");
87            provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha384, "SHA-384");
88            // Android-removed: Unsupported algorithms
89            // provider.addAlgorithm("Mac.OLDHMACSHA384", PREFIX + "$OldSHA384");
90
91            provider.addAlgorithm("Mac.PBEWITHHMACSHA384", PREFIX + "$HashMac");
92
93            addHMACAlgorithm(provider, "SHA384", PREFIX + "$HashMac",  PREFIX + "$KeyGenerator");
94            addHMACAlias(provider, "SHA384", PKCSObjectIdentifiers.id_hmacWithSHA384);
95        }
96    }
97}
98