public FingerprintEncryption(FingerprintModule fingerprint, string keyId) :
     base(fingerprint, keyId)
 {
     _keyGen = fingerprint.KeyGenerator;
     Kp2aLog.Log("FP: CreateKey ");
     CreateKey();
 }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            if (requestCode == FINGERPRINT_PERMISSION_REQUEST_CODE && grantResults[0] == Android.Content.PM.Permission.Granted)
            {
                Button encButton = FindViewById <Button>(Resource.Id.MyButton);
                Button decButton = FindViewById <Button>(Resource.Id.Decrypt);
                encButton.Visibility = ViewStates.Visible;
                encButton.Enabled    = true;
                var fingerprint = new keepass2android.FingerprintModule(this);

                encButton.Click += (sender, args) =>
                {
                    var fingerprintEnc = new FingerprintEncryption(fingerprint, _keyId);


                    if (fingerprintEnc.InitCipher())
                    {
                        fingerprintEnc.StartListening(new EncryptionCallback(this, fingerprintEnc, prefKey));
                    }
                    else
                    {
                        Toast.MakeText(this, "Error initiating cipher", ToastLength.Long).Show();
                    }
                };

                decButton.Click += (sender, args) =>
                {
                    var fingerprintDec = new FingerprintDecryption(fingerprint, _keyId, this, prefKey);


                    if (fingerprintDec.InitCipher())
                    {
                        fingerprintDec.StartListening(new DecryptionCallback(this, fingerprintDec, prefKey));
                    }
                    else
                    {
                        Toast.MakeText(this, "Error initiating cipher", ToastLength.Long).Show();
                    }
                };

                if (!fingerprint.KeyguardManager.IsKeyguardSecure)
                {
                    encButton.Enabled = false;
                    // Show a message that the user hasn't set up a fingerprint or lock screen.
                    Toast.MakeText(this, "Secure lock screen hasn't set up.\n"
                                   + "Go to 'Settings -> Security -> Fingerprint' to set up a fingerprint", ToastLength.Long).Show();
                    return;
                }


                if (!fingerprint.FingerprintManager.HasEnrolledFingerprints)
                {
                    encButton.Enabled = false;
                    // This happens when no fingerprints are registered.
                    Toast.MakeText(this, "Go to 'Settings -> Security -> Fingerprint' " +
                                   "and register at least one fingerprint", ToastLength.Long).Show();
                    return;
                }
            }
        }
        public FingerprintCrypt(FingerprintModule fingerprint, string keyId)
        {
            _keyId = keyId;

            _cipher   = fingerprint.Cipher;
            _keystore = fingerprint.Keystore;

            _fingerprintManager = fingerprint.FingerprintManager;
        }
        public FingerprintCrypt(FingerprintModule fingerprint, string keyId)
        {
            Kp2aLog.Log("FP: Create " + this.GetType().Name);
            _keyId = keyId;

            _cipher   = fingerprint.Cipher;
            _keystore = fingerprint.Keystore;

            _fingerprintManager = fingerprint.FingerprintManager;
        }
Beispiel #5
0
 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
 {
     if (requestCode == FingerprintPermissionRequestCode && grantResults[0] == Permission.Granted)
     {
         FingerprintModule fpModule = new FingerprintModule(this);
         if (!fpModule.FingerprintManager.IsHardwareDetected)
         {
             //seems like not all Samsung Devices (e.g. Note 4) don't support the Android 6 fingerprint API
             if (!TrySetupSamsung())
             {
                 SetError(Resource.String.fingerprint_hardware_error);
             }
             UpdateKeyboardCheckboxVisibility();
             return;
         }
         if (!fpModule.FingerprintManager.HasEnrolledFingerprints)
         {
             SetError(Resource.String.fingerprint_no_enrolled);
             return;
         }
         ShowRadioButtons();
         UpdateKeyboardCheckboxVisibility();
     }
 }
 public FingerprintDecryption(FingerprintModule fingerprint, string keyId, Context context, string prefKey)
     : base(fingerprint, keyId)
 {
     _context = context;
     _iv      = Base64.Decode(PreferenceManager.GetDefaultSharedPreferences(context).GetString(GetIvPrefKey(prefKey), null), 0);
 }
 public FingerprintDecryption(FingerprintModule fingerprint, string keyId, byte[] iv) : base(fingerprint, keyId)
 {
     _iv = iv;
 }
        private bool InitFingerprintUnlock()
        {
            Kp2aLog.Log("InitFingerprintUnlock");

            if (_fingerprintIdentifier != null)
            {
                Kp2aLog.Log("Already listening for fingerprint!");
                return(true);
            }


            var btn = FindViewById <ImageButton>(Resource.Id.fingerprintbtn);

            try
            {
                FingerprintUnlockMode um;
                Enum.TryParse(PreferenceManager.GetDefaultSharedPreferences(this).GetString(App.Kp2a.GetDbForQuickUnlock().CurrentFingerprintModePrefKey, ""), out um);
                btn.Visibility = (um != FingerprintUnlockMode.Disabled) ? ViewStates.Visible : ViewStates.Gone;

                if (um == FingerprintUnlockMode.Disabled)
                {
                    _fingerprintIdentifier = null;
                    return(false);
                }

                if (_fingerprintPermissionGranted)
                {
                    FingerprintModule fpModule = new FingerprintModule(this);
                    Kp2aLog.Log("fpModule.FingerprintManager.IsHardwareDetected=" + fpModule.FingerprintManager.IsHardwareDetected);
                    if (fpModule.FingerprintManager.IsHardwareDetected)                     //see FingerprintSetupActivity
                    {
                        _fingerprintIdentifier = new FingerprintDecryption(fpModule, App.Kp2a.GetDbForQuickUnlock().CurrentFingerprintPrefKey, this,
                                                                           App.Kp2a.GetDbForQuickUnlock().CurrentFingerprintPrefKey);
                    }
                }
                if ((_fingerprintIdentifier == null) && (!FingerprintDecryption.IsSetUp(this, App.Kp2a.GetDbForQuickUnlock().CurrentFingerprintPrefKey)))
                {
                    try
                    {
                        Kp2aLog.Log("trying Samsung Fingerprint API...");
                        _fingerprintIdentifier = new FingerprintSamsungIdentifier(this);
                        btn.Click += (sender, args) =>
                        {
                            if (_fingerprintIdentifier.Init())
                            {
                                _fingerprintIdentifier.StartListening(this, this);
                            }
                        };
                        Kp2aLog.Log("trying Samsung Fingerprint API...Seems to work!");
                    }
                    catch (Exception)
                    {
                        Kp2aLog.Log("trying Samsung Fingerprint API...failed.");
                        _fingerprintIdentifier = null;
                    }
                }
                if (_fingerprintIdentifier == null)
                {
                    FindViewById <ImageButton>(Resource.Id.fingerprintbtn).Visibility = ViewStates.Gone;
                    return(false);
                }
                btn.Tag = GetString(Resource.String.fingerprint_unlock_hint);

                if (_fingerprintIdentifier.Init())
                {
                    Kp2aLog.Log("successfully initialized fingerprint.");
                    btn.SetImageResource(Resource.Drawable.ic_fp_40px);
                    _fingerprintIdentifier.StartListening(this, this);
                    return(true);
                }
                else
                {
                    Kp2aLog.Log("failed to initialize fingerprint.");
                    HandleFingerprintKeyInvalidated();
                }
            }
            catch (Exception e)
            {
                Kp2aLog.Log("Error initializing Fingerprint Unlock: " + e);
                btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
                btn.Tag = "Error initializing Fingerprint Unlock: " + e;

                _fingerprintIdentifier = null;
            }
            return(false);
        }