1package org.bouncycastle.jcajce.provider.digest;
2
3import org.bouncycastle.asn1.iana.IANAObjectIdentifiers;
4import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
5import org.bouncycastle.crypto.CipherKeyGenerator;
6import org.bouncycastle.crypto.digests.MD5Digest;
7import org.bouncycastle.crypto.macs.HMac;
8import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
9import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
10import org.bouncycastle.jce.provider.JCEMac;
11
12public class MD5
13{
14    /**
15     * MD5 HMac
16     */
17    public static class HashMac
18        extends JCEMac
19    {
20        public HashMac()
21        {
22            super(new HMac(new MD5Digest()));
23        }
24    }
25
26    public static class KeyGenerator
27        extends BaseKeyGenerator
28    {
29        public KeyGenerator()
30        {
31            super("HMACMD5", 128, new CipherKeyGenerator());
32        }
33    }
34
35    static public class Digest
36        extends BCMessageDigest
37        implements Cloneable
38    {
39        public Digest()
40        {
41            super(new MD5Digest());
42        }
43
44        public Object clone()
45            throws CloneNotSupportedException
46        {
47            Digest d = (Digest)super.clone();
48            d.digest = new MD5Digest((MD5Digest)digest);
49
50            return d;
51        }
52    }
53
54    public static class Mappings
55        extends DigestAlgorithmProvider
56    {
57        private static final String PREFIX = MD5.class.getName();
58
59        public Mappings()
60        {
61        }
62
63        public void configure(ConfigurableProvider provider)
64        {
65            provider.addAlgorithm("MessageDigest.MD5", PREFIX + "$Digest");
66            provider.addAlgorithm("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md5, "MD5");
67
68            addHMACAlgorithm(provider, "MD5", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
69            addHMACAlias(provider, "MD5", IANAObjectIdentifiers.hmacMD5);
70        }
71    }
72}
73