Search in sources :

Example 16 with Service

use of java.security.Provider.Service in project jdk8u_jdk by JetBrains.

the class Cipher method chooseFirstProvider.

/**
     * Choose the Spi from the first provider available. Used if
     * delayed provider selection is not possible because init()
     * is not the first method called.
     */
void chooseFirstProvider() {
    if (spi != null) {
        return;
    }
    synchronized (lock) {
        if (spi != null) {
            return;
        }
        if (debug != null) {
            int w = --warnCount;
            if (w >= 0) {
                debug.println("Cipher.init() not first method " + "called, disabling delayed provider selection");
                if (w == 0) {
                    debug.println("Further warnings of this type will " + "be suppressed");
                }
                new Exception("Call trace").printStackTrace();
            }
        }
        Exception lastException = null;
        while ((firstService != null) || serviceIterator.hasNext()) {
            Service s;
            CipherSpi thisSpi;
            if (firstService != null) {
                s = firstService;
                thisSpi = firstSpi;
                firstService = null;
                firstSpi = null;
            } else {
                s = serviceIterator.next();
                thisSpi = null;
            }
            if (JceSecurity.canUseProvider(s.getProvider()) == false) {
                continue;
            }
            Transform tr = getTransform(s, transforms);
            if (tr == null) {
                // should never happen
                continue;
            }
            if (tr.supportsModePadding(s) == S_NO) {
                continue;
            }
            try {
                if (thisSpi == null) {
                    Object obj = s.newInstance(null);
                    if (obj instanceof CipherSpi == false) {
                        continue;
                    }
                    thisSpi = (CipherSpi) obj;
                }
                tr.setModePadding(thisSpi);
                initCryptoPermission();
                spi = thisSpi;
                provider = s.getProvider();
                // not needed any more
                firstService = null;
                serviceIterator = null;
                transforms = null;
                return;
            } catch (Exception e) {
                lastException = e;
            }
        }
        ProviderException e = new ProviderException("Could not construct CipherSpi instance");
        if (lastException != null) {
            e.initCause(lastException);
        }
        throw e;
    }
}
Also used : Service(java.security.Provider.Service) InvalidParameterSpecException(java.security.spec.InvalidParameterSpecException) ReadOnlyBufferException(java.nio.ReadOnlyBufferException)

Example 17 with Service

use of java.security.Provider.Service in project jdk8u_jdk by JetBrains.

the class Mac method getInstance.

/**
     * Returns a <code>Mac</code> object that implements the
     * specified MAC algorithm.
     *
     * <p> This method traverses the list of registered security Providers,
     * starting with the most preferred Provider.
     * A new Mac object encapsulating the
     * MacSpi implementation from the first
     * Provider that supports the specified algorithm is returned.
     *
     * <p> Note that the list of registered providers may be retrieved via
     * the {@link Security#getProviders() Security.getProviders()} method.
     *
     * @param algorithm the standard name of the requested MAC algorithm.
     * See the Mac section in the <a href=
     *   "{@docRoot}/../technotes/guides/security/StandardNames.html#Mac">
     * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
     * for information about standard algorithm names.
     *
     * @return the new <code>Mac</code> object.
     *
     * @exception NoSuchAlgorithmException if no Provider supports a
     *          MacSpi implementation for the
     *          specified algorithm.
     *
     * @see java.security.Provider
     */
public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException {
    List<Service> services = GetInstance.getServices("Mac", algorithm);
    // make sure there is at least one service from a signed provider
    Iterator<Service> t = services.iterator();
    while (t.hasNext()) {
        Service s = t.next();
        if (JceSecurity.canUseProvider(s.getProvider()) == false) {
            continue;
        }
        return new Mac(s, t, algorithm);
    }
    throw new NoSuchAlgorithmException("Algorithm " + algorithm + " not available");
}
Also used : Service(java.security.Provider.Service)

Example 18 with Service

use of java.security.Provider.Service in project jdk8u_jdk by JetBrains.

the class Mac method chooseProvider.

private void chooseProvider(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException {
    synchronized (lock) {
        if (spi != null) {
            spi.engineInit(key, params);
            return;
        }
        Exception lastException = null;
        while ((firstService != null) || serviceIterator.hasNext()) {
            Service s;
            if (firstService != null) {
                s = firstService;
                firstService = null;
            } else {
                s = serviceIterator.next();
            }
            // if provider says it does not support this key, ignore it
            if (s.supportsParameter(key) == false) {
                continue;
            }
            if (JceSecurity.canUseProvider(s.getProvider()) == false) {
                continue;
            }
            try {
                MacSpi spi = (MacSpi) s.newInstance(null);
                spi.engineInit(key, params);
                provider = s.getProvider();
                this.spi = spi;
                firstService = null;
                serviceIterator = null;
                return;
            } catch (Exception e) {
                // RuntimeException (ProviderException) from init()
                if (lastException == null) {
                    lastException = e;
                }
            }
        }
        // no working provider found, fail
        if (lastException instanceof InvalidKeyException) {
            throw (InvalidKeyException) lastException;
        }
        if (lastException instanceof InvalidAlgorithmParameterException) {
            throw (InvalidAlgorithmParameterException) lastException;
        }
        if (lastException instanceof RuntimeException) {
            throw (RuntimeException) lastException;
        }
        String kName = (key != null) ? key.getClass().getName() : "(null)";
        throw new InvalidKeyException("No installed provider supports this key: " + kName, lastException);
    }
}
Also used : Service(java.security.Provider.Service)

Example 19 with Service

use of java.security.Provider.Service in project jdk8u_jdk by JetBrains.

the class SecretKeyFactory method nextSpi.

/**
     * Update the active spi of this class and return the next
     * implementation for failover. If no more implemenations are
     * available, this method returns null. However, the active spi of
     * this class is never set to null.
     */
private SecretKeyFactorySpi nextSpi(SecretKeyFactorySpi oldSpi) {
    synchronized (lock) {
        // try that spi now
        if ((oldSpi != null) && (oldSpi != spi)) {
            return spi;
        }
        if (serviceIterator == null) {
            return null;
        }
        while (serviceIterator.hasNext()) {
            Service s = serviceIterator.next();
            if (JceSecurity.canUseProvider(s.getProvider()) == false) {
                continue;
            }
            try {
                Object obj = s.newInstance(null);
                if (obj instanceof SecretKeyFactorySpi == false) {
                    continue;
                }
                SecretKeyFactorySpi spi = (SecretKeyFactorySpi) obj;
                provider = s.getProvider();
                this.spi = spi;
                return spi;
            } catch (NoSuchAlgorithmException e) {
            // ignore
            }
        }
        serviceIterator = null;
        return null;
    }
}
Also used : Service(java.security.Provider.Service)

Example 20 with Service

use of java.security.Provider.Service in project jdk8u_jdk by JetBrains.

the class KeyAgreement method chooseProvider.

private void chooseProvider(int initType, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException {
    synchronized (lock) {
        if (spi != null) {
            implInit(spi, initType, key, params, random);
            return;
        }
        Exception lastException = null;
        while ((firstService != null) || serviceIterator.hasNext()) {
            Service s;
            if (firstService != null) {
                s = firstService;
                firstService = null;
            } else {
                s = serviceIterator.next();
            }
            // if provider says it does not support this key, ignore it
            if (s.supportsParameter(key) == false) {
                continue;
            }
            if (JceSecurity.canUseProvider(s.getProvider()) == false) {
                continue;
            }
            try {
                KeyAgreementSpi spi = (KeyAgreementSpi) s.newInstance(null);
                implInit(spi, initType, key, params, random);
                provider = s.getProvider();
                this.spi = spi;
                firstService = null;
                serviceIterator = null;
                return;
            } catch (Exception e) {
                // RuntimeException (ProviderException) from init()
                if (lastException == null) {
                    lastException = e;
                }
            }
        }
        // no working provider found, fail
        if (lastException instanceof InvalidKeyException) {
            throw (InvalidKeyException) lastException;
        }
        if (lastException instanceof InvalidAlgorithmParameterException) {
            throw (InvalidAlgorithmParameterException) lastException;
        }
        if (lastException instanceof RuntimeException) {
            throw (RuntimeException) lastException;
        }
        String kName = (key != null) ? key.getClass().getName() : "(null)";
        throw new InvalidKeyException("No installed provider supports this key: " + kName, lastException);
    }
}
Also used : Service(java.security.Provider.Service)

Aggregations

Service (java.security.Provider.Service)80 Provider (java.security.Provider)17 Instance (sun.security.jca.GetInstance.Instance)11 ReadOnlyBufferException (java.nio.ReadOnlyBufferException)9 InvalidParameterSpecException (java.security.spec.InvalidParameterSpecException)9 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)4 DefaultSet (de.carne.jfx.util.DefaultSet)3 Nullable (de.carne.check.Nullable)2 KeyPairGenerator (java.security.KeyPairGenerator)2 DSAPrivateKey (java.security.interfaces.DSAPrivateKey)2 DSAPublicKey (java.security.interfaces.DSAPublicKey)2 LinkedList (java.util.LinkedList)2 CoreException (org.eclipse.core.runtime.CoreException)2 KeyFactory (java.security.KeyFactory)1 KeyPair (java.security.KeyPair)1 PrivateKey (java.security.PrivateKey)1 PublicKey (java.security.PublicKey)1 DSAParams (java.security.interfaces.DSAParams)1 ECPrivateKey (java.security.interfaces.ECPrivateKey)1 AlgorithmParameterSpec (java.security.spec.AlgorithmParameterSpec)1