package com.android.org.conscrypt.ct;

import com.android.org.conscrypt.InternalUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

/* JADX INFO: loaded from: classes.dex */
public class CTLogStoreImpl implements CTLogStore {
    private static final char[] HEX_DIGITS;
    private static final Charset US_ASCII = StandardCharsets.US_ASCII;
    private static volatile CTLogInfo[] defaultFallbackLogs;
    private static final File defaultSystemLogDir;
    private static final File defaultUserLogDir;
    private final CTLogInfo[] fallbackLogs;
    private final HashMap<ByteBuffer, CTLogInfo> logCache;
    private final Set<ByteBuffer> missingLogCache;
    private final File systemLogDir;
    private final File userLogDir;

    public static class InvalidLogFileException extends Exception {
        public InvalidLogFileException() {
        }

        public InvalidLogFileException(String str) {
            super(str);
        }

        public InvalidLogFileException(String str, Throwable th) {
            super(str, th);
        }

        public InvalidLogFileException(Throwable th) {
            super(th);
        }
    }

    static {
        String str = System.getenv("ANDROID_DATA");
        String str2 = System.getenv("ANDROID_ROOT");
        defaultUserLogDir = new File(str + "/misc/keychain/trusted_ct_logs/current/");
        defaultSystemLogDir = new File(str2 + "/etc/security/ct_known_logs/");
        HEX_DIGITS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    }

    public CTLogStoreImpl() {
        this(defaultUserLogDir, defaultSystemLogDir, getDefaultFallbackLogs());
    }

    private static CTLogInfo[] createDefaultFallbackLogs() {
        CTLogInfo[] cTLogInfoArr = new CTLogInfo[8];
        for (int i3 = 0; i3 < 8; i3++) {
            try {
                cTLogInfoArr[i3] = new CTLogInfo(InternalUtil.logKeyToPublicKey(KnownLogs.LOG_KEYS[i3]), KnownLogs.LOG_DESCRIPTIONS[i3], KnownLogs.LOG_URLS[i3]);
            } catch (NoSuchAlgorithmException e3) {
                throw new RuntimeException(e3);
            }
        }
        defaultFallbackLogs = cTLogInfoArr;
        return cTLogInfoArr;
    }

    private CTLogInfo findKnownLog(byte[] bArr) {
        String strHexEncode = hexEncode(bArr);
        try {
            try {
                try {
                    return loadLog(new File(this.userLogDir, strHexEncode));
                } catch (FileNotFoundException unused) {
                    return loadLog(new File(this.systemLogDir, strHexEncode));
                }
            } catch (InvalidLogFileException unused2) {
                return null;
            }
        } catch (FileNotFoundException unused3) {
            if (!this.userLogDir.exists()) {
                for (CTLogInfo cTLogInfo : this.fallbackLogs) {
                    if (Arrays.equals(bArr, cTLogInfo.getID())) {
                        return cTLogInfo;
                    }
                }
            }
            return null;
        }
    }

    public static CTLogInfo[] getDefaultFallbackLogs() {
        CTLogInfo[] cTLogInfoArr = defaultFallbackLogs;
        if (cTLogInfoArr != null) {
            return cTLogInfoArr;
        }
        CTLogInfo[] cTLogInfoArrCreateDefaultFallbackLogs = createDefaultFallbackLogs();
        defaultFallbackLogs = cTLogInfoArrCreateDefaultFallbackLogs;
        return cTLogInfoArrCreateDefaultFallbackLogs;
    }

    private static String hexEncode(byte[] bArr) {
        StringBuilder sb = new StringBuilder(bArr.length * 2);
        for (byte b3 : bArr) {
            char[] cArr = HEX_DIGITS;
            sb.append(cArr[(b3 >> 4) & 15]);
            sb.append(cArr[b3 & 15]);
        }
        return sb.toString();
    }

    public static CTLogInfo loadLog(File file) throws InvalidLogFileException, FileNotFoundException {
        return loadLog(new FileInputStream(file));
    }

    @Override // com.android.org.conscrypt.ct.CTLogStore
    public CTLogInfo getKnownLog(byte[] bArr) {
        ByteBuffer byteBufferWrap = ByteBuffer.wrap(bArr);
        CTLogInfo cTLogInfo = this.logCache.get(byteBufferWrap);
        if (cTLogInfo != null) {
            return cTLogInfo;
        }
        if (this.missingLogCache.contains(byteBufferWrap)) {
            return null;
        }
        CTLogInfo cTLogInfoFindKnownLog = findKnownLog(bArr);
        if (cTLogInfoFindKnownLog != null) {
            this.logCache.put(byteBufferWrap, cTLogInfoFindKnownLog);
        } else {
            this.missingLogCache.add(byteBufferWrap);
        }
        return cTLogInfoFindKnownLog;
    }

    /* JADX WARN: Removed duplicated region for block: B:30:0x0066  */
    /* JADX WARN: Removed duplicated region for block: B:65:0x0072 A[SYNTHETIC] */
    /* JADX WARN: Removed duplicated region for block: B:67:0x0069 A[SYNTHETIC] */
    /*
        Code decompiled incorrectly, please refer to instructions dump.
        To view partially-correct add '--show-bad-code' argument
    */
    public static com.android.org.conscrypt.ct.CTLogInfo loadLog(java.io.InputStream r11) throws com.android.org.conscrypt.ct.CTLogStoreImpl.InvalidLogFileException {
        /*
            java.util.Scanner r0 = new java.util.Scanner
            java.lang.String r1 = "UTF-8"
            r0.<init>(r11, r1)
            java.lang.String r11 = "\n"
            r0.useDelimiter(r11)
            boolean r11 = r0.hasNext()     // Catch: java.lang.Throwable -> Lbe
            r1 = 0
            if (r11 != 0) goto L17
            r0.close()
            return r1
        L17:
            r11 = r1
            r2 = r11
        L19:
            boolean r3 = r0.hasNext()     // Catch: java.lang.Throwable -> Lbe
            if (r3 == 0) goto L74
            java.lang.String r3 = r0.next()     // Catch: java.lang.Throwable -> Lbe
            java.lang.String r4 = ":"
            r5 = 2
            java.lang.String[] r3 = r3.split(r4, r5)     // Catch: java.lang.Throwable -> Lbe
            int r4 = r3.length     // Catch: java.lang.Throwable -> Lbe
            if (r4 >= r5) goto L2e
            goto L19
        L2e:
            r4 = 0
            r6 = r3[r4]     // Catch: java.lang.Throwable -> Lbe
            r7 = 1
            r3 = r3[r7]     // Catch: java.lang.Throwable -> Lbe
            r8 = -1
            int r9 = r6.hashCode()     // Catch: java.lang.Throwable -> Lbe
            r10 = -1724546052(0xffffffff993583fc, float:-9.384135E-24)
            if (r9 == r10) goto L5d
            r4 = 106079(0x19e5f, float:1.48648E-40)
            if (r9 == r4) goto L53
            r4 = 116079(0x1c56f, float:1.62661E-40)
            if (r9 == r4) goto L49
            goto L66
        L49:
            java.lang.String r4 = "url"
            boolean r4 = r6.equals(r4)     // Catch: java.lang.Throwable -> Lbe
            if (r4 == 0) goto L66
            r4 = r7
            goto L67
        L53:
            java.lang.String r4 = "key"
            boolean r4 = r6.equals(r4)     // Catch: java.lang.Throwable -> Lbe
            if (r4 == 0) goto L66
            r4 = r5
            goto L67
        L5d:
            java.lang.String r9 = "description"
            boolean r6 = r6.equals(r9)     // Catch: java.lang.Throwable -> Lbe
            if (r6 == 0) goto L66
            goto L67
        L66:
            r4 = r8
        L67:
            if (r4 == 0) goto L72
            if (r4 == r7) goto L70
            if (r4 == r5) goto L6e
            goto L19
        L6e:
            r2 = r3
            goto L19
        L70:
            r11 = r3
            goto L19
        L72:
            r1 = r3
            goto L19
        L74:
            r0.close()
            if (r1 == 0) goto Lb6
            if (r11 == 0) goto Lb6
            if (r2 == 0) goto Lb6
            java.io.ByteArrayInputStream r0 = new java.io.ByteArrayInputStream     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.lang.StringBuilder r3 = new java.lang.StringBuilder     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            r3.<init>()     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.lang.String r4 = "-----BEGIN PUBLIC KEY-----\n"
            r3.append(r4)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            r3.append(r2)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.lang.String r2 = "\n-----END PUBLIC KEY-----"
            r3.append(r2)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.lang.String r2 = r3.toString()     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.nio.charset.Charset r3 = com.android.org.conscrypt.ct.CTLogStoreImpl.US_ASCII     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            byte[] r2 = r2.getBytes(r3)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            r0.<init>(r2)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            java.security.PublicKey r0 = com.android.org.conscrypt.InternalUtil.readPublicKeyPem(r0)     // Catch: java.security.NoSuchAlgorithmException -> La8 java.security.InvalidKeyException -> Laf
            com.android.org.conscrypt.ct.CTLogInfo r2 = new com.android.org.conscrypt.ct.CTLogInfo
            r2.<init>(r0, r1, r11)
            return r2
        La8:
            r11 = move-exception
            com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException r0 = new com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
            r0.<init>(r11)
            throw r0
        Laf:
            r11 = move-exception
            com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException r0 = new com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
            r0.<init>(r11)
            throw r0
        Lb6:
            com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException r11 = new com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
            java.lang.String r0 = "Missing one of 'description', 'url' or 'key'"
            r11.<init>(r0)
            throw r11
        Lbe:
            r11 = move-exception
            r0.close()
            throw r11
        */
        throw new UnsupportedOperationException("Method not decompiled: com.android.org.conscrypt.ct.CTLogStoreImpl.loadLog(java.io.InputStream):com.android.org.conscrypt.ct.CTLogInfo");
    }

    public CTLogStoreImpl(File file, File file2, CTLogInfo[] cTLogInfoArr) {
        this.logCache = new HashMap<>();
        this.missingLogCache = Collections.synchronizedSet(new HashSet());
        this.userLogDir = file;
        this.systemLogDir = file2;
        this.fallbackLogs = cTLogInfoArr;
    }
}
