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