1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vladimir N. Molotkov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.utils; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap; 28a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilsonimport java.util.Locale; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map.Entry; 317365de1056414750d0a7d1fdd26025fd247f0d04Jesse Wilsonimport java.util.Set; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ObjectIdentifier; 336243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Rootimport org.apache.harmony.security.fortress.Services; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 362f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * Provides Algorithm Name to OID and OID to Algorithm Name mappings. Some known 372f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * mappings are hardcoded. Tries to obtain additional mappings from installed 382f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * providers during initialization. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class AlgNameMapper { 41b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root private static AlgNameMapperSource source = null; 42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 436243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root private static volatile int cacheVersion = -1; 446243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Will search OID mappings for these services 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] serviceName = { 47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "Cipher", 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "AlgorithmParameters", 49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "Signature" 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // These mappings CAN NOT be overridden 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // by the ones from available providers 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // during maps initialization 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // (source: http://asn1.elibel.tm.fr): 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[][] knownAlgMappings = { 57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.10040.4.1", "DSA"}, 58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.10040.4.3", "SHA1withDSA"}, 59f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.1.1", "RSA"}, 6087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob // BEGIN android-removed 6187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob // Dropping MD2 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // {"1.2.840.113549.1.1.2", "MD2withRSA"}, 6387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob // END android-removed 64f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.1.4", "MD5withRSA"}, 65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.1.5", "SHA1withRSA"}, 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.3.1", "DiffieHellman"}, 67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.5.3", "pbeWithMD5AndDES-CBC"}, 68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.12.1.3", "pbeWithSHAAnd3-KeyTripleDES-CBC"}, 69f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.1.12.1.6", "pbeWithSHAAnd40BitRC2-CBC"}, 70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.2", "RC2-CBC"}, 71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.3", "RC2-EBC"}, 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.4", "RC4"}, 73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.5", "RC4WithMAC"}, 74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.6", "DESx-CBC"}, 75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.7", "TripleDES-CBC"}, 76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.8", "rc5CBC"}, 77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.9", "RC5-CBC"}, 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"1.2.840.113549.3.10", "DESCDMF"}, 79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"2.23.42.9.11.4.1", "ECDSA"}, 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Maps alg name to OID 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final Map<String, String> alg2OidMap = new HashMap<String, String>(); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Maps OID to alg name 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final Map<String, String> oid2AlgMap = new HashMap<String, String>(); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Maps aliases to alg names 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final Map<String, String> algAliasesMap = new HashMap<String, String>(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (String[] element : knownAlgMappings) { 90a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson String algUC = element[1].toUpperCase(Locale.US); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project alg2OidMap.put(algUC, element[0]); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project oid2AlgMap.put(element[0], algUC); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // map upper case alg name to its original name 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project algAliasesMap.put(algUC, element[1]); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // No instances 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private AlgNameMapper() { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1026243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root private static synchronized void checkCacheVersion() { 1036243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root int newCacheVersion = Services.getCacheVersion(); 1046243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root if (newCacheVersion != cacheVersion) { 1056243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // 1066243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // Now search providers for mappings like 1076243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // Alg.Alias.<service>.<OID-INTS-DOT-SEPARATED>=<alg-name> 1086243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // or 1096243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // Alg.Alias.<service>.OID.<OID-INTS-DOT-SEPARATED>=<alg-name> 1106243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root // 1116243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root Provider[] pl = Security.getProviders(); 1126243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root for (Provider element : pl) { 1136243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root selectEntries(element); 1146243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root } 1156243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root cacheVersion = newCacheVersion; 1166243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root } 1176243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root } 1186243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns OID for algName 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algName algorithm name to be mapped 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return OID as String 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String map2OID(String algName) { 1266243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root checkCacheVersion(); 1276243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // alg2OidMap map contains upper case keys 129b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root String result = alg2OidMap.get(algName.toUpperCase(Locale.US)); 130b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root if (result != null) { 131b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root return result; 132b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root } 133b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root 134b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root // Check our external source. 135b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root AlgNameMapperSource s = source; 136b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root if (s != null) { 137b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root return s.mapNameToOid(algName); 138b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root } 139b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root 140b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root return null; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns algName for OID 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param oid OID to be mapped 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return algorithm name 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String map2AlgName(String oid) { 1506243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root checkCacheVersion(); 1516243428ca4ba6d9d767070bbe2d5c480bbcd0669Kenny Root 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // oid2AlgMap map contains upper case values 153b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root String algUC = oid2AlgMap.get(oid); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if not null there is always map UC->Orig 1554a8388aeb988c5ed88f1105f9fa66a5ebd2ffbe3Kenny Root if (algUC != null) { 1564a8388aeb988c5ed88f1105f9fa66a5ebd2ffbe3Kenny Root return algAliasesMap.get(algUC); 1574a8388aeb988c5ed88f1105f9fa66a5ebd2ffbe3Kenny Root } 158b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root 159b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root // Check our external source. 160b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root AlgNameMapperSource s = source; 161b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root if (s != null) { 162b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root return s.mapOidToName(oid); 163b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root } 164b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root 16538375a4d0b3d34e2babbd2f6a013976c7c439696Kenny Root return null; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns Algorithm name for given algorithm alias 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algName - alias 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return algorithm name 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String getStandardName(String algName) { 175a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson return algAliasesMap.get(algName.toUpperCase(Locale.US)); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Searches given provider for mappings like 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Alg.Alias.<service>.<OID-INTS-DOT-SEPARATED>=<alg-name> 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // or 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Alg.Alias.<service>.OID.<OID-INTS-DOT-SEPARATED>=<alg-name> 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Puts mappings found into appropriate internal maps 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static void selectEntries(Provider p) { 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Set<Map.Entry<Object, Object>> entrySet = p.entrySet(); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (String service : serviceName) { 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String keyPrfix2find = "Alg.Alias." + service + "."; 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Entry<Object, Object> me : entrySet) { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String key = (String)me.getKey(); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (key.startsWith(keyPrfix2find)) { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String alias = key.substring(keyPrfix2find.length()); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String alg = (String)me.getValue(); 192a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson String algUC = alg.toUpperCase(Locale.US); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOID(alias)) { 194f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (alias.startsWith("OID.")) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project alias = alias.substring(4); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do not overwrite already known mappings 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean oid2AlgContains = oid2AlgMap.containsKey(alias); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean alg2OidContains = alg2OidMap.containsKey(algUC); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!oid2AlgContains || !alg2OidContains) { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!oid2AlgContains) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project oid2AlgMap.put(alias, algUC); 203f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!alg2OidContains) { 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project alg2OidMap.put(algUC, alias); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // map upper case alg name to its original name 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project algAliasesMap.put(algUC, alg); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do not override known standard names 211a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson } else if (!algAliasesMap.containsKey(alias.toUpperCase(Locale.US))) { 212a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson algAliasesMap.put(alias.toUpperCase(Locale.US), alg); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Checks if parameter represents OID 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param alias alias to be checked 223f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @return 'true' if parameter represents OID 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean isOID(String alias) { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ObjectIdentifier.isOID(normalize(alias)); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes leading "OID." from oid String passed 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param oid string that may contain leading "OID." 233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @return string passed without leading "OID." 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String normalize(String oid) { 236f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return oid.startsWith("OID.") 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ? oid.substring(4) 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : oid; 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 240b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root 241b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root public static void setSource(AlgNameMapperSource source) { 242b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root AlgNameMapper.source = source; 243b6963ac272834ec5f791ecdc773d17cb156e23f0Kenny Root } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 245