Пример #1
0
        /// <summary>
        ///     Will get the key from the Android keystore, creating it if necessary.
        /// </summary>
        /// <returns></returns>
        IKey GetKey()
        {
            if (!_keystore.IsKeyEntry(KEY_NAME))
            {
                CreateKey();
            }

            IKey secretKey = _keystore.GetKey(KEY_NAME, null);

            return(secretKey);
        }
Пример #2
0
        public string GetKey()
        {
            IKey secretKey;

            if (!_keystore.IsKeyEntry(KEY_NAME))
            {
                GenKey();
            }
            secretKey = _keystore.GetKey(KEY_NAME, null);
            return(secretKey.ToString());
        }
Пример #3
0
        /// <summary>
        ///     Will get the key from the Android keystore, creating it if necessary.
        /// </summary>
        /// <returns></returns>
        IKey GetKey()
        {
            if (!_keystore.IsKeyEntry(_keyName))
            {
                CreateKey();
            }

            IKey secretKey = _keystore.GetKey(_keyName, null);

            return(secretKey);
        }
Пример #4
0
        private BiometricPrompt.CryptoObject BuildSymmetricCryptoObject(string keyName, string cipherName, CipherMode mode, byte[] iv = null)
        {
            if (this.Log().IsEnabled(LogLevel.Debug))
            {
                this.Log().Debug($"Building a symmetric crypto object (key name: '{keyName}', mode: '{mode}').");
            }

            var cipher = Cipher.GetInstance(cipherName);

            if (_keyStore.IsKeyEntry(keyName))
            {
                if (mode == CipherMode.EncryptMode)
                {
                    _keyStore.DeleteEntry(keyName);
                }
                else if (mode == CipherMode.DecryptMode)
                {
                    try
                    {
                        cipher.Init(mode, _keyStore.GetKey(keyName, null), new IvParameterSpec(iv));

                        return(new BiometricPrompt.CryptoObject(cipher));
                    }
                    catch (KeyPermanentlyInvalidatedException)
                    {
                        _keyStore.DeleteEntry(keyName);

                        throw;
                    }
                }
            }
            else if (mode == CipherMode.DecryptMode)
            {
                throw new ArgumentException("Key not found.");
            }

            GenerateSymmetricKey(keyName);

            cipher.Init(mode, _keyStore.GetKey(keyName, null));

            if (this.Log().IsEnabled(LogLevel.Information))
            {
                this.Log().Info($"Return the symmetric crypto object (key name: '{keyName}', mode: '{mode}').");
            }

            return(new BiometricPrompt.CryptoObject(cipher));
        }
Пример #5
0
        public void RefreshItems()
        {
            _listItems.Clear();
            foreach (String alias in KeyStore.Aliases)
            {
                KeyStoreEntryType entryType;
                if (KeyStore.IsCertificateEntry(alias))
                {
                    entryType = KeyStoreEntryType.TrustCertEntry;
                }
                else if (KeyStore.IsKeyEntry(alias) && KeyStore.GetCertificateChain(alias) != null && KeyStore.GetCertificateChain(alias).Length != 0)
                {
                    entryType = KeyStoreEntryType.KeyPairEntry;
                }
                else
                {
                    entryType = KeyStoreEntryType.KeyEntry;
                }

                _listItems.Add(new ListItemEntry(entryType, alias, KeyStore.GetCertificate(alias).Certificate));
            }
        }