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}