Home | History | Annotate | Download | only in util
      1 package org.bouncycastle.jcajce.provider.util;
      2 
      3 import java.util.HashMap;
      4 import java.util.HashSet;
      5 import java.util.Map;
      6 import java.util.Set;
      7 
      8 import org.bouncycastle.asn1.ASN1ObjectIdentifier;
      9 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
     10 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
     11 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
     12 import org.bouncycastle.crypto.Digest;
     13 // BEGIN Android-added: Use Android digests
     14 import org.bouncycastle.crypto.digests.AndroidDigestFactory;
     15 // END Android-added: Use Android digests
     16 import org.bouncycastle.util.Strings;
     17 
     18 public class DigestFactory
     19 {
     20     private static Set md5 = new HashSet();
     21     private static Set sha1 = new HashSet();
     22     private static Set sha224 = new HashSet();
     23     private static Set sha256 = new HashSet();
     24     private static Set sha384 = new HashSet();
     25     private static Set sha512 = new HashSet();
     26     // BEGIN Android-removed: Unsupported algorithms
     27     /*
     28     private static Set sha512_224 = new HashSet();
     29     private static Set sha512_256 = new HashSet();
     30     private static Set sha3_224 = new HashSet();
     31     private static Set sha3_256 = new HashSet();
     32     private static Set sha3_384 = new HashSet();
     33     private static Set sha3_512 = new HashSet();
     34     */
     35     // END Android-removed: Unsupported algorithms
     36 
     37     private static Map oids = new HashMap();
     38 
     39     static
     40     {
     41         md5.add("MD5");
     42         md5.add(PKCSObjectIdentifiers.md5.getId());
     43 
     44         sha1.add("SHA1");
     45         sha1.add("SHA-1");
     46         sha1.add(OIWObjectIdentifiers.idSHA1.getId());
     47 
     48         sha224.add("SHA224");
     49         sha224.add("SHA-224");
     50         sha224.add(NISTObjectIdentifiers.id_sha224.getId());
     51 
     52         sha256.add("SHA256");
     53         sha256.add("SHA-256");
     54         sha256.add(NISTObjectIdentifiers.id_sha256.getId());
     55 
     56         sha384.add("SHA384");
     57         sha384.add("SHA-384");
     58         sha384.add(NISTObjectIdentifiers.id_sha384.getId());
     59 
     60         sha512.add("SHA512");
     61         sha512.add("SHA-512");
     62         sha512.add(NISTObjectIdentifiers.id_sha512.getId());
     63 
     64         // BEGIN Android-removed: Unsupported algorithms
     65         /*
     66         sha512_224.add("SHA512(224)");
     67         sha512_224.add("SHA-512(224)");
     68         sha512_224.add(NISTObjectIdentifiers.id_sha512_224.getId());
     69 
     70         sha512_256.add("SHA512(256)");
     71         sha512_256.add("SHA-512(256)");
     72         sha512_256.add(NISTObjectIdentifiers.id_sha512_256.getId());
     73 
     74         sha3_224.add("SHA3-224");
     75         sha3_224.add(NISTObjectIdentifiers.id_sha3_224.getId());
     76 
     77         sha3_256.add("SHA3-256");
     78         sha3_256.add(NISTObjectIdentifiers.id_sha3_256.getId());
     79 
     80         sha3_384.add("SHA3-384");
     81         sha3_384.add(NISTObjectIdentifiers.id_sha3_384.getId());
     82 
     83         sha3_512.add("SHA3-512");
     84         sha3_512.add(NISTObjectIdentifiers.id_sha3_512.getId());
     85         */
     86         // END Android-removed: Unsupported algorithms
     87 
     88 
     89         oids.put("MD5", PKCSObjectIdentifiers.md5);
     90         oids.put(PKCSObjectIdentifiers.md5.getId(), PKCSObjectIdentifiers.md5);
     91 
     92         oids.put("SHA1", OIWObjectIdentifiers.idSHA1);
     93         oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
     94         oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1);
     95 
     96         oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
     97         oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
     98         oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
     99 
    100         oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
    101         oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
    102         oids.put(NISTObjectIdentifiers.id_sha256.getId(), NISTObjectIdentifiers.id_sha256);
    103 
    104         oids.put("SHA384", NISTObjectIdentifiers.id_sha384);
    105         oids.put("SHA-384", NISTObjectIdentifiers.id_sha384);
    106         oids.put(NISTObjectIdentifiers.id_sha384.getId(), NISTObjectIdentifiers.id_sha384);
    107 
    108         oids.put("SHA512", NISTObjectIdentifiers.id_sha512);
    109         oids.put("SHA-512", NISTObjectIdentifiers.id_sha512);
    110         oids.put(NISTObjectIdentifiers.id_sha512.getId(), NISTObjectIdentifiers.id_sha512);
    111 
    112         oids.put("SHA512(224)", NISTObjectIdentifiers.id_sha512_224);
    113         oids.put("SHA-512(224)", NISTObjectIdentifiers.id_sha512_224);
    114         oids.put(NISTObjectIdentifiers.id_sha512_224.getId(), NISTObjectIdentifiers.id_sha512_224);
    115 
    116         oids.put("SHA512(256)", NISTObjectIdentifiers.id_sha512_256);
    117         oids.put("SHA-512(256)", NISTObjectIdentifiers.id_sha512_256);
    118         oids.put(NISTObjectIdentifiers.id_sha512_256.getId(), NISTObjectIdentifiers.id_sha512_256);
    119 
    120         oids.put("SHA3-224", NISTObjectIdentifiers.id_sha3_224);
    121         oids.put(NISTObjectIdentifiers.id_sha3_224.getId(), NISTObjectIdentifiers.id_sha3_224);
    122 
    123         oids.put("SHA3-256", NISTObjectIdentifiers.id_sha3_256);
    124         oids.put(NISTObjectIdentifiers.id_sha3_256.getId(), NISTObjectIdentifiers.id_sha3_256);
    125 
    126         oids.put("SHA3-384", NISTObjectIdentifiers.id_sha3_384);
    127         oids.put(NISTObjectIdentifiers.id_sha3_384.getId(), NISTObjectIdentifiers.id_sha3_384);
    128 
    129         oids.put("SHA3-512", NISTObjectIdentifiers.id_sha3_512);
    130         oids.put(NISTObjectIdentifiers.id_sha3_512.getId(), NISTObjectIdentifiers.id_sha3_512);
    131     }
    132 
    133     public static Digest getDigest(
    134         String digestName)
    135     {
    136         digestName = Strings.toUpperCase(digestName);
    137 
    138         if (sha1.contains(digestName))
    139         {
    140             // Android-changed: Use Android digests
    141             // return org.bouncycastle.crypto.util.DigestFactory.createSHA1();
    142             return AndroidDigestFactory.getSHA1();
    143         }
    144         if (md5.contains(digestName))
    145         {
    146             // Android-changed: Use Android digests
    147             // return org.bouncycastle.crypto.util.DigestFactory.createMD5();
    148             return AndroidDigestFactory.getMD5();
    149         }
    150         if (sha224.contains(digestName))
    151         {
    152             // Android-changed: Use Android digests
    153             // return org.bouncycastle.crypto.util.DigestFactory.createSHA224();
    154             return AndroidDigestFactory.getSHA224();
    155         }
    156         if (sha256.contains(digestName))
    157         {
    158             // Android-changed: Use Android digests
    159             // return org.bouncycastle.crypto.util.DigestFactory.createSHA256();
    160             return AndroidDigestFactory.getSHA256();
    161         }
    162         if (sha384.contains(digestName))
    163         {
    164             // Android-changed: Use Android digests
    165             // return org.bouncycastle.crypto.util.DigestFactory.createSHA384();
    166             return AndroidDigestFactory.getSHA384();
    167         }
    168         if (sha512.contains(digestName))
    169         {
    170             // Android-changed: Use Android digests
    171             // return org.bouncycastle.crypto.util.DigestFactory.createSHA512();
    172             return AndroidDigestFactory.getSHA512();
    173         }
    174         // BEGIN Android-removed: Unsupported algorithms
    175         /*
    176         if (sha512_224.contains(digestName))
    177         {
    178             return org.bouncycastle.crypto.util.DigestFactory.createSHA512_224();
    179         }
    180         if (sha512_256.contains(digestName))
    181         {
    182             return org.bouncycastle.crypto.util.DigestFactory.createSHA512_256();
    183         }
    184 
    185         if (sha3_224.contains(digestName))
    186         {
    187             return org.bouncycastle.crypto.util.DigestFactory.createSHA3_224();
    188         }
    189         if (sha3_256.contains(digestName))
    190         {
    191             return org.bouncycastle.crypto.util.DigestFactory.createSHA3_256();
    192         }
    193         if (sha3_384.contains(digestName))
    194         {
    195             return org.bouncycastle.crypto.util.DigestFactory.createSHA3_384();
    196         }
    197         if (sha3_512.contains(digestName))
    198         {
    199             return org.bouncycastle.crypto.util.DigestFactory.createSHA3_512();
    200         }
    201         */
    202         // END Android-removed: Unsupported algorithms
    203 
    204         return null;
    205     }
    206 
    207     public static boolean isSameDigest(
    208         String digest1,
    209         String digest2)
    210     {
    211         return (sha1.contains(digest1) && sha1.contains(digest2))
    212             || (sha224.contains(digest1) && sha224.contains(digest2))
    213             || (sha256.contains(digest1) && sha256.contains(digest2))
    214             || (sha384.contains(digest1) && sha384.contains(digest2))
    215             || (sha512.contains(digest1) && sha512.contains(digest2))
    216             // BEGIN Android-removed: Unsupported algorithms
    217             /*
    218             || (sha512_224.contains(digest1) && sha512_224.contains(digest2))
    219             || (sha512_256.contains(digest1) && sha512_256.contains(digest2))
    220             || (sha3_224.contains(digest1) && sha3_224.contains(digest2))
    221             || (sha3_256.contains(digest1) && sha3_256.contains(digest2))
    222             || (sha3_384.contains(digest1) && sha3_384.contains(digest2))
    223             || (sha3_512.contains(digest1) && sha3_512.contains(digest2))
    224             */
    225             // END Android-removed: Unsupported algorithms
    226             || (md5.contains(digest1) && md5.contains(digest2));
    227     }
    228 
    229     public static ASN1ObjectIdentifier getOID(
    230         String digestName)
    231     {
    232         return (ASN1ObjectIdentifier)oids.get(digestName);
    233     }
    234 }
    235