/* * Verify that the provider JAR files are signed properly, which * means the signer's certificate can be traced back to a * JCE trusted CA. * Return null if ok, failure Exception if verification failed. */ static synchronized Exception getVerificationResult(Provider p) { Object o = verificationResults.get(p); if (o == PROVIDER_VERIFIED) { return null; } else if (o != null) { return (Exception) o; } if (verifyingProviders.get(p) != null) { // this method is static synchronized, must be recursion // return failure now but do not save the result return new NoSuchProviderException("Recursion during verification"); } try { verifyingProviders.put(p, Boolean.FALSE); URL providerURL = getCodeBase(p.getClass()); verifyProviderJar(providerURL); // Verified ok, cache result verificationResults.put(p, PROVIDER_VERIFIED); return null; } catch (Exception e) { verificationResults.put(p, e); return e; } finally { verifyingProviders.remove(p); } }
private static void checkProviderInfoEntries(Provider p) throws Exception { String value = (String) p.get("Provider.id name"); if (!SampleProvider.NAME.equalsIgnoreCase(value) || !p.getName().equalsIgnoreCase(value)) { throw new Exception("Test Failed: incorrect name!"); } value = (String) p.get("Provider.id info"); if (!SampleProvider.INFO.equalsIgnoreCase(value) || !p.getInfo().equalsIgnoreCase(value)) { throw new Exception("Test Failed: incorrect info!"); } value = (String) p.get("Provider.id className"); if (!p.getClass().getName().equalsIgnoreCase(value)) { throw new Exception("Test Failed: incorrect className!"); } double dvalue = Double.parseDouble((String) p.get("Provider.id version")); if ((SampleProvider.VERSION != dvalue) || p.getVersion() != dvalue) { throw new Exception("Test Failed: incorrect version!"); } System.out.println("Test Passed"); }