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