TegKeychain.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // TegKeychain.swift
  3. // keychain
  4. //
  5. // Created by Evgenii Neumerzhitckii on 5/02/2015.
  6. // Copyright (c) 2015 The Exchange Group Pty Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import Security
  10. class Keychain {
  11. class func save(key: String, data: NSData) -> Bool {
  12. let query = [
  13. kSecClass as String : kSecClassGenericPassword as String,
  14. kSecAttrAccount as String : key,
  15. kSecValueData as String : data ]
  16. SecItemDelete(query as CFDictionaryRef)
  17. let status: OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
  18. return status == noErr
  19. }
  20. class func load(key: String) -> NSData? {
  21. let query = [
  22. kSecClass as String : kSecClassGenericPassword,
  23. kSecAttrAccount as String : key,
  24. kSecReturnData as String : kCFBooleanTrue,
  25. kSecMatchLimit as String : kSecMatchLimitOne ]
  26. var dataTypeRef :Unmanaged<AnyObject>?
  27. let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef)
  28. if status == noErr {
  29. return (dataTypeRef!.takeRetainedValue() as NSData)
  30. } else {
  31. return nil
  32. }
  33. }
  34. class func delete(key: String) -> Bool {
  35. let query = [
  36. kSecClass as String : kSecClassGenericPassword,
  37. kSecAttrAccount as String : key ]
  38. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  39. return status == noErr
  40. }
  41. class func clear() -> Bool {
  42. let query = [ kSecClass as String : kSecClassGenericPassword ]
  43. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  44. return status == noErr
  45. }
  46. }