Hello,
Try to create and retreive a symmetric key from keychain :
add the key
-----------------------------------
let key = Data.init(repeating: 0xee, count: 32)
let name = "test"
let attributes = [kSecAttrKeyType: kSecAttrKeyTypeAES, kSecAttrKeySizeInBits: NSNumber.init(value: 256)] as CFDictionary
var error: Unmanaged<CFError>?
let secKey = SecKeyCreateFromData(attributes, key as CFData, &error)
let addquery = [kSecClass: kSecClassKey,
kSecAttrKeyClass: kSecAttrKeyClassSymmetric,
kSecAttrLabel: name,
kSecValueRef: secKey!] as CFDictionary
let status = SecItemAdd(addquery as CFDictionary, nil)
if status != errSecSuccess
{
print(SecCopyErrorMessageString(status, nil)!)
}
-----------------------------------
The keychain item is created
Get the key
-----------------------------------
let name = "test"
let getquery = [kSecClass: kSecClassKey,
kSecAttrKeyClass: kSecAttrKeyClassSymmetric,
kSecAttrLabel: name] as [CFString : Any]
var secKey: CFTypeRef?
let status = SecItemCopyMatching(getquery as CFDictionary, &secKey)
if status == errSecSuccess
{
if let dic = SecKeyCopyAttributes(secKey as! SecKey) as? [CFString: Any]
{
if let key = dic[kSecValueData] { print("Ok") }
else { print("Cannot get the key") }
}
else
{
print("Error retrieving dictionnary")
}
}
else
{
print(SecCopyErrorMessageString(status, nil)!)
}
-----------------------------------
If the key is added and retreive in the same process it works. The number of elements in the dic is 21.
But if later (in another process) i try to get the key stored in keychain i get the dictionnary but not the key. The number of elements in the dic is 20 (kSecValueData is missing).
What parameters are missing to get the key ?
Thank you