-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
errSecItemNotFound after iCloud backup #36
Comments
Private keys can not be migrates. Public keys can. In this case you need to recreate the key pair. Also you should configure the public key to not be possible to migrate using the flags. |
What is the flag for public key to not migrate? Thank you |
Sorry, I meant protection id. You select one of the protection id's that fits your needs from here https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values?language=objc#1679100 Example with struct KeyPair {
static let manager: EllipticCurveKeyPair.Manager = {
let publicAccessControl = EllipticCurveKeyPair.AccessControl(protection: kSecAttrAccessibleAlwaysThisDeviceOnly, flags: [])
let privateAccessControl = EllipticCurveKeyPair.AccessControl(protection: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, flags: [.userPresence, .privateKeyUsage])
let config = EllipticCurveKeyPair.Config(
publicLabel: "payment.sign.public",
privateLabel: "payment.sign.private",
operationPrompt: "Confirm payment",
publicKeyAccessControl: publicAccessControl,
privateKeyAccessControl: privateAccessControl,
token: .secureEnclave)
return EllipticCurveKeyPair.Manager(config: config)
}()
} |
My problem is in this method:
Once I finish in the catch, the code throws "Error.probablyAuthenticationError(underlying: underlying)" and I can not recover the situation. Thanks for the tips until now |
In the event of an itunes backup and you get this error
Then you need to delete the key (pseudo code) do {
let privateKey = try manager.privateKey()
} catch {
if error == Error.probablyAuthenticationError {
try? manager.deleteKeyPair()
}
do {
let privateKey = try manager.privateKey()
} catch {
// this should be handled or reported back to user
}
} What is your minimum deployment target? If it is iOS 10 you are lucky, then I have another solution for you. |
yes, it is iOS 10. |
Awesome. Then you may choose to not store the public key and instead just derive it from the private key when needed using |
In the meantime of your changes how can I fix it? |
You need to regenerate the entire keypair |
I did it. |
I'm also facing the same issue after restoring the ios device. private key not found. able to get a public key. could you please share the code? |
It is not possible to restore a private key stored in the secure enclave |
Thank you. |
Hi,
after a backup from one iPhone to other, my app, throw this exception:
> Found public key, but couldn't find or access private key. The errSecItemNotFound error is sometimes wrongfully reported when LAContext authentication fails
I can not understand what the problem is.
Some advice? thank you.
The text was updated successfully, but these errors were encountered: