TegKeychain.swift 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. kSecClass as String : kSecClassGenericPassword as String,
  20. kSecAttrAccount as String : key,
  21. kSecValueData as String : value ]
  22. SecItemDelete(query as CFDictionaryRef)
  23. let status: OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
  24. return status == noErr
  25. }
  26. public class func getString(key: String) -> String? {
  27. if let currentData = getData(key) {
  28. return NSString(data: currentData, encoding: NSUTF8StringEncoding)
  29. }
  30. return nil
  31. }
  32. public class func getData(key: String) -> NSData? {
  33. let query = [
  34. kSecClass as String : kSecClassGenericPassword,
  35. kSecAttrAccount as String : key,
  36. kSecReturnData as String : kCFBooleanTrue,
  37. kSecMatchLimit as String : kSecMatchLimitOne ]
  38. var dataTypeRef :Unmanaged<AnyObject>?
  39. let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef)
  40. if status == noErr {
  41. if let currentDataTypeRef = dataTypeRef {
  42. return currentDataTypeRef.takeRetainedValue() as? NSData
  43. }
  44. }
  45. return nil
  46. }
  47. public class func delete(key: String) -> Bool {
  48. let query = [
  49. kSecClass as String : kSecClassGenericPassword,
  50. kSecAttrAccount as String : key ]
  51. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  52. return status == noErr
  53. }
  54. public class func clear() -> Bool {
  55. let query = [ kSecClass as String : kSecClassGenericPassword ]
  56. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  57. return status == noErr
  58. }
  59. }