108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project/* 208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * this work for additional information regarding copyright ownership. 508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * (the "License"); you may not use this file except in compliance with 708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * the License. You may obtain a copy of the License at 808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * 908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * 1108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * See the License for the specific language governing permissions and 1508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * limitations under the License. 1608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */ 1708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 18860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Rootpackage org.conscrypt; 1908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 2008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.io.IOException; 2108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 2208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.security.KeyStore; 2308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.security.KeyStoreException; 2408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.security.NoSuchAlgorithmException; 2508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport java.security.cert.CertificateException; 2608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport javax.net.ssl.ManagerFactoryParameters; 2708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport javax.net.ssl.TrustManager; 2808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectimport javax.net.ssl.TrustManagerFactorySpi; 2908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 3008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project/** 3173f1fad27323ed00b318de046cfe43236625af09Elliott Hughes * 3208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * TrustManagerFactory service provider interface implementation. 3373f1fad27323ed00b318de046cfe43236625af09Elliott Hughes * 3408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * @see javax.net.ssl.TrustManagerFactorySpi 3508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */ 3608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectpublic class TrustManagerFactoryImpl extends TrustManagerFactorySpi { 3708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 3808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project private KeyStore keyStore; 3908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 4008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project /** 4108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * @see javax.net.ssl.TrustManagerFactorySpi#engineInit(KeyStore) 4208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */ 43bb8f91fc09894e9d25fc501093897e5c2d2d6140Jesse Wilson @Override 4408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project public void engineInit(KeyStore ks) throws KeyStoreException { 4508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project if (ks != null) { 4608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project keyStore = ks; 4708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } else { 486224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom keyStore = KeyStore.getInstance("AndroidCAStore"); 496224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom try { 506224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom keyStore.load(null, null); 516224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom } catch (IOException e) { 526224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom throw new KeyStoreException(e); 536224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom } catch (CertificateException e) { 546224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom throw new KeyStoreException(e); 556224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom } catch (NoSuchAlgorithmException e) { 566224c2e60c987d560cb5d76aa6af4c185ce87768Brian Carlstrom throw new KeyStoreException(e); 5708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 5808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 5908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 6008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 6108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project /** 6208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * @see javax.net.ssl#engineInit(ManagerFactoryParameters) 6308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */ 64bb8f91fc09894e9d25fc501093897e5c2d2d6140Jesse Wilson @Override 6508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project public void engineInit(ManagerFactoryParameters spec) 6608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project throws InvalidAlgorithmParameterException { 6708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project throw new InvalidAlgorithmParameterException( 6808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project "ManagerFactoryParameters not supported"); 6908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 7008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 7108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project /** 7208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project * @see javax.net.ssl#engineGetTrustManagers() 7308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project */ 74bb8f91fc09894e9d25fc501093897e5c2d2d6140Jesse Wilson @Override 7508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project public TrustManager[] engineGetTrustManagers() { 7608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project if (keyStore == null) { 7708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project throw new IllegalStateException( 7808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project "TrustManagerFactory is not initialized"); 7908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 8008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project return new TrustManager[] { new TrustManagerImpl(keyStore) }; 8108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project } 8208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project} 83