导航菜单

页面标题

页面副标题

SpeedCash v6.5.1482 - FingerprintActivity.java 源代码

正在查看: SpeedCash v6.5.1482 应用的 FingerprintActivity.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.bm.sc.bebasbayar.ui.activity.auth;

import android.annotation.TargetApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyPermanentlyInvalidatedException;
import android.util.Base64;
import android.view.View;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.biometric.BiometricPrompt;
import androidx.core.content.ContextCompat;
import com.bm.sc.auth.ui.BridgeActivity;
import com.bm.sc.bebasbayar.R;
import com.bm.sc.bebasbayar.helper.Affinity;
import com.bm.sc.bebasbayar.helper.FirebaseHelper;
import com.bm.sc.bebasbayar.iface.BBCallback;
import com.bm.sc.bebasbayar.setting.session.AppSession;
import com.bm.sc.bebasbayar.ui.activity.auth.FingerprintActivity;
import com.bm.sc.util.android.Device;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Objects;
import java.util.concurrent.Executor;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class FingerprintActivity extends AuthActivity implements View.OnClickListener {
    public KeyStore d;
    public Cipher e;
    public AppSession f;
    public ArrayList<String> g;
    public Uri h;
    public Executor i;
    public BiometricPrompt j;
    public BiometricPrompt.PromptInfo k;

    public class a extends BiometricPrompt.AuthenticationCallback {
        public a() {
        }

        public void b(int i, Boolean bool) {
            if (!bool.booleanValue()) {
                FingerprintActivity.this.j.cancelAuthentication();
            } else {
                FingerprintActivity.this.startActivityForResult(new Intent("android.settings.SETTINGS"), 11111);
            }
        }

        public void onAuthenticationError(int i, @NonNull CharSequence charSequence) {
            super.onAuthenticationError(i, charSequence);
            if (i == 11) {
                AppCompatActivity appCompatActivity = FingerprintActivity.this;
                Affinity.confirm(appCompatActivity, appCompatActivity.getString(R.string.title_warning), FingerprintActivity.this.getString(R.string.title_lock_finger3), new BBCallback() {
                    @Override
                    public final void do_callback(int i2, Object obj) {
                        FingerprintActivity.a.this.b(i2, (Boolean) obj);
                    }
                });
            }
        }

        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
        }

        public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult authenticationResult) {
            super.onAuthenticationSucceeded(authenticationResult);
            AppSession appSession = FingerprintActivity.this.f;
            BiometricPrompt.CryptoObject cryptoObject = authenticationResult.getCryptoObject();
            Objects.requireNonNull(cryptoObject);
            Cipher cipher = cryptoObject.getCipher();
            Objects.requireNonNull(cipher);
            appSession.store(AppSession.PROPERTY_FINGERPRINT, Base64.encodeToString(cipher.getIV(), 0));
            FingerprintActivity.this.r();
        }
    }

    public static Bundle getBundle(ArrayList<String> arrayList, Uri uri) {
        Bundle bundle = new Bundle();
        bundle.putStringArrayList("login_data", arrayList);
        bundle.putParcelable("uri_data", uri);
        return bundle;
    }

    public void p(int i, Boolean bool) {
        if (bool.booleanValue()) {
            startActivityForResult(new Intent("android.settings.SETTINGS"), 11111);
        } else {
            this.j.cancelAuthentication();
        }
    }

    public void q(int i, Boolean bool) {
        if (bool.booleanValue()) {
            startActivity(new Intent("android.settings.SETTINGS"));
        }
    }

    @Override
    public int getLayoutResource() {
        return R.layout.activity_fingerprint;
    }

    @Override
    public int getRootLayoutId() {
        return R.id.layout_root;
    }

    public final void m() {
        Executor mainExecutor = ContextCompat.getMainExecutor(this);
        this.i = mainExecutor;
        this.j = new BiometricPrompt(this, mainExecutor, new a());
        this.k = new BiometricPrompt.PromptInfo.Builder().setTitle(getString(R.string.label_dialog_login_title)).setSubtitle(getString(R.string.label_dialog_login_subtitle)).setNegativeButtonText("Kembali").build();
        if (Affinity.checkFingerprint(this) != 0 && Affinity.checkFingerprint(this) != -1) {
            if (Affinity.checkFingerprint(this) == 11) {
                Affinity.confirm(this, getString(R.string.title_warning), getString(R.string.title_lock_finger3), new BBCallback() {
                    @Override
                    public final void do_callback(int i, Object obj) {
                        FingerprintActivity.this.p(i, (Boolean) obj);
                    }
                });
            }
        } else {
            o();
            if (n()) {
                this.j.authenticate(this.k, new BiometricPrompt.CryptoObject(this.e));
            }
        }
    }

    @TargetApi(23)
    public final boolean n() {
        try {
            this.e = Cipher.getInstance("AES/CBC/PKCS7Padding");
            try {
                this.d.load(null);
                this.e.init(1, (SecretKey) this.d.getKey("BebasBayar", null));
                return true;
            } catch (KeyPermanentlyInvalidatedException unused) {
                return false;
            } catch (IOException e) {
                e = e;
                throw new RuntimeException("Failed to init Cipher", e);
            } catch (InvalidKeyException e2) {
                e = e2;
                throw new RuntimeException("Failed to init Cipher", e);
            } catch (KeyStoreException e3) {
                e = e3;
                throw new RuntimeException("Failed to init Cipher", e);
            } catch (NoSuchAlgorithmException e4) {
                e = e4;
                throw new RuntimeException("Failed to init Cipher", e);
            } catch (UnrecoverableKeyException e5) {
                e = e5;
                throw new RuntimeException("Failed to init Cipher", e);
            } catch (CertificateException e6) {
                e = e6;
                throw new RuntimeException("Failed to init Cipher", e);
            }
        } catch (NoSuchAlgorithmException | NoSuchPaddingException e7) {
            throw new RuntimeException("Failed to get Cipher!", e7);
        }
    }

    @TargetApi(23)
    public final void o() {
        try {
            this.d = KeyStore.getInstance("AndroidKeyStore");
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "AndroidKeyStore");
            try {
                this.d.load(null);
                keyGenerator.init(new KeyGenParameterSpec.Builder("BebasBayar", 3).setBlockModes("CBC").setUserAuthenticationRequired(false).setEncryptionPaddings("PKCS7Padding").build());
                keyGenerator.generateKey();
            } catch (IOException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | CertificateException e2) {
                throw new RuntimeException(e2);
            }
        } catch (NoSuchAlgorithmException | NoSuchProviderException e3) {
            throw new RuntimeException("Failed to get KeyGenerator instance", e3);
        }
    }

    public void onActivityResult(int i, int i2, @Nullable Intent intent) {
        super/*androidx.fragment.app.FragmentActivity*/.onActivityResult(i, i2, intent);
        if (i == 11111) {
            if (Affinity.checkFingerprint(this) != 0 && Affinity.checkFingerprint(this) != -1) {
                this.j.cancelAuthentication();
                return;
            }
            o();
            if (n()) {
                this.j.authenticate(this.k, new BiometricPrompt.CryptoObject(this.e));
            }
        }
    }

    public void onBackPressed() {
        r();
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == 2131362424) {
            r();
        } else if (view.getId() == 2131362462) {
            if (Device.isFingerprintAuthAvailable(this)) {
                m();
            } else {
                Affinity.info(this, 2, getString(R.string.title_warning), getString(R.string.title_lock_finger3), new BBCallback() {
                    @Override
                    public final void do_callback(int i, Object obj) {
                        FingerprintActivity.this.q(i, (Boolean) obj);
                    }
                });
            }
        }
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        if (bundle != null) {
            this.g = bundle.getStringArrayList("login_data");
            this.h = (Uri) bundle.getParcelable("uri_data");
        } else if (getIntent().getExtras() != null) {
            this.g = getIntent().getExtras().getStringArrayList("login_data");
            this.h = (Uri) getIntent().getExtras().getParcelable("uri_data");
        } else {
            this.g = new ArrayList<>();
            this.h = null;
        }
        this.i = ContextCompat.getMainExecutor(this);
        this.f = new AppSession(this);
        findViewById(R.id.btn_skip).setOnClickListener(this);
        findViewById(R.id.btn_verify).setOnClickListener(this);
    }

    @Override
    @CallSuper
    public void onSaveInstanceState(Bundle bundle) {
        super.onSaveInstanceState(bundle);
        bundle.putStringArrayList("login_data", this.g);
        bundle.putParcelable("uri_data", this.h);
    }

    public final void r() {
        FirebaseHelper.sendFCMRegId(this, this.f.retrieve(AppSession.PROPERTY_MERCHANT_ID));
        Affinity.runAllServices(this, true);
        Affinity.purge(this, BridgeActivity.class, BridgeActivity.INSTANCE.getBundle(this.g, this.h));
    }
}