TrustManagerFactoryImpl.java revision 347b2a604114602da9bc4ae040278f74d11c2f51
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/*
20a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines *  Licensed to the Apache Software Foundation (ASF) under one or more
3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  contributor license agreements.  See the NOTICE file distributed with
4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  this work for additional information regarding copyright ownership.
5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  The ASF licenses this file to You under the Apache License, Version 2.0
6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  (the "License"); you may not use this file except in compliance with
7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  the License.  You may obtain a copy of the License at
8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *
9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *
11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  Unless required by applicable law or agreed to in writing, software
12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  distributed under the License is distributed on an "AS IS" BASIS,
13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  See the License for the specific language governing permissions and
15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *  limitations under the License.
16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */
17e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines
18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinespackage org.apache.harmony.xnet.provider.jsse;
19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
20e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport java.io.IOException;
21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport java.security.InvalidAlgorithmParameterException;
22e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport java.security.KeyStore;
23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport java.security.KeyStoreException;
24e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport java.security.NoSuchAlgorithmException;
25e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesimport java.security.cert.CertificateException;
26be27482cdeaf08576bc39b72a15d35d13014a636Loganimport javax.net.ssl.ManagerFactoryParameters;
27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoimport javax.net.ssl.TrustManager;
28be27482cdeaf08576bc39b72a15d35d13014a636Loganimport javax.net.ssl.TrustManagerFactorySpi;
299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao/**
31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao *
323fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines * TrustManagerFactory service provider interface implementation.
333fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines *
34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * @see javax.net.ssl.TrustManagerFactorySpi
356315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr */
3623c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hinespublic class TrustManagerFactoryImpl extends TrustManagerFactorySpi {
379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    private KeyStore keyStore;
39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
406315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    /**
416315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr     * @see javax.net.ssl.TrustManagerFactorySpi#engineInit(KeyStore)
426315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr     */
436315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    @Override
446315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    public void engineInit(KeyStore ks) throws KeyStoreException {
459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        if (ks != null) {
46462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao            keyStore = ks;
47462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao        } else {
48a41ce1d98094da84643995d40d71c529905123fcZonr Chang            keyStore = KeyStore.getInstance("AndroidCAStore");
49a41ce1d98094da84643995d40d71c529905123fcZonr Chang            try {
50a41ce1d98094da84643995d40d71c529905123fcZonr Chang                keyStore.load(null, null);
51593a894650e81be54173106ec266f0311cebebd3Stephen Hines            } catch (IOException e) {
52a41ce1d98094da84643995d40d71c529905123fcZonr Chang                throw new KeyStoreException(e);
53462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao            } catch (CertificateException e) {
54462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao                throw new KeyStoreException(e);
559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao            } catch (NoSuchAlgorithmException e) {
569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao                throw new KeyStoreException(e);
579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao            }
589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        }
599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    }
60a41ce1d98094da84643995d40d71c529905123fcZonr Chang
619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    /**
629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao     * @see javax.net.ssl#engineInit(ManagerFactoryParameters)
63593a894650e81be54173106ec266f0311cebebd3Stephen Hines     */
649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    @Override
659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    public void engineInit(ManagerFactoryParameters spec)
669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao            throws InvalidAlgorithmParameterException {
679e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines        throw new InvalidAlgorithmParameterException(
689e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines                "ManagerFactoryParameters not supported");
699e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines    }
703fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines
714a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines    /**
724cc67fce91f43215d61b2695746eab102a3db516Stephen Hines     * @see javax.net.ssl#engineGetTrustManagers()
739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao     */
7423c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines    @Override
759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    public TrustManager[] engineGetTrustManagers() {
769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        if (keyStore == null) {
77a41ce1d98094da84643995d40d71c529905123fcZonr Chang            throw new IllegalStateException(
78a41ce1d98094da84643995d40d71c529905123fcZonr Chang                    "TrustManagerFactory is not initialized");
799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        }
809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        return new TrustManager[] { new TrustManagerImpl(keyStore) };
819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    }
829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao