TegKeychain.swift 2.1 KB

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