14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.digest; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.CipherKeyGenerator; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.digests.SHA512Digest; 7a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed 8a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.digests.SHA512tDigest; 9a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.macs.HMac; 11a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// BEGIN android-removed 12a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// import org.bouncycastle.crypto.macs.OldHMac; 13a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom// END android-removed 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 16a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromimport org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class SHA512 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 20a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom private SHA512() 21a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom { 22a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 23a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom } 24a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom static public class Digest 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends BCMessageDigest 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom implements Cloneable 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public Digest() 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super(new SHA512Digest()); 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public Object clone() 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws CloneNotSupportedException 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom Digest d = (Digest)super.clone(); 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom d.digest = new SHA512Digest((SHA512Digest)digest); 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return d; 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 44a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 45a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // static public class DigestT 46a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BCMessageDigest 47a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // implements Cloneable 48a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 49a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public DigestT(int bitLength) 50a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 51a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(new SHA512tDigest(bitLength)); 52a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 53a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 54a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public Object clone() 55a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // throws CloneNotSupportedException 56a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 57a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // DigestT d = (DigestT)super.clone(); 58a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // d.digest = new SHA512tDigest((SHA512tDigest)digest); 59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 60a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // return d; 61a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // static public class DigestT224 65a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends DigestT 66a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 67a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public DigestT224() 68a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 69a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(224); 70a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 72a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 73a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // static public class DigestT256 74a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends DigestT 75a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 76a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public DigestT256() 77a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 78a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(256); 79a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 80a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 81a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 82a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static class HashMac 84a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom extends BaseMac 854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public HashMac() 874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super(new HMac(new SHA512Digest())); 894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 92a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 93a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public static class HashMacT224 94a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BaseMac 95a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 96a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public HashMacT224() 97a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 98a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(new HMac(new SHA512tDigest(224))); 99a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 100a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 101a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 102a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public static class HashMacT256 103a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BaseMac 104a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 105a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public HashMacT256() 106a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 107a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(new HMac(new SHA512tDigest(256))); 108a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 109a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 110a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 111a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // /** 112a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // * SHA-512 HMac 113a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // */ 114a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public static class OldSHA512 115a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BaseMac 116a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 117a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public OldSHA512() 118a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 119a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super(new OldHMac(new SHA512Digest())); 120a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 121a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 122a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 123a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 1244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 1254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * HMACSHA512 1264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 1274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static class KeyGenerator 1284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends BaseKeyGenerator 1294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public KeyGenerator() 1314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super("HMACSHA512", 512, new CipherKeyGenerator()); 1334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 136a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 137a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public static class KeyGeneratorT224 138a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BaseKeyGenerator 139a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 140a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public KeyGeneratorT224() 141a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 142a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super("HMACSHA512/224", 224, new CipherKeyGenerator()); 143a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 144a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 145a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 146a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public static class KeyGeneratorT256 147a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // extends BaseKeyGenerator 148a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 149a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // public KeyGeneratorT256() 150a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // { 151a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // super("HMACSHA512/256", 256, new CipherKeyGenerator()); 152a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 153a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // } 154a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 155a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 1564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static class Mappings 1574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends DigestAlgorithmProvider 1584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private static final String PREFIX = SHA512.class.getName(); 1604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public Mappings() 1624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void configure(ConfigurableProvider provider) 1664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom provider.addAlgorithm("MessageDigest.SHA-512", PREFIX + "$Digest"); 1684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512", "SHA-512"); 1694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512"); 1704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 171a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 172a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("MessageDigest.SHA-512/224", PREFIX + "$DigestT224"); 173a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512/224", "SHA-512/224"); 174a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_224, "SHA-512/224"); 175a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 176a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("MessageDigest.SHA-512/256", PREFIX + "$DigestT256"); 177a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512256", "SHA-512/256"); 178a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_256, "SHA-512/256"); 179a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // 180a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // provider.addAlgorithm("Mac.OLDHMACSHA512", PREFIX + "$OldSHA512"); 181a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 182a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 1834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom addHMACAlgorithm(provider, "SHA512", PREFIX + "$HashMac", PREFIX + "$KeyGenerator"); 1844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom addHMACAlias(provider, "SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512); 185a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 186a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // BEGIN android-removed 187a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // addHMACAlgorithm(provider, "SHA512/224", PREFIX + "$HashMacT224", PREFIX + "$KeyGeneratorT224"); 188a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // addHMACAlgorithm(provider, "SHA512/256", PREFIX + "$HashMacT256", PREFIX + "$KeyGeneratorT256"); 189a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom // END android-removed 1904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 194