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.jcajce.provider.symmetric.util.BaseMac;
11
12public class MD5
13{
14    private MD5()
15    {
16
17    }
18
19    /**
20     * MD5 HashMac
21     */
22    public static class HashMac
23        extends BaseMac
24    {
25        public HashMac()
26        {
27            super(new HMac(new MD5Digest()));
28        }
29    }
30
31    public static class KeyGenerator
32        extends BaseKeyGenerator
33    {
34        public KeyGenerator()
35        {
36            super("HMACMD5", 128, new CipherKeyGenerator());
37        }
38    }
39
40    static public class Digest
41        extends BCMessageDigest
42        implements Cloneable
43    {
44        public Digest()
45        {
46            super(new MD5Digest());
47        }
48
49        public Object clone()
50            throws CloneNotSupportedException
51        {
52            Digest d = (Digest)super.clone();
53            d.digest = new MD5Digest((MD5Digest)digest);
54
55            return d;
56        }
57    }
58
59    public static class Mappings
60        extends DigestAlgorithmProvider
61    {
62        private static final String PREFIX = MD5.class.getName();
63
64        public Mappings()
65        {
66        }
67
68        public void configure(ConfigurableProvider provider)
69        {
70            provider.addAlgorithm("MessageDigest.MD5", PREFIX + "$Digest");
71            provider.addAlgorithm("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md5, "MD5");
72
73            addHMACAlgorithm(provider, "MD5", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
74            addHMACAlias(provider, "MD5", IANAObjectIdentifiers.hmacMD5);
75        }
76    }
77}
78