Skip to content

Commit

Permalink
Added migration to new format of touchId key store
Browse files Browse the repository at this point in the history
  • Loading branch information
mstarke committed Sep 6, 2022
1 parent 4932601 commit 87fd55e
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
1 change: 1 addition & 0 deletions MacPass/MPPasswordInputController.m
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ - (IBAction)unlockWithTouchID:(id)sender {
if(success) {
return;
}
// TODO: clear encryptedKey if password was wrong? Show user feedback?
self.touchIdButton.enabled = NO;
[self _showError:error];
}
Expand Down
23 changes: 22 additions & 1 deletion MacPass/MPSettingsHelper.m
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ + (void)migrateDefaults {
[self _migrateEntrySearchFlags];
[self _migrateRememberedKeyFiles];
[self _migrateLoadUnsecurePlugins];
[self _migrateTouchIdKeyStore];
[self _removeDeprecatedValues];
}

Expand Down Expand Up @@ -311,7 +312,27 @@ + (void)_migrateLoadUnsecurePlugins {
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

0 comments on commit 87fd55e

Please sign in to comment.