@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "newInstance", args = {java.lang.Object.class}) public void testNewInstance() throws Exception { Provider p = new MyProvider(); Provider.Service s = new Provider.Service( p, "SecureRandom", "algorithm", "org.apache.harmony.security.tests.support.RandomImpl", null, null); Object o = s.newInstance(null); assertTrue("incorrect instance", o instanceof RandomImpl); try { o = s.newInstance(new Object()); fail("No expected NoSuchAlgorithmException"); } catch (NoSuchAlgorithmException e) { } }
// NOTE: none (at least for BC 1.47) private static String getSecureRandomAlgorithm(final Provider provider) { for (Provider.Service service : provider.getServices()) { if ("SecureRandom".equals(service.getType())) { return service.getAlgorithm(); } } return null; }
@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "supportsParameter", args = {java.lang.Object.class}) public void testSupportsParameter() { Provider p = new MyProvider(); Provider.Service s1 = new Provider.Service(p, "type", "algorithm", "className", null, null); assertTrue(s1.supportsParameter(null)); assertTrue(s1.supportsParameter(new Object())); }
/** * Get a password factory instance. The returned password factory object will implement the given * algorithm. * * @param algorithm the name of the algorithm * @param providerSupplier the provider supplier to search * @return a password factory instance * @throws NoSuchAlgorithmException if the given algorithm has no available implementations */ public static PasswordFactory getInstance(String algorithm, Supplier<Provider[]> providerSupplier) throws NoSuchAlgorithmException { for (Provider provider : providerSupplier.get()) { final Provider.Service service = provider.getService("PasswordFactory", algorithm); if (service != null) { return new PasswordFactory( (PasswordFactorySpi) service.newInstance(null), provider, algorithm); } } throw log.noSuchAlgorithmInvalidAlgorithm(algorithm); }
@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "toString", args = {}) public void testToString() { Provider p = new MyProvider(); Provider.Service s1 = new Provider.Service(p, "type", "algorithm", "className", null, null); s1.toString(); Provider.Service s2 = new Provider.Service( p, "SecureRandom", "algorithm", "tests.java.security.support.RandomImpl", null, null); s2.toString(); }
@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "getType", args = {}) public void testGetType() { Provider p = new MyProvider(); Provider.Service s1 = new Provider.Service(p, "type", "algorithm", "className", null, null); assertTrue(s1.getType().equals("type")); Provider.Service s2 = new Provider.Service( p, "SecureRandom", "algorithm", "tests.java.security.support.RandomImpl", null, null); assertTrue(s2.getType().equals("SecureRandom")); }
void initiateProviderKeyStore(Provider provider) throws Exception { String prov = null; for (Provider.Service ps : provider.getServices()) { if (ps.getType().equals("KeyStore")) { prov = ps.getAlgorithm(); } } Security.addProvider(provider); KeyStore ks = KeyStore.getInstance(prov, provider); ks.load( CMD_keystore.found ? new FileInputStream(CMD_keystore.getString()) : null, CMD_keypass.found ? CMD_keypass.getString().toCharArray() : null); wrap.setKeyStore(ks, CMD_keypass.getString()); CMD_keystore.found = false; }
private static MessageDigest findAlternativeMessageDigest() { if ("MD5".equals(hashAlgorithm)) { for (Provider provider : Security.getProviders()) { for (Provider.Service service : provider.getServices()) { hashAlgorithm = service.getAlgorithm(); try { MessageDigest messageDigest = MessageDigest.getInstance(hashAlgorithm); if (messageDigest != null) return messageDigest; } catch (NoSuchAlgorithmException ignored) { } } } } return null; }
private String[] getAvailableBuiltInDigestAlgorithmNames() { Set<String> algorithmsSet = new HashSet<String>(); Provider[] providers = Security.getProviders(); for (Provider provider : providers) { Set<Provider.Service> services = provider.getServices(); for (Provider.Service service : services) { if (service.getType() == "MessageDigest") { algorithmsSet.add(service.getAlgorithm()); } } } // For some reason my Java implementation gives SHA1 two names, so we will remove one. if (algorithmsSet.contains("SHA") && algorithmsSet.contains("SHA1")) { algorithmsSet.remove("SHA"); } return algorithmsSet.toArray(new String[algorithmsSet.size()]); }
@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "getAttribute", args = {java.lang.String.class}) public void testGetAttribute() { Provider p = new MyProvider(); Provider.Service s = new Provider.Service(p, "type", "algorithm", "className", null, null); try { s.getAttribute(null); fail("No expected NullPointerException"); } catch (NullPointerException e) { } if (s.getAttribute("aaa") != null) { fail("getAttribute(aaa) failed"); } HashMap<String, String> hm = new HashMap<String, String>(); hm.put("attribute", "value"); hm.put("KeySize", "1024"); hm.put("AAA", "BBB"); s = new Provider.Service(p, "type", "algorithm", "className", null, hm); if (s.getAttribute("bbb") != null) { fail("getAttribute(bbb) failed"); } if (!s.getAttribute("attribute").equals("value")) { fail("getAttribute(attribute) failed"); } if (!s.getAttribute("KeySize").equals("1024")) { fail("getAttribute(KeySize) failed"); } }
@TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "Service", args = { java.security.Provider.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.util.List.class, java.util.Map.class }) public void testService() { Provider p = new MyProvider(); try { new Provider.Service(null, "type", "algorithm", "className", null, null); fail("provider is null: No expected NullPointerException"); } catch (NullPointerException e) { } try { new Provider.Service(p, null, "algorithm", "className", null, null); fail("type is null: No expected NullPointerException"); } catch (NullPointerException e) { } try { new Provider.Service(p, "type", null, "className", null, null); fail("algorithm is null: No expected NullPointerException"); } catch (NullPointerException e) { } try { new Provider.Service(p, "type", "algorithm", null, null, null); fail("className is null: No expected NullPointerException"); } catch (NullPointerException e) { } Provider.Service s = new Provider.Service(p, "type", "algorithm", "className", null, null); if (!s.getType().equals("type")) { fail("getType() failed"); } if (!s.getAlgorithm().equals("algorithm")) { fail("getAlgorithm() failed"); } if (s.getProvider() != p) { fail("getProvider() failed"); } if (!s.getClassName().equals("className")) { fail("getClassName() failed"); } if (!s.supportsParameter(new Object())) { fail("supportsParameter() failed"); } }
/** * Makes sure all all expected implementations (but not aliases) and that there are no extras, * according to what we expect from StandardNames */ public void test_Provider_getServices() throws Exception { // build set of expected algorithms Map<String, Set<String>> remaining = new HashMap<String, Set<String>>(StandardNames.PROVIDER_ALGORITHMS); for (Entry<String, Set<String>> entry : remaining.entrySet()) { entry.setValue(new HashSet<String>(entry.getValue())); } List<String> extra = new ArrayList(); List<String> missing = new ArrayList(); Provider[] providers = Security.getProviders(); for (Provider provider : providers) { String providerName = provider.getName(); // ignore BouncyCastle provider if it is installed on the RI if (StandardNames.IS_RI && providerName.equals("BC")) { continue; } Set<Provider.Service> services = provider.getServices(); assertNotNull(services); assertFalse(services.isEmpty()); for (Provider.Service service : services) { String type = service.getType(); String algorithm = service.getAlgorithm().toUpperCase(); String className = service.getClassName(); if (false) { System.out.println(providerName + " " + type + " " + algorithm + " " + className); } // remove from remaining, assert unknown if missing Set<String> algorithms = remaining.get(type); if (algorithms == null || !algorithms.remove(algorithm)) { // seems to be missing, but sometimes the same // algorithm is available from multiple providers // (e.g. KeyFactory RSA is available from // SunRsaSign and SunJSSE), so double check in // original source before giving error if (!(StandardNames.PROVIDER_ALGORITHMS.containsKey(type) && StandardNames.PROVIDER_ALGORITHMS.get(type).contains(algorithm))) { extra.add("Unknown " + type + " " + algorithm + " " + providerName + "\n"); } } if (algorithms != null && algorithms.isEmpty()) { remaining.remove(type); } // make sure class exists and can be initialized try { assertNotNull(Class.forName(className, true, provider.getClass().getClassLoader())); } catch (ClassNotFoundException e) { // Sun forgot their own class if (!className.equals("sun.security.pkcs11.P11MAC")) { missing.add(className); } } } } // assert that we don't have any extra in the implementation Collections.sort(extra); // sort so that its grouped by type assertEquals("Extra algorithms", Collections.EMPTY_LIST, extra); // assert that we don't have any missing in the implementation assertEquals("Missing algorithms", Collections.EMPTY_MAP, remaining); // assert that we don't have any missing classes Collections.sort(missing); // sort it for readability assertEquals("Missing classes", Collections.EMPTY_LIST, missing); }
/** * Get a password factory instance. The returned password factory object will implement the given * algorithm. * * @param algorithm the name of the algorithm * @param provider the provider to use * @return a password factory instance * @throws NoSuchAlgorithmException if the given algorithm has no available implementations */ public static PasswordFactory getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException { final Provider.Service service = provider.getService("PasswordFactory", algorithm); if (service == null) throw log.noSuchAlgorithmInvalidAlgorithm(algorithm); return new PasswordFactory((PasswordFactorySpi) service.newInstance(null), provider, algorithm); }