1package org.bouncycastle.jcajce.provider.util; 2 3import java.util.HashMap; 4import java.util.HashSet; 5import java.util.Map; 6import java.util.Set; 7 8import org.bouncycastle.asn1.ASN1ObjectIdentifier; 9import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 10import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 11import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 12import org.bouncycastle.crypto.Digest; 13// BEGIN android-removed 14// import org.bouncycastle.crypto.digests.MD5Digest; 15// import org.bouncycastle.crypto.digests.SHA1Digest; 16// import org.bouncycastle.crypto.digests.SHA224Digest; 17// import org.bouncycastle.crypto.digests.SHA256Digest; 18// import org.bouncycastle.crypto.digests.SHA384Digest; 19// import org.bouncycastle.crypto.digests.SHA512Digest; 20// END android-removed 21// BEGIN android-added 22import org.bouncycastle.crypto.digests.AndroidDigestFactory; 23// END android-added 24import org.bouncycastle.util.Strings; 25 26public class DigestFactory 27{ 28 private static Set md5 = new HashSet(); 29 private static Set sha1 = new HashSet(); 30 private static Set sha224 = new HashSet(); 31 private static Set sha256 = new HashSet(); 32 private static Set sha384 = new HashSet(); 33 private static Set sha512 = new HashSet(); 34 35 private static Map oids = new HashMap(); 36 37 static 38 { 39 md5.add("MD5"); 40 md5.add(PKCSObjectIdentifiers.md5.getId()); 41 42 sha1.add("SHA1"); 43 sha1.add("SHA-1"); 44 sha1.add(OIWObjectIdentifiers.idSHA1.getId()); 45 46 sha224.add("SHA224"); 47 sha224.add("SHA-224"); 48 sha224.add(NISTObjectIdentifiers.id_sha224.getId()); 49 50 sha256.add("SHA256"); 51 sha256.add("SHA-256"); 52 sha256.add(NISTObjectIdentifiers.id_sha256.getId()); 53 54 sha384.add("SHA384"); 55 sha384.add("SHA-384"); 56 sha384.add(NISTObjectIdentifiers.id_sha384.getId()); 57 58 sha512.add("SHA512"); 59 sha512.add("SHA-512"); 60 sha512.add(NISTObjectIdentifiers.id_sha512.getId()); 61 62 oids.put("MD5", PKCSObjectIdentifiers.md5); 63 oids.put(PKCSObjectIdentifiers.md5.getId(), PKCSObjectIdentifiers.md5); 64 65 oids.put("SHA1", OIWObjectIdentifiers.idSHA1); 66 oids.put("SHA-1", OIWObjectIdentifiers.idSHA1); 67 oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1); 68 69 oids.put("SHA224", NISTObjectIdentifiers.id_sha224); 70 oids.put("SHA-224", NISTObjectIdentifiers.id_sha224); 71 oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224); 72 73 oids.put("SHA256", NISTObjectIdentifiers.id_sha256); 74 oids.put("SHA-256", NISTObjectIdentifiers.id_sha256); 75 oids.put(NISTObjectIdentifiers.id_sha256.getId(), NISTObjectIdentifiers.id_sha256); 76 77 oids.put("SHA384", NISTObjectIdentifiers.id_sha384); 78 oids.put("SHA-384", NISTObjectIdentifiers.id_sha384); 79 oids.put(NISTObjectIdentifiers.id_sha384.getId(), NISTObjectIdentifiers.id_sha384); 80 81 oids.put("SHA512", NISTObjectIdentifiers.id_sha512); 82 oids.put("SHA-512", NISTObjectIdentifiers.id_sha512); 83 oids.put(NISTObjectIdentifiers.id_sha512.getId(), NISTObjectIdentifiers.id_sha512); 84 } 85 86 public static Digest getDigest( 87 String digestName) 88 { 89 digestName = Strings.toUpperCase(digestName); 90 91 if (sha1.contains(digestName)) 92 { 93 // BEGIN android-changed 94 return AndroidDigestFactory.getSHA1(); 95 // END android-changed 96 } 97 if (md5.contains(digestName)) 98 { 99 // BEGIN android-changed 100 return AndroidDigestFactory.getMD5(); 101 // END android-changed 102 } 103 if (sha224.contains(digestName)) 104 { 105 // BEGIN android-changed 106 return AndroidDigestFactory.getSHA224(); 107 // END android-changed 108 } 109 if (sha256.contains(digestName)) 110 { 111 // BEGIN android-changed 112 return AndroidDigestFactory.getSHA256(); 113 // END android-changed 114 } 115 if (sha384.contains(digestName)) 116 { 117 // BEGIN android-changed 118 return AndroidDigestFactory.getSHA384(); 119 // END android-changed 120 } 121 if (sha512.contains(digestName)) 122 { 123 // BEGIN android-changed 124 return AndroidDigestFactory.getSHA512(); 125 // END android-changed 126 } 127 128 return null; 129 } 130 131 public static boolean isSameDigest( 132 String digest1, 133 String digest2) 134 { 135 return (sha1.contains(digest1) && sha1.contains(digest2)) 136 || (sha224.contains(digest1) && sha224.contains(digest2)) 137 || (sha256.contains(digest1) && sha256.contains(digest2)) 138 || (sha384.contains(digest1) && sha384.contains(digest2)) 139 || (sha512.contains(digest1) && sha512.contains(digest2)) 140 || (md5.contains(digest1) && md5.contains(digest2)); 141 } 142 143 public static ASN1ObjectIdentifier getOID( 144 String digestName) 145 { 146 return (ASN1ObjectIdentifier)oids.get(digestName); 147 } 148} 149