TrustManagers.java

 1package eu.siacs.conversations.crypto;
 2
 3import android.content.Context;
 4
 5import androidx.annotation.Nullable;
 6
 7import com.google.common.collect.Iterables;
 8
 9import java.io.IOException;
10import java.security.KeyStore;
11import java.security.KeyStoreException;
12import java.security.NoSuchAlgorithmException;
13import java.security.cert.CertificateException;
14import java.util.Arrays;
15
16import javax.net.ssl.TrustManagerFactory;
17import javax.net.ssl.X509TrustManager;
18
19import eu.siacs.conversations.R;
20
21public final class TrustManagers {
22
23    private TrustManagers() {
24        throw new IllegalStateException("Do not instantiate me");
25    }
26
27    public static X509TrustManager createTrustManager(@Nullable final KeyStore keyStore)
28            throws NoSuchAlgorithmException, KeyStoreException {
29        final TrustManagerFactory trustManagerFactory =
30                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
31        trustManagerFactory.init(keyStore);
32        return Iterables.getOnlyElement(
33                Iterables.filter(
34                        Arrays.asList(trustManagerFactory.getTrustManagers()),
35                        X509TrustManager.class));
36    }
37
38    public static X509TrustManager createDefaultTrustManager()
39            throws NoSuchAlgorithmException, KeyStoreException {
40        return createTrustManager(null);
41    }
42
43    public static X509TrustManager defaultWithBundledLetsEncrypt(final Context context)
44            throws NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException {
45        final BundledTrustManager bundleTrustManager =
46                BundledTrustManager.builder()
47                        .loadKeyStore(
48                                context.getResources().openRawResource(R.raw.letsencrypt),
49                                "letsencrypt")
50                        .build();
51        return CombiningTrustManager.combineWithDefault(bundleTrustManager);
52    }
53
54
55}