BlueWallet/ios/Shared/Utilities/KeychainHelper.swift

71 lines
2 KiB
Swift
Raw Normal View History

//
// KeychainHelper.swift
// BlueWallet
//
// Created by Marcos Rodriguez on 11/20/24.
// Copyright © 2024 BlueWallet. All rights reserved.
//
import Foundation
import Security
class KeychainHelper {
static let shared = KeychainHelper()
private init() {}
/// Save data to Keychain
func save(_ data: Data, service: String, account: String) -> Bool {
// Create query
let query: [String: Any] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrService as String : service,
kSecAttrAccount as String : account,
kSecValueData as String : data
]
// Delete any existing item
SecItemDelete(query as CFDictionary)
// Add new item
let status = SecItemAdd(query as CFDictionary, nil)
return status == errSecSuccess
}
/// Retrieve data from Keychain
func retrieve(service: String, account: String) -> Data? {
// Create query
let query: [String: Any] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrService as String : service,
kSecAttrAccount as String : account,
kSecReturnData as String : true,
kSecMatchLimit as String : kSecMatchLimitOne
]
var dataTypeRef: AnyObject?
let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
if status == errSecSuccess {
return dataTypeRef as? Data
} else {
return nil
}
}
/// Delete data from Keychain
func delete(service: String, account: String) -> Bool {
// Create query
let query: [String: Any] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrService as String : service,
kSecAttrAccount as String : account
]
let status = SecItemDelete(query as CFDictionary)
return status == errSecSuccess
}
}