Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class func save(service: NSString, data: NSString) {
- var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
- // Instantiate a new default keychain query
- var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, dataFromString], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])
- // Delete any existing items
- SecItemDelete(keychainQuery as CFDictionaryRef)
- // Add the new keychain item
- var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
- // Check that it worked ok
- println("Saving status code is: (status)")
- }
- class func load(service: NSString) -> AnyObject? {
- // Instantiate a new default keychain query
- // Tell the query to return a result
- // Limit our results to one item
- var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, kCFBooleanTrue, kSecMatchLimitOne], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData, kSecMatchLimit])
- // I'm not too sure what's happening here...
- var dataTypeRef :Unmanaged<AnyObject>?
- // Search for the keychain items
- let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef)
- println("Loading status code is: (status)")
- // I'm not too sure what's happening here...
- let opaque = dataTypeRef?.toOpaque()
- if let op = opaque? {
- let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
- println("Retrieved the following data from the keychain: (retrievedData)")
- var str = NSString(data: retrievedData, encoding: NSUTF8StringEncoding)
- println("The decoded string is (str)")
- } else {
- println("Nothing was retrieved from the keychain.")
- }
- return nil
- }
- KeychainService.saveToken("sometoken")
- KeychainService.loadToken()
- class func saveToken(token: NSString) {
- self.save("service", data: token)
- }
- class func loadToken() {
- var token = self.load("service")
- if let t = token {
- println("The token is: (t)")
- }
- }
- Saving status code is: 0
- Loading status code is: 0
- Retrieved the following data from the keychain: <736f6d65 746f6b65 6e>
- The decoded string is sometoken
- let kSecClassValue = kSecClass.takeRetainedValue() as NSString
- let kSecAttrAccountValue = kSecAttrAccount.takeRetainedValue() as NSString
- let kSecValueDataValue = kSecValueData.takeRetainedValue() as NSString
- let kSecClassGenericPasswordValue = kSecClassGenericPassword.takeRetainedValue() as NSString
- let kSecAttrServiceValue = kSecAttrService.takeRetainedValue() as NSString
- let kSecMatchLimitValue = kSecMatchLimit.takeRetainedValue() as NSString
- let kSecReturnDataValue = kSecReturnData.takeRetainedValue() as NSString
- let kSecMatchLimitOneValue = kSecMatchLimitOne.takeRetainedValue() as NSString
- var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, userAccount, kCFBooleanTrue, kSecMatchLimitOneValue], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue, kSecMatchLimitValue])
- let keychain = KeychainSwift()
- keychain.set("hello world", forKey: "my key")
- keychain.get("my key")
- keychain.delete("my key")
- let saveSuccessful: Bool = KeychainWrapper.setString("Some String", forKey: "myKey")
- let retrievedString: String? = KeychainWrapper.stringForKey("myKey")
- let removeSuccessful: Bool = KeychainWrapper.removeObjectForKey("myKey")
- // Saving password associated with the login and service
- let userAccount = "user's login"
- let service = "service name"
- let passwordData: NSData = self.textfield_password.text!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
- let keychainQuery: [NSString: NSObject] = [
- kSecClass: kSecClassGenericPassword,
- kSecAttrAccount: userAccount,
- kSecAttrService: service,
- kSecValueData: passwordData]
- SecItemDelete(keychainQuery as CFDictionaryRef) //Deletes the item just in case it already exists
- let keychain_save_status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
- print("Keychain saving code is: (keychain_save_status)")
- ...
- // Getting the password associated with the login and service
- let userAccount = "user's login"
- let service = "service name"
- let keychainQuery: [NSString: NSObject] = [
- kSecClass: kSecClassGenericPassword,
- kSecAttrService: service,
- kSecAttrAccount: userAccount,
- kSecReturnData: kCFBooleanTrue,
- kSecMatchLimit: kSecMatchLimitOne]
- var rawResult: AnyObject?
- let keychain_get_status: OSStatus = SecItemCopyMatching(keychainQuery, &rawResult)
- print("Keychain getting code is: (keychain_get_status)")
- if (keychain_get_status == errSecSuccess) {
- let retrievedData = rawResult as? NSData
- let pass = NSString(data: retrievedData!, encoding: NSUTF8StringEncoding)
- print("Username: (userAccount), password: (pass!)")
- // Do your work with the retrieved password here
- } else {
- print("No login data found in Keychain.")
- ...
- //Deleting user's credentials from Keychain. Password is optional for the query when you delete, in most cases you won't know it after all.
- let userAccount = "user's login"
- let service = "service name"
- let keychainQuery: [NSString: NSObject] = [
- kSecClass: kSecClassGenericPassword,
- kSecAttrAccount: userAccount,
- kSecAttrService: service]
- let keychain_delete_status: OSStatus = SecItemDelete(keychainQuery as CFDictionaryRef)
- print("Keychain deleting code is: (keychain_delete_status)")
- class func save(service: NSString, data: NSString) {
- var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
- // Instantiate a new default keychain query
- var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, dataFromString], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])
- // Delete any existing items
- SecItemDelete(keychainQuery as CFDictionaryRef)
- // Add the new keychain item
- var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
- // Check that it worked ok
- println("Saving status code is: (status)")
- }
- class func load(service: NSString) -> AnyObject? {
- // Instantiate a new default keychain query
- // Tell the query to return a result
- // Limit our results to one item
- var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, kCFBooleanTrue, kSecMatchLimitOne], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData, kSecMatchLimit])
- // I'm not too sure what's happening here...
- var dataTypeRef :Unmanaged<AnyObject>?
- // Search for the keychain items
- let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef)
- println("Loading status code is: (status)")
- // I'm not too sure what's happening here...
- let opaque = dataTypeRef?.toOpaque()
- if let op = opaque? {
- let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
- println("Retrieved the following data from the keychain: (retrievedData)")
- var str = NSString(data: retrievedData, encoding: NSUTF8StringEncoding)
- println("The decoded string is (str)")
- } else {
- println("Nothing was retrieved from the keychain.")
- }
- return nil
- }
- KeychainService.saveToken("sometoken")
- KeychainService.loadToken()
- class func saveToken(token: NSString) {
- self.save("service", data: token)
- }
- class func loadToken() {
- var token = self.load("service")
- if let t = token {
- println("The token is: (t)")
- }
- }
- Saving status code is: 0
- Loading status code is: 0
- Retrieved the following data from the keychain: <736f6d65 746f6b65 6e>
- The decoded string is sometoken
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement