TegKeychain.swift 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import UIKit
  2. import Security
  3. public class TegKeychain {
  4. public class func set(key: String, value: String) -> Bool {
  5. if let currentData = value.dataUsingEncoding(NSUTF8StringEncoding) {
  6. return set(key, value: currentData)
  7. }
  8. return false
  9. }
  10. public class func set(key: String, value: NSData) -> Bool {
  11. let query = [
  12. TegKeychainConstants.klass : TegKeychainConstants.classGenericPassword,
  13. TegKeychainConstants.attrAccount : key,
  14. TegKeychainConstants.valueData : value ]
  15. SecItemDelete(query as CFDictionaryRef)
  16. let status: OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
  17. return status == noErr
  18. }
  19. public class func get(key: String) -> String? {
  20. if let currentData = getData(key) {
  21. if let currentString = NSString(data: currentData,
  22. encoding: NSUTF8StringEncoding) as? String {
  23. return currentString
  24. }
  25. }
  26. return nil
  27. }
  28. public class func getData(key: String) -> NSData? {
  29. let query = [
  30. TegKeychainConstants.klass : kSecClassGenericPassword,
  31. TegKeychainConstants.attrAccount : key,
  32. TegKeychainConstants.returnData : kCFBooleanTrue,
  33. TegKeychainConstants.matchLimit : kSecMatchLimitOne ]
  34. var result: AnyObject?
  35. let status = withUnsafeMutablePointer(&result) {
  36. SecItemCopyMatching(query, UnsafeMutablePointer($0))
  37. }
  38. if status == noErr { return result as? NSData }
  39. return nil
  40. }
  41. public class func delete(key: String) -> Bool {
  42. let query = [
  43. TegKeychainConstants.klass : kSecClassGenericPassword,
  44. TegKeychainConstants.attrAccount : key ]
  45. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  46. return status == noErr
  47. }
  48. public class func clear() -> Bool {
  49. let query = [ kSecClass as String : kSecClassGenericPassword ]
  50. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  51. return status == noErr
  52. }
  53. }