Advertisement
Guest User

Untitled

a guest
Oct 5th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.77 KB | None | 0 0
  1. class func save(service: NSString, data: NSString) {
  2. var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
  3. // Instantiate a new default keychain query
  4. var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, dataFromString], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])
  5.  
  6. // Delete any existing items
  7. SecItemDelete(keychainQuery as CFDictionaryRef)
  8.  
  9. // Add the new keychain item
  10. var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
  11.  
  12. // Check that it worked ok
  13. println("Saving status code is: (status)")
  14. }
  15.  
  16. class func load(service: NSString) -> AnyObject? {
  17. // Instantiate a new default keychain query
  18. // Tell the query to return a result
  19. // Limit our results to one item
  20. var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, kCFBooleanTrue, kSecMatchLimitOne], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData, kSecMatchLimit])
  21.  
  22.  
  23.  
  24. // I'm not too sure what's happening here...
  25. var dataTypeRef :Unmanaged<AnyObject>?
  26.  
  27. // Search for the keychain items
  28. let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef)
  29.  
  30.  
  31. println("Loading status code is: (status)")
  32.  
  33. // I'm not too sure what's happening here...
  34. let opaque = dataTypeRef?.toOpaque()
  35.  
  36. if let op = opaque? {
  37. let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
  38. println("Retrieved the following data from the keychain: (retrievedData)")
  39. var str = NSString(data: retrievedData, encoding: NSUTF8StringEncoding)
  40. println("The decoded string is (str)")
  41. } else {
  42. println("Nothing was retrieved from the keychain.")
  43. }
  44.  
  45. return nil
  46. }
  47.  
  48. KeychainService.saveToken("sometoken")
  49. KeychainService.loadToken()
  50.  
  51. class func saveToken(token: NSString) {
  52. self.save("service", data: token)
  53. }
  54.  
  55. class func loadToken() {
  56. var token = self.load("service")
  57. if let t = token {
  58. println("The token is: (t)")
  59. }
  60. }
  61.  
  62. Saving status code is: 0
  63. Loading status code is: 0
  64. Retrieved the following data from the keychain: <736f6d65 746f6b65 6e>
  65. The decoded string is sometoken
  66.  
  67. let kSecClassValue = kSecClass.takeRetainedValue() as NSString
  68. let kSecAttrAccountValue = kSecAttrAccount.takeRetainedValue() as NSString
  69. let kSecValueDataValue = kSecValueData.takeRetainedValue() as NSString
  70. let kSecClassGenericPasswordValue = kSecClassGenericPassword.takeRetainedValue() as NSString
  71. let kSecAttrServiceValue = kSecAttrService.takeRetainedValue() as NSString
  72. let kSecMatchLimitValue = kSecMatchLimit.takeRetainedValue() as NSString
  73. let kSecReturnDataValue = kSecReturnData.takeRetainedValue() as NSString
  74. let kSecMatchLimitOneValue = kSecMatchLimitOne.takeRetainedValue() as NSString
  75.  
  76. var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, userAccount, kCFBooleanTrue, kSecMatchLimitOneValue], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue, kSecMatchLimitValue])
  77.  
  78. let keychain = KeychainSwift()
  79. keychain.set("hello world", forKey: "my key")
  80. keychain.get("my key")
  81. keychain.delete("my key")
  82.  
  83. let saveSuccessful: Bool = KeychainWrapper.setString("Some String", forKey: "myKey")
  84.  
  85. let retrievedString: String? = KeychainWrapper.stringForKey("myKey")
  86.  
  87. let removeSuccessful: Bool = KeychainWrapper.removeObjectForKey("myKey")
  88.  
  89. // Saving password associated with the login and service
  90. let userAccount = "user's login"
  91. let service = "service name"
  92. let passwordData: NSData = self.textfield_password.text!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
  93.  
  94. let keychainQuery: [NSString: NSObject] = [
  95. kSecClass: kSecClassGenericPassword,
  96. kSecAttrAccount: userAccount,
  97. kSecAttrService: service,
  98. kSecValueData: passwordData]
  99.  
  100. SecItemDelete(keychainQuery as CFDictionaryRef) //Deletes the item just in case it already exists
  101. let keychain_save_status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
  102. print("Keychain saving code is: (keychain_save_status)")
  103.  
  104. ...
  105.  
  106. // Getting the password associated with the login and service
  107. let userAccount = "user's login"
  108. let service = "service name"
  109. let keychainQuery: [NSString: NSObject] = [
  110. kSecClass: kSecClassGenericPassword,
  111. kSecAttrService: service,
  112. kSecAttrAccount: userAccount,
  113. kSecReturnData: kCFBooleanTrue,
  114. kSecMatchLimit: kSecMatchLimitOne]
  115.  
  116. var rawResult: AnyObject?
  117. let keychain_get_status: OSStatus = SecItemCopyMatching(keychainQuery, &rawResult)
  118. print("Keychain getting code is: (keychain_get_status)")
  119.  
  120. if (keychain_get_status == errSecSuccess) {
  121. let retrievedData = rawResult as? NSData
  122. let pass = NSString(data: retrievedData!, encoding: NSUTF8StringEncoding)
  123. print("Username: (userAccount), password: (pass!)")
  124. // Do your work with the retrieved password here
  125. } else {
  126. print("No login data found in Keychain.")
  127.  
  128. ...
  129.  
  130. //Deleting user's credentials from Keychain. Password is optional for the query when you delete, in most cases you won't know it after all.
  131. let userAccount = "user's login"
  132. let service = "service name"
  133.  
  134. let keychainQuery: [NSString: NSObject] = [
  135. kSecClass: kSecClassGenericPassword,
  136. kSecAttrAccount: userAccount,
  137. kSecAttrService: service]
  138. let keychain_delete_status: OSStatus = SecItemDelete(keychainQuery as CFDictionaryRef)
  139. print("Keychain deleting code is: (keychain_delete_status)")
  140.  
  141. class func save(service: NSString, data: NSString) {
  142. var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
  143. // Instantiate a new default keychain query
  144. var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, dataFromString], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])
  145.  
  146. // Delete any existing items
  147. SecItemDelete(keychainQuery as CFDictionaryRef)
  148.  
  149. // Add the new keychain item
  150. var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef, nil)
  151.  
  152. // Check that it worked ok
  153. println("Saving status code is: (status)")
  154. }
  155.  
  156. class func load(service: NSString) -> AnyObject? {
  157. // Instantiate a new default keychain query
  158. // Tell the query to return a result
  159. // Limit our results to one item
  160. var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, kCFBooleanTrue, kSecMatchLimitOne], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData, kSecMatchLimit])
  161.  
  162.  
  163.  
  164. // I'm not too sure what's happening here...
  165. var dataTypeRef :Unmanaged<AnyObject>?
  166.  
  167. // Search for the keychain items
  168. let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef)
  169.  
  170.  
  171. println("Loading status code is: (status)")
  172.  
  173. // I'm not too sure what's happening here...
  174. let opaque = dataTypeRef?.toOpaque()
  175.  
  176. if let op = opaque? {
  177. let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
  178. println("Retrieved the following data from the keychain: (retrievedData)")
  179. var str = NSString(data: retrievedData, encoding: NSUTF8StringEncoding)
  180. println("The decoded string is (str)")
  181. } else {
  182. println("Nothing was retrieved from the keychain.")
  183. }
  184.  
  185. return nil
  186. }
  187.  
  188. KeychainService.saveToken("sometoken")
  189. KeychainService.loadToken()
  190.  
  191. class func saveToken(token: NSString) {
  192. self.save("service", data: token)
  193. }
  194.  
  195. class func loadToken() {
  196. var token = self.load("service")
  197. if let t = token {
  198. println("The token is: (t)")
  199. }
  200. }
  201.  
  202. Saving status code is: 0
  203. Loading status code is: 0
  204. Retrieved the following data from the keychain: <736f6d65 746f6b65 6e>
  205. The decoded string is sometoken
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement