Home | History | Annotate | Download | only in bc
      1 package org.bouncycastle.operator.bc;
      2 
      3 import java.util.Collections;
      4 import java.util.HashMap;
      5 import java.util.Map;
      6 
      7 // BEGIN android-removed
      8 // import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
      9 // END android-removed
     10 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
     11 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
     12 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
     13 import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
     14 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
     15 import org.bouncycastle.crypto.ExtendedDigest;
     16 // BEGIN android-removed
     17 // import org.bouncycastle.crypto.digests.GOST3411Digest;
     18 // import org.bouncycastle.crypto.digests.MD2Digest;
     19 // import org.bouncycastle.crypto.digests.MD4Digest;
     20 // END android-removed
     21 import org.bouncycastle.crypto.digests.MD5Digest;
     22 // BEGIN android-removed
     23 // import org.bouncycastle.crypto.digests.RIPEMD128Digest;
     24 // import org.bouncycastle.crypto.digests.RIPEMD160Digest;
     25 // import org.bouncycastle.crypto.digests.RIPEMD256Digest;
     26 // END android-removed
     27 import org.bouncycastle.crypto.digests.SHA1Digest;
     28 // BEGIN android-removed
     29 // import org.bouncycastle.crypto.digests.SHA224Digest;
     30 // END android-removed
     31 import org.bouncycastle.crypto.digests.SHA256Digest;
     32 import org.bouncycastle.crypto.digests.SHA384Digest;
     33 import org.bouncycastle.crypto.digests.SHA512Digest;
     34 import org.bouncycastle.operator.OperatorCreationException;
     35 
     36 public class BcDefaultDigestProvider
     37     implements BcDigestProvider
     38 {
     39     private static final Map lookup = createTable();
     40 
     41     private static Map createTable()
     42     {
     43         Map table = new HashMap();
     44 
     45         table.put(OIWObjectIdentifiers.idSHA1, new BcDigestProvider()
     46         {
     47             public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     48             {
     49                 return new SHA1Digest();
     50             }
     51         });
     52         // BEGIN android-removed
     53         // table.put(NISTObjectIdentifiers.id_sha224, new BcDigestProvider()
     54         // {
     55         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     56         //     {
     57         //         return new SHA224Digest();
     58         //     }
     59         // });
     60         // END android-removed
     61         table.put(NISTObjectIdentifiers.id_sha256, new BcDigestProvider()
     62         {
     63             public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     64             {
     65                 return new SHA256Digest();
     66             }
     67         });
     68         table.put(NISTObjectIdentifiers.id_sha384, new BcDigestProvider()
     69         {
     70             public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     71             {
     72                 return new SHA384Digest();
     73             }
     74         });
     75         table.put(NISTObjectIdentifiers.id_sha512, new BcDigestProvider()
     76         {
     77             public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     78             {
     79                 return new SHA512Digest();
     80             }
     81         });
     82         table.put(PKCSObjectIdentifiers.md5, new BcDigestProvider()
     83         {
     84             public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     85             {
     86                 return new MD5Digest();
     87             }
     88         });
     89         // BEGIN android-removed
     90         // table.put(PKCSObjectIdentifiers.md4, new BcDigestProvider()
     91         // {
     92         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
     93         //     {
     94         //         return new MD4Digest();
     95         //     }
     96         // });
     97         // table.put(PKCSObjectIdentifiers.md2, new BcDigestProvider()
     98         // {
     99         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    100         //     {
    101         //         return new MD2Digest();
    102         //     }
    103         // });
    104         // table.put(CryptoProObjectIdentifiers.gostR3411, new BcDigestProvider()
    105         // {
    106         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    107         //     {
    108         //         return new GOST3411Digest();
    109         //     }
    110         // });
    111         // table.put(TeleTrusTObjectIdentifiers.ripemd128, new BcDigestProvider()
    112         // {
    113         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    114         //     {
    115         //         return new RIPEMD128Digest();
    116         //     }
    117         // });
    118         // table.put(TeleTrusTObjectIdentifiers.ripemd160, new BcDigestProvider()
    119         // {
    120         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    121         //     {
    122         //         return new RIPEMD160Digest();
    123         //     }
    124         // });
    125         // table.put(TeleTrusTObjectIdentifiers.ripemd256, new BcDigestProvider()
    126         // {
    127         //     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    128         //     {
    129         //         return new RIPEMD256Digest();
    130         //     }
    131         // });
    132         // END android-removed
    133 
    134         return Collections.unmodifiableMap(table);
    135     }
    136 
    137     public static final BcDigestProvider INSTANCE = new BcDefaultDigestProvider();
    138 
    139     private BcDefaultDigestProvider()
    140     {
    141 
    142     }
    143 
    144     public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier)
    145         throws OperatorCreationException
    146     {
    147         BcDigestProvider extProv = (BcDigestProvider)lookup.get(digestAlgorithmIdentifier.getAlgorithm());
    148 
    149         if (extProv == null)
    150         {
    151             throw new OperatorCreationException("cannot recognise digest");
    152         }
    153 
    154         return extProv.get(digestAlgorithmIdentifier);
    155     }
    156 }
    157