--- old/src/jdk.deploy.osx/macosx/classes/apple/security/AppleProvider.java Mon Jun 8 21:35:18 2015 +++ new/src/jdk.deploy.osx/macosx/classes/apple/security/AppleProvider.java Mon Jun 8 21:35:18 2015 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,18 +41,46 @@ private static final String info = "Apple Provider"; + private static final class ProviderService extends Provider.Service { + ProviderService(Provider p, String type, String algo, String cn) { + super(p, type, algo, cn, null, null); + } + + @Override + public Object newInstance(Object ctrParamObj) + throws NoSuchAlgorithmException { + String type = getType(); + if (ctrParamObj != null) { + throw new InvalidParameterException + ("constructorParameter not used with " + type + " engines"); + } + + String algo = getAlgorithm(); + try { + if (type.equals("KeyStore")) { + if (algo.equals("KeychainStore")) { + return new KeychainStore(); + } + } + } catch (Exception ex) { + throw new NoSuchAlgorithmException("Error constructing " + + type + " for " + algo + " using Apple", ex); + } + throw new ProviderException("No impl for " + algo + + " " + type); + } + } + + public AppleProvider() { /* We are the Apple provider */ super("Apple", 1.9d, info); - AccessController.doPrivileged(new java.security.PrivilegedAction() { - public Object run() { - - /* - * KeyStore - */ - put("KeyStore.KeychainStore", "apple.security.KeychainStore"); - + final Provider p = this; + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + putService(new ProviderService(p, "KeyStore", + "KeychainStore", "apple.security.KeychainStore")); return null; } });