mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-17 02:49:23 +00:00
feature(touchIdSettings): Migrate touchID settings correctly to hashed databasefilenames
This commit is contained in:
@@ -1,8 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -48,7 +47,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jai-b6-Qv4">
|
<button horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jai-b6-Qv4">
|
||||||
<rect key="frame" x="-7" y="276" width="171" height="32"/>
|
<rect key="frame" x="-7" y="276" width="172" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Run Autotype Doctor…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="NP0-R3-m6n">
|
<buttonCell key="cell" type="push" title="Run Autotype Doctor…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="NP0-R3-m6n">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -252,7 +251,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="RenewTouchIdKey:" target="-2" id="dl7-WD-Abu"/>
|
<action selector="renewTouchIdKey:" target="-2" id="dl7-WD-Abu"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9kv-ns-mQx">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9kv-ns-mQx">
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPDocument+BiometricEncryptionSupport.h"
|
#import "MPDocument+BiometricEncryptionSupport.h"
|
||||||
#import "MPSettingsHelper.h"
|
|
||||||
#import "MPTouchIdCompositeKeyStore.h"
|
#import "MPTouchIdCompositeKeyStore.h"
|
||||||
|
#import "NSString+MPHash.h"
|
||||||
|
|
||||||
|
|
||||||
@implementation MPDocument (BiometricEncryptionSupport)
|
@implementation MPDocument (BiometricEncryptionSupport)
|
||||||
|
|
||||||
@@ -18,7 +19,8 @@
|
|||||||
if(nil == self.fileURL || nil == self.fileURL.lastPathComponent) {
|
if(nil == self.fileURL || nil == self.fileURL.lastPathComponent) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return [NSString stringWithFormat:kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, self.fileURL.lastPathComponent];
|
|
||||||
|
return [self.fileURL.lastPathComponent sha1HexDigest];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSData *)encryptedKeyData {
|
- (NSData *)encryptedKeyData {
|
||||||
|
|||||||
@@ -137,7 +137,7 @@
|
|||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Keychain Actions
|
#pragma mark Keychain Actions
|
||||||
- (IBAction)RenewTouchIdKey:(id)sender {
|
- (IBAction)renewTouchIdKey:(id)sender {
|
||||||
NSData* publicKeyTag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
NSData* publicKeyTag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
NSDictionary *publicKeyQuery = @{
|
NSDictionary *publicKeyQuery = @{
|
||||||
(id)kSecClass: (id)kSecClassKey,
|
(id)kSecClass: (id)kSecClassKey,
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
/* TouchID */
|
/* TouchID */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEnabled;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEnabled;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore; // NSDictionary with hased file names mapped to keys
|
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore; // NSDictionary with hased file names mapped to keys
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat;
|
|
||||||
|
|
||||||
/* Clipboard */
|
/* Clipboard */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyPasteboardClearTimeout;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyPasteboardClearTimeout;
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
#import "MPEntrySearchContext.h"
|
#import "MPEntrySearchContext.h"
|
||||||
#import "DDHotKey+MacPassAdditions.h" // Default hotkey;
|
#import "DDHotKey+MacPassAdditions.h" // Default hotkey;
|
||||||
|
|
||||||
|
#import "NSString+MPHash.h"
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout";
|
NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout";
|
||||||
NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearClipboardOnQuit";
|
NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearClipboardOnQuit";
|
||||||
NSString *const kMPSettingsKeyPreventUniversalClipboard = @"PreventUniversalClipboard";
|
NSString *const kMPSettingsKeyPreventUniversalClipboard = @"PreventUniversalClipboard";
|
||||||
@@ -69,7 +71,6 @@ NSString *const kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection = @"Gl
|
|||||||
|
|
||||||
NSString *const kMPSettingsKeyTouchIdEnabled = @"EnableSubsequentUnlocksWithTouchID";
|
NSString *const kMPSettingsKeyTouchIdEnabled = @"EnableSubsequentUnlocksWithTouchID";
|
||||||
NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore = @"TouchIdEncryptedKeyStore";
|
NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore = @"TouchIdEncryptedKeyStore";
|
||||||
NSString *const kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat = @"EncryptedDatabaseKeyForTouchID-%@";
|
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyEntrySearchFilterContext = @"EntrySearchFilterContext";
|
NSString *const kMPSettingsKeyEntrySearchFilterContext = @"EntrySearchFilterContext";
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ NSString *const kMPSettingsKeyAllowRemoteFetchOfPluginRepository = @"Al
|
|||||||
|
|
||||||
NSString *const kMPSettingsKeyFaviconDownloadMethod = @"FaviconDownloadMethod";
|
NSString *const kMPSettingsKeyFaviconDownloadMethod = @"FaviconDownloadMethod";
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyUseUnifiedToolbar =@"UseUnifiedToolbar";
|
NSString *const kMPSettingsKeyUseUnifiedToolbar = @"UseUnifiedToolbar";
|
||||||
|
|
||||||
/* Deprecated */
|
/* Deprecated */
|
||||||
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
||||||
@@ -113,6 +114,7 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"Sh
|
|||||||
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
||||||
NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
||||||
NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"AutotypeHideAccessibiltyWarning";
|
NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"AutotypeHideAccessibiltyWarning";
|
||||||
|
NSString *const kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat = @"EncryptedDatabaseKeyForTouchID-%@";
|
||||||
|
|
||||||
@implementation MPSettingsHelper
|
@implementation MPSettingsHelper
|
||||||
|
|
||||||
@@ -320,13 +322,13 @@ return deprecatedSettings;
|
|||||||
NSArray *defaultKeys = [NSUserDefaults.standardUserDefaults dictionaryRepresentation].allKeys;
|
NSArray *defaultKeys = [NSUserDefaults.standardUserDefaults dictionaryRepresentation].allKeys;
|
||||||
// find all keys in old format
|
// find all keys in old format
|
||||||
for(NSString *key in defaultKeys) {
|
for(NSString *key in defaultKeys) {
|
||||||
NSString *prefix = [NSString stringWithFormat:kMPSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, @""];
|
NSString *prefix = [NSString stringWithFormat:kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, @""];
|
||||||
if([key hasPrefix:prefix]) {
|
if([key hasPrefix:prefix]) {
|
||||||
// database name was adde
|
// database name was added
|
||||||
NSString *databaseName = [key substringFromIndex:prefix.length];
|
NSString *databaseNameHash = [key substringFromIndex:prefix.length].sha1HexDigest;
|
||||||
NSData *encryptedKey = [NSUserDefaults.standardUserDefaults dataForKey:key];
|
NSData *encryptedKey = [NSUserDefaults.standardUserDefaults dataForKey:key];
|
||||||
if(!storedKeys[databaseName] && encryptedKey) {
|
if(!storedKeys[databaseNameHash] && encryptedKey) {
|
||||||
storedKeys[databaseName] = encryptedKey;
|
storedKeys[databaseNameHash] = encryptedKey;
|
||||||
}
|
}
|
||||||
[NSUserDefaults.standardUserDefaults removeObjectForKey:key];
|
[NSUserDefaults.standardUserDefaults removeObjectForKey:key];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,9 +66,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME this behavour is wrong. Old keys do not get cleared so this leaves a lot of data behind that should be cleaned up*/
|
/* FIXME this behavour is wrong. Old keys do not get cleared so this leaves a lot of data behind that should be cleaned up*/
|
||||||
|
switch(self.touchIdEnabledState) {
|
||||||
MPTouchIDKeyStorage touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyTouchIdEnabled];
|
|
||||||
switch(touchIdMode) {
|
|
||||||
case MPTouchIDKeyStorageTransient:
|
case MPTouchIDKeyStorageTransient:
|
||||||
[NSUserDefaults.standardUserDefaults removeObjectForKey:documentKey];
|
[NSUserDefaults.standardUserDefaults removeObjectForKey:documentKey];
|
||||||
if(nil != encryptedCompositeKey) {
|
if(nil != encryptedCompositeKey) {
|
||||||
|
|||||||
Reference in New Issue
Block a user