TegKeychain.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 dataTypeRef :Unmanaged<AnyObject>?
  42. let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef)
  43. if status == noErr {
  44. if let currentDataTypeRef = dataTypeRef {
  45. return currentDataTypeRef.takeRetainedValue() as? NSData
  46. }
  47. }
  48. return nil
  49. }
  50. public class func delete(key: String) -> Bool {
  51. let query = [
  52. TegKeychainConstants.klass : kSecClassGenericPassword,
  53. TegKeychainConstants.attrAccount : key ]
  54. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  55. return status == noErr
  56. }
  57. public class func clear() -> Bool {
  58. let query = [ kSecClass as String : kSecClassGenericPassword ]
  59. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  60. return status == noErr
  61. }
  62. }