Added migration to new format of touchId key store

This commit is contained in:
Michael Starke
2022-09-07 00:19:43 +02:00
parent 49326013fb
commit 87fd55e5ae
2 changed files with 23 additions and 1 deletions

View File

@@ -226,6 +226,7 @@
if(success) {
return;
}
// TODO: clear encryptedKey if password was wrong? Show user feedback?
self.touchIdButton.enabled = NO;
[self _showError:error];
}

View File

@@ -126,6 +126,7 @@ NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"Au
[self _migrateEntrySearchFlags];
[self _migrateRememberedKeyFiles];
[self _migrateLoadUnsecurePlugins];
[self _migrateTouchIdKeyStore];
[self _removeDeprecatedValues];
}
@@ -311,7 +312,27 @@ return deprecatedSettings;
if(oldValue != [[self _standardDefaults][kMPDepricatedSettingsKeyLoadUnsecurePlugins] boolValue]) {
[NSUserDefaults.standardUserDefaults setBool:oldValue forKey:kMPSettingsKeyLoadUnsecurePlugins];
}
}
+ (void)_migrateTouchIdKeyStore {
// Read keys stored in new format
NSMutableDictionary *storedKeys = [[NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyTouchIdEncryptedKeyStore] mutableCopy];
NSArray *defaultKeys = [NSUserDefaults.standardUserDefaults dictionaryRepresentation].allKeys;
// find all keys in old format
for(NSString *key in defaultKeys) {
NSString *prefix = [NSString stringWithFormat:kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, @""];
if([key hasPrefix:prefix]) {
// database name was adde
NSString *databaseName = [key substringFromIndex:prefix.length];
NSData *encryptedKey = [NSUserDefaults.standardUserDefaults dataForKey:key];
if(!storedKeys[databaseName] && encryptedKey) {
storedKeys[databaseName] = encryptedKey;
}
[NSUserDefaults.standardUserDefaults removeObjectForKey:key];
}
}
// Put it all back in
[NSUserDefaults.standardUserDefaults setObject:storedKeys forKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
}
@end