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