Пример #1
0
        /// <summary>
        /// Adds an entry into key chain. If a duplicate is found, it is removed & re-added.
        /// </summary>
        /// <param name="secureValues">Object containing secure values</param>
        /// <returns>Whether the key chain entry was added successfully.</returns>
        public static bool StoreSecureDataInKeychain(KeyStoreModel secureValues)
        {
            var success = false;
            var s       = new SecRecord(SecKind.GenericPassword)
            {
                ValueData   = NSData.FromString(JsonConvert.SerializeObject(secureValues)),
                Generic     = NSData.FromString(KEY),
                AccessGroup = "H29ZBDYNSU.com.andculture.boilerplate"                 // TODO: Change to your app's bundle id
            };
            var err = SecKeyChain.Add(s);

            if (err == SecStatusCode.DuplicateItem)
            {
                err = SecKeyChain.Remove(s);
                if (err == SecStatusCode.Success)
                {
                    return(StoreSecureDataInKeychain(secureValues));
                }
            }
            else if (err == SecStatusCode.Success)
            {
                success = true;
            }
            return(success);
        }
Пример #2
0
        /// <summary>
        /// Gets a string value from keychain for the supplied key.
        /// </summary>
        /// <returns>The value of the entry as a string.</returns>
        public static KeyStoreModel GetSecureDataFromKeychain()
        {
            KeyStoreModel result = null;
            var           rec    = new SecRecord(SecKind.GenericPassword)
            {
                Generic = NSData.FromString(KEY)
            };
            var match = SecKeyChain.QueryAsRecord(rec, out SecStatusCode res);

            if (match != null && match.ValueData != null)
            {
                result = JsonConvert.DeserializeObject <KeyStoreModel>(match.ValueData.ToString());
            }

            return(result);
        }