1 package org.bouncycastle.jcajce.provider.digest; 2 3 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 4 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 5 import org.bouncycastle.crypto.CipherKeyGenerator; 6 import org.bouncycastle.crypto.digests.SHA512Digest; 7 // BEGIN android-removed 8 // import org.bouncycastle.crypto.digests.SHA512tDigest; 9 // END android-removed 10 import org.bouncycastle.crypto.macs.HMac; 11 // BEGIN android-removed 12 // import org.bouncycastle.crypto.macs.OldHMac; 13 // END android-removed 14 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 15 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 16 import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 17 18 public class SHA512 19 { 20 private SHA512() 21 { 22 23 } 24 25 static public class Digest 26 extends BCMessageDigest 27 implements Cloneable 28 { 29 public Digest() 30 { 31 super(new SHA512Digest()); 32 } 33 34 public Object clone() 35 throws CloneNotSupportedException 36 { 37 Digest d = (Digest)super.clone(); 38 d.digest = new SHA512Digest((SHA512Digest)digest); 39 40 return d; 41 } 42 } 43 44 // BEGIN android-removed 45 // static public class DigestT 46 // extends BCMessageDigest 47 // implements Cloneable 48 // { 49 // public DigestT(int bitLength) 50 // { 51 // super(new SHA512tDigest(bitLength)); 52 // } 53 // 54 // public Object clone() 55 // throws CloneNotSupportedException 56 // { 57 // DigestT d = (DigestT)super.clone(); 58 // d.digest = new SHA512tDigest((SHA512tDigest)digest); 59 // 60 // return d; 61 // } 62 // } 63 // 64 // static public class DigestT224 65 // extends DigestT 66 // { 67 // public DigestT224() 68 // { 69 // super(224); 70 // } 71 // } 72 // 73 // static public class DigestT256 74 // extends DigestT 75 // { 76 // public DigestT256() 77 // { 78 // super(256); 79 // } 80 // } 81 // END android-removed 82 83 public static class HashMac 84 extends BaseMac 85 { 86 public HashMac() 87 { 88 super(new HMac(new SHA512Digest())); 89 } 90 } 91 92 // BEGIN android-removed 93 // public static class HashMacT224 94 // extends BaseMac 95 // { 96 // public HashMacT224() 97 // { 98 // super(new HMac(new SHA512tDigest(224))); 99 // } 100 // } 101 // 102 // public static class HashMacT256 103 // extends BaseMac 104 // { 105 // public HashMacT256() 106 // { 107 // super(new HMac(new SHA512tDigest(256))); 108 // } 109 // } 110 // 111 // /** 112 // * SHA-512 HMac 113 // */ 114 // public static class OldSHA512 115 // extends BaseMac 116 // { 117 // public OldSHA512() 118 // { 119 // super(new OldHMac(new SHA512Digest())); 120 // } 121 // } 122 // END android-removed 123 124 /** 125 * HMACSHA512 126 */ 127 public static class KeyGenerator 128 extends BaseKeyGenerator 129 { 130 public KeyGenerator() 131 { 132 super("HMACSHA512", 512, new CipherKeyGenerator()); 133 } 134 } 135 136 // BEGIN android-removed 137 // public static class KeyGeneratorT224 138 // extends BaseKeyGenerator 139 // { 140 // public KeyGeneratorT224() 141 // { 142 // super("HMACSHA512/224", 224, new CipherKeyGenerator()); 143 // } 144 // } 145 // 146 // public static class KeyGeneratorT256 147 // extends BaseKeyGenerator 148 // { 149 // public KeyGeneratorT256() 150 // { 151 // super("HMACSHA512/256", 256, new CipherKeyGenerator()); 152 // } 153 // } 154 // END android-removed 155 156 public static class Mappings 157 extends DigestAlgorithmProvider 158 { 159 private static final String PREFIX = SHA512.class.getName(); 160 161 public Mappings() 162 { 163 } 164 165 public void configure(ConfigurableProvider provider) 166 { 167 provider.addAlgorithm("MessageDigest.SHA-512", PREFIX + "$Digest"); 168 provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512", "SHA-512"); 169 provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512"); 170 171 // BEGIN android-removed 172 // provider.addAlgorithm("MessageDigest.SHA-512/224", PREFIX + "$DigestT224"); 173 // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512/224", "SHA-512/224"); 174 // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_224, "SHA-512/224"); 175 // 176 // provider.addAlgorithm("MessageDigest.SHA-512/256", PREFIX + "$DigestT256"); 177 // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512256", "SHA-512/256"); 178 // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_256, "SHA-512/256"); 179 // 180 // provider.addAlgorithm("Mac.OLDHMACSHA512", PREFIX + "$OldSHA512"); 181 // END android-removed 182 183 provider.addAlgorithm("Mac.PBEWITHHMACSHA512", PREFIX + "$HashMac"); 184 185 addHMACAlgorithm(provider, "SHA512", PREFIX + "$HashMac", PREFIX + "$KeyGenerator"); 186 addHMACAlias(provider, "SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512); 187 188 // BEGIN android-removed 189 // addHMACAlgorithm(provider, "SHA512/224", PREFIX + "$HashMacT224", PREFIX + "$KeyGeneratorT224"); 190 // addHMACAlgorithm(provider, "SHA512/256", PREFIX + "$HashMacT256", PREFIX + "$KeyGeneratorT256"); 191 // END android-removed 192 } 193 } 194 195 } 196