001: package org.bouncycastle.jce.provider;
002:
003: import java.util.HashMap;
004: import java.util.HashSet;
005: import java.util.Map;
006: import java.util.Set;
007:
008: import org.bouncycastle.asn1.DERObjectIdentifier;
009: import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
010: import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
011: import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
012: import org.bouncycastle.crypto.Digest;
013: import org.bouncycastle.crypto.digests.MD5Digest;
014: import org.bouncycastle.crypto.digests.SHA1Digest;
015: import org.bouncycastle.crypto.digests.SHA224Digest;
016: import org.bouncycastle.crypto.digests.SHA256Digest;
017: import org.bouncycastle.crypto.digests.SHA384Digest;
018: import org.bouncycastle.crypto.digests.SHA512Digest;
019: import org.bouncycastle.util.Strings;
020:
021: class JCEDigestUtil {
022: private static Set md5 = new HashSet();
023: private static Set sha1 = new HashSet();
024: private static Set sha224 = new HashSet();
025: private static Set sha256 = new HashSet();
026: private static Set sha384 = new HashSet();
027: private static Set sha512 = new HashSet();
028:
029: private static Map oids = new HashMap();
030:
031: static {
032: md5.add("MD5");
033: md5.add(PKCSObjectIdentifiers.md5.getId());
034:
035: sha1.add("SHA1");
036: sha1.add("SHA-1");
037: sha1.add(OIWObjectIdentifiers.idSHA1.getId());
038:
039: sha224.add("SHA224");
040: sha224.add("SHA-224");
041: sha224.add(NISTObjectIdentifiers.id_sha224.getId());
042:
043: sha256.add("SHA256");
044: sha256.add("SHA-256");
045: sha256.add(NISTObjectIdentifiers.id_sha256.getId());
046:
047: sha384.add("SHA384");
048: sha384.add("SHA-384");
049: sha384.add(NISTObjectIdentifiers.id_sha384.getId());
050:
051: sha512.add("SHA512");
052: sha512.add("SHA-512");
053: sha512.add(NISTObjectIdentifiers.id_sha512.getId());
054:
055: oids.put("MD5", PKCSObjectIdentifiers.md5);
056: oids.put(PKCSObjectIdentifiers.md5.getId(),
057: PKCSObjectIdentifiers.md5);
058:
059: oids.put("SHA1", OIWObjectIdentifiers.idSHA1);
060: oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
061: oids.put(OIWObjectIdentifiers.idSHA1.getId(),
062: OIWObjectIdentifiers.idSHA1);
063:
064: oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
065: oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
066: oids.put(NISTObjectIdentifiers.id_sha224.getId(),
067: NISTObjectIdentifiers.id_sha224);
068:
069: oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
070: oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
071: oids.put(NISTObjectIdentifiers.id_sha256.getId(),
072: NISTObjectIdentifiers.id_sha256);
073:
074: oids.put("SHA384", NISTObjectIdentifiers.id_sha384);
075: oids.put("SHA-384", NISTObjectIdentifiers.id_sha384);
076: oids.put(NISTObjectIdentifiers.id_sha384.getId(),
077: NISTObjectIdentifiers.id_sha384);
078:
079: oids.put("SHA512", NISTObjectIdentifiers.id_sha512);
080: oids.put("SHA-512", NISTObjectIdentifiers.id_sha512);
081: oids.put(NISTObjectIdentifiers.id_sha512.getId(),
082: NISTObjectIdentifiers.id_sha512);
083: }
084:
085: static Digest getDigest(String digestName) {
086: digestName = Strings.toUpperCase(digestName);
087:
088: if (sha1.contains(digestName)) {
089: return new SHA1Digest();
090: }
091: if (md5.contains(digestName)) {
092: return new MD5Digest();
093: }
094: if (sha224.contains(digestName)) {
095: return new SHA224Digest();
096: }
097: if (sha256.contains(digestName)) {
098: return new SHA256Digest();
099: }
100: if (sha384.contains(digestName)) {
101: return new SHA384Digest();
102: }
103: if (sha512.contains(digestName)) {
104: return new SHA512Digest();
105: }
106:
107: return null;
108: }
109:
110: static boolean isSameDigest(String digest1, String digest2) {
111: return (sha1.contains(digest1) && sha1.contains(digest2))
112: || (sha224.contains(digest1) && sha224
113: .contains(digest2))
114: || (sha256.contains(digest1) && sha256
115: .contains(digest2))
116: || (sha384.contains(digest1) && sha384
117: .contains(digest2))
118: || (sha512.contains(digest1) && sha512
119: .contains(digest2))
120: || (md5.contains(digest1) && md5.contains(digest2));
121: }
122:
123: static DERObjectIdentifier getOID(String digestName) {
124: return (DERObjectIdentifier) oids.get(digestName);
125: }
126: }
|