1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.x509; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashSet; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Hashtable; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.x500.X500Principal; 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERNull; 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERObjectIdentifier; 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.x509.AlgorithmIdentifier; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.jce.X509Principal; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.util.Strings; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass X509Util 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static Hashtable algorithms = new Hashtable(); 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static Set noParams = new HashSet(); 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("MD2WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("MD2WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("MD5WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.4")); 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("MD5WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.4")); 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA1WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.5")); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA1WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.5")); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption); 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption); 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption); 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption); 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA384WITHRSA", PKCSObjectIdentifiers.sha384WithRSAEncryption); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("RIPEMD160WITHRSAENCRYPTION", new DERObjectIdentifier("1.3.36.3.3.1.2")); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("RIPEMD160WITHRSA", new DERObjectIdentifier("1.3.36.3.3.1.2")); 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-removed 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1); 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-removed 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // The parameters field SHALL be NULL for RSA based signature algorithms. 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-removed 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256); 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1); 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(NISTObjectIdentifiers.dsa_with_sha224); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // noParams.add(NISTObjectIdentifiers.dsa_with_sha256); 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-removed 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static DERObjectIdentifier getAlgorithmOID( 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String algorithmName) 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project algorithmName = Strings.toUpperCase(algorithmName); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (algorithms.containsKey(algorithmName)) 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (DERObjectIdentifier)algorithms.get(algorithmName); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new DERObjectIdentifier(algorithmName); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static AlgorithmIdentifier getSigAlgID( 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERObjectIdentifier sigOid) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (noParams.contains(sigOid)) 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new AlgorithmIdentifier(sigOid); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new AlgorithmIdentifier(sigOid, DERNull.THE_ONE); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static Iterator getAlgNames() 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Enumeration e = algorithms.keys(); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List l = new ArrayList(); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (e.hasMoreElements()) 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project l.add(e.nextElement()); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.iterator(); 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static X509Principal convertPrincipal( 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project X500Principal principal) 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new X509Principal(principal.getEncoded()); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (IOException e) 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException("cannot convert principal"); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 134