116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.operator.bc; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.Collections; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.HashMap; 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.Map; 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// BEGIN android-removed 8c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// END android-removed 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x509.AlgorithmIdentifier; 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.ExtendedDigest; 16c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// BEGIN android-removed 17c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.GOST3411Digest; 18c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.MD2Digest; 19c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.MD4Digest; 20c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// END android-removed 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.MD5Digest; 22c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// BEGIN android-removed 23c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 24c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 25c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// import org.bouncycastle.crypto.digests.RIPEMD256Digest; 26c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// END android-removed 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.SHA1Digest; 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.SHA224Digest; 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.SHA256Digest; 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.SHA384Digest; 317dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro// BEGIN android-removed 327dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro// import org.bouncycastle.crypto.digests.SHA3Digest; 337dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro// END android-removed 3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.digests.SHA512Digest; 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.operator.OperatorCreationException; 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class BcDefaultDigestProvider 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro implements BcDigestProvider 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static final Map lookup = createTable(); 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static Map createTable() 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Map table = new HashMap(); 4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro table.put(OIWObjectIdentifiers.idSHA1, new BcDigestProvider() 4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new SHA1Digest(); 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro }); 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro table.put(NISTObjectIdentifiers.id_sha224, new BcDigestProvider() 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new SHA224Digest(); 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro }); 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro table.put(NISTObjectIdentifiers.id_sha256, new BcDigestProvider() 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new SHA256Digest(); 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro }); 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro table.put(NISTObjectIdentifiers.id_sha384, new BcDigestProvider() 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new SHA384Digest(); 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro }); 7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro table.put(NISTObjectIdentifiers.id_sha512, new BcDigestProvider() 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new SHA512Digest(); 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro }); 81c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // BEGIN android-removed 827dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // table.put(NISTObjectIdentifiers.id_sha3_224, new BcDigestProvider() 837dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 847dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 857dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 867dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // return new SHA3Digest(224); 877dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // } 887dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // }); 897dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // table.put(NISTObjectIdentifiers.id_sha3_256, new BcDigestProvider() 907dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 917dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 927dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 937dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // return new SHA3Digest(256); 947dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // } 957dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // }); 967dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // table.put(NISTObjectIdentifiers.id_sha3_384, new BcDigestProvider() 977dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 987dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 997dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 1007dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // return new SHA3Digest(384); 1017dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // } 1027dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // }); 1037dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // table.put(NISTObjectIdentifiers.id_sha3_512, new BcDigestProvider() 1047dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 1057dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 1067dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 1077dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // return new SHA3Digest(512); 1087dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // } 1097dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // }); 1107dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // table.put(PKCSObjectIdentifiers.md5, new BcDigestProvider() 1117dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 1127dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 1137dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // { 1147dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // return new MD5Digest(); 1157dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // } 1167dad97b63c47edea4e3afb374dcd00c7b7a1bdd4Sergio Giro // }); 117c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(PKCSObjectIdentifiers.md4, new BcDigestProvider() 118c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 119c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 120c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 121c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new MD4Digest(); 122c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 123c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 124c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(PKCSObjectIdentifiers.md2, new BcDigestProvider() 125c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 126c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 127c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 128c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new MD2Digest(); 129c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 130c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 131c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(CryptoProObjectIdentifiers.gostR3411, new BcDigestProvider() 132c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 133c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 134c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 135c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new GOST3411Digest(); 136c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 137c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 138c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(TeleTrusTObjectIdentifiers.ripemd128, new BcDigestProvider() 139c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 140c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 141c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 142c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new RIPEMD128Digest(); 143c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 144c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 145c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(TeleTrusTObjectIdentifiers.ripemd160, new BcDigestProvider() 146c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 147c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 148c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 149c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new RIPEMD160Digest(); 150c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 151c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 152c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // table.put(TeleTrusTObjectIdentifiers.ripemd256, new BcDigestProvider() 153c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 154c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 155c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // { 156c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // return new RIPEMD256Digest(); 157c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // } 158c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // }); 159c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // END android-removed 16016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return Collections.unmodifiableMap(table); 16216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 16316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static final BcDigestProvider INSTANCE = new BcDefaultDigestProvider(); 16516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private BcDefaultDigestProvider() 16716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 16816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 17016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 17116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ExtendedDigest get(AlgorithmIdentifier digestAlgorithmIdentifier) 17216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throws OperatorCreationException 17316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BcDigestProvider extProv = (BcDigestProvider)lookup.get(digestAlgorithmIdentifier.getAlgorithm()); 17516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 17616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (extProv == null) 17716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new OperatorCreationException("cannot recognise digest"); 17916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return extProv.get(digestAlgorithmIdentifier); 18216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 184