package org.bouncycastle.jce.provider; import java.security.MessageDigest; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.*; public class JDKMessageDigest extends MessageDigest { Digest digest; protected JDKMessageDigest( Digest digest) { super(digest.getAlgorithmName()); this.digest = digest; } public void engineReset() { digest.reset(); } public void engineUpdate( byte input) { digest.update(input); } public void engineUpdate( byte[] input, int offset, int len) { digest.update(input, offset, len); } public byte[] engineDigest() { byte[] digestBytes = new byte[digest.getDigestSize()]; digest.doFinal(digestBytes, 0); return digestBytes; } /** * classes that extend directly off us. */ static public class SHA1 extends JDKMessageDigest implements Cloneable { public SHA1() { super(new SHA1Digest()); } public Object clone() throws CloneNotSupportedException { SHA1 d = (SHA1)super.clone(); d.digest = new SHA1Digest((SHA1Digest)digest); return d; } } static public class SHA256 extends JDKMessageDigest implements Cloneable { public SHA256() { super(new SHA256Digest()); } public Object clone() throws CloneNotSupportedException { SHA256 d = (SHA256)super.clone(); d.digest = new SHA256Digest((SHA256Digest)digest); return d; } } static public class SHA384 extends JDKMessageDigest implements Cloneable { public SHA384() { super(new SHA384Digest()); } public Object clone() throws CloneNotSupportedException { SHA384 d = (SHA384)super.clone(); d.digest = new SHA384Digest((SHA384Digest)digest); return d; } } static public class SHA512 extends JDKMessageDigest implements Cloneable { public SHA512() { super(new SHA512Digest()); } public Object clone() throws CloneNotSupportedException { SHA512 d = (SHA512)super.clone(); d.digest = new SHA512Digest((SHA512Digest)digest); return d; } } static public class MD2 extends JDKMessageDigest implements Cloneable { public MD2() { super(new MD2Digest()); } public Object clone() throws CloneNotSupportedException { MD2 d = (MD2)super.clone(); d.digest = new MD2Digest((MD2Digest)digest); return d; } } static public class MD4 extends JDKMessageDigest implements Cloneable { public MD4() { super(new MD4Digest()); } public Object clone() throws CloneNotSupportedException { MD4 d = (MD4)super.clone(); d.digest = new MD4Digest((MD4Digest)digest); return d; } } static public class MD5 extends JDKMessageDigest implements Cloneable { public MD5() { super(new MD5Digest()); } public Object clone() throws CloneNotSupportedException { MD5 d = (MD5)super.clone(); d.digest = new MD5Digest((MD5Digest)digest); return d; } } static public class RIPEMD128 extends JDKMessageDigest implements Cloneable { public RIPEMD128() { super(new RIPEMD128Digest()); } public Object clone() throws CloneNotSupportedException { RIPEMD128 d = (RIPEMD128)super.clone(); d.digest = new RIPEMD128Digest((RIPEMD128Digest)digest); return d; } } static public class RIPEMD160 extends JDKMessageDigest implements Cloneable { public RIPEMD160() { super(new RIPEMD160Digest()); } public Object clone() throws CloneNotSupportedException { RIPEMD160 d = (RIPEMD160)super.clone(); d.digest = new RIPEMD160Digest((RIPEMD160Digest)digest); return d; } } static public class RIPEMD256 extends JDKMessageDigest implements Cloneable { public RIPEMD256() { super(new RIPEMD256Digest()); } public Object clone() throws CloneNotSupportedException { RIPEMD256 d = (RIPEMD256)super.clone(); d.digest = new RIPEMD256Digest((RIPEMD256Digest)digest); return d; } } static public class RIPEMD320 extends JDKMessageDigest implements Cloneable { public RIPEMD320() { super(new RIPEMD320Digest()); } public Object clone() throws CloneNotSupportedException { RIPEMD320 d = (RIPEMD320)super.clone(); d.digest = new RIPEMD320Digest((RIPEMD320Digest)digest); return d; } } static public class Tiger extends JDKMessageDigest implements Cloneable { public Tiger() { super(new TigerDigest()); } public Object clone() throws CloneNotSupportedException { Tiger d = (Tiger)super.clone(); d.digest = new TigerDigest((TigerDigest)digest); return d; } } }