diff --git a/Cartfile b/Cartfile index 7cbcc8ce..2e749ae4 100644 --- a/Cartfile +++ b/Cartfile @@ -1,3 +1,3 @@ github "sparkle-project/Sparkle" ~> 1.13.1 -github "mstarke/KeePassKit" "d12bcc5e2e16115db19e26b6aaa29b62d23ce04b" +github "mstarke/KeePassKit" "f4f7c56c2c081ae129f88e6004411ecc8ef9ae0c" github "mstarke/HNHUi" ~> 1.1 diff --git a/Cartfile.resolved b/Cartfile.resolved index f3c47535..7b2a37f6 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,3 +1,3 @@ github "mstarke/HNHUi" "1.1" -github "mstarke/KeePassKit" "d12bcc5e2e16115db19e26b6aaa29b62d23ce04b" +github "mstarke/KeePassKit" "f4f7c56c2c081ae129f88e6004411ecc8ef9ae0c" github "sparkle-project/Sparkle" "1.14.0" diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index fabacb00..dae6b605 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -1495,7 +1495,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = MP; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = "HicknHack Software GmbH"; TargetAttributes = { 4C77E36115B84A240093A587 = { diff --git a/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme b/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme index 944c3506..a390e86c 100644 --- a/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme +++ b/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme @@ -1,6 +1,6 @@ - + + - + + + - + @@ -16,16 +18,12 @@ - + - - - - - + @@ -41,7 +39,7 @@ - + @@ -72,7 +70,7 @@ Gw - + @@ -91,24 +89,24 @@ Gw - - + + - - + + - - + + @@ -120,16 +118,16 @@ Gw - - + + - - + + @@ -150,15 +148,13 @@ Gw - + - - @@ -203,126 +199,165 @@ Gw - - + + - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + @@ -558,7 +593,7 @@ Gw - + diff --git a/MacPass/MPDatabaseSettingsWindowController.h b/MacPass/MPDatabaseSettingsWindowController.h index b6ecb079..dfc8c826 100644 --- a/MacPass/MPDatabaseSettingsWindowController.h +++ b/MacPass/MPDatabaseSettingsWindowController.h @@ -29,13 +29,11 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) { @property (weak) IBOutlet NSColorWell *databaseColorColorWell; /* Security Tab */ -@property (weak) IBOutlet NSButton *protectTitleCheckButton; -@property (weak) IBOutlet NSButton *protectUserNameCheckButton; -@property (weak) IBOutlet NSButton *protectPasswortCheckButton; -@property (weak) IBOutlet NSButton *protectURLCheckButton; -@property (weak) IBOutlet NSButton *protectNotesCheckButton; -@property (weak) IBOutlet NSTextField *encryptionRoundsTextField; -@property (weak) IBOutlet NSButton *benchmarkButton; +@property (weak) IBOutlet NSTextField *AESEncryptionRoundsTextField; +@property (weak) IBOutlet NSButton *createKeyDerivationParametersButton; +@property (weak) IBOutlet NSPopUpButton *encryptionPopupButton; +@property (weak) IBOutlet NSPopUpButton *keyDerivationPopupButton; + /* Advanced Tab*/ @property (weak) IBOutlet NSButton *enableHistoryCheckButton; diff --git a/MacPass/MPDatabaseSettingsWindowController.m b/MacPass/MPDatabaseSettingsWindowController.m index bd5ae882..c60ba84f 100644 --- a/MacPass/MPDatabaseSettingsWindowController.m +++ b/MacPass/MPDatabaseSettingsWindowController.m @@ -46,7 +46,23 @@ NSAssert(self.document != nil, @"Document needs to be present"); self.sectionTabView.delegate = self; - self.encryptionRoundsTextField.formatter = [[MPNumericalInputFormatter alloc] init]; + self.AESEncryptionRoundsTextField.formatter = [[MPNumericalInputFormatter alloc] init]; + + + NSMenu *kdfMenu = [[NSMenu alloc] init]; + NSArray *keyderivations = [KPKKeyDerivation availableKeyDerivations]; + for(KPKKeyDerivation *kd in keyderivations) { + [kdfMenu addItemWithTitle:kd.name action:NULL keyEquivalent:@""]; + kdfMenu.itemArray.lastObject.representedObject = kd.uuid; + } + self.keyDerivationPopupButton.menu = kdfMenu; + NSMenu *cipherMenu = [[NSMenu alloc] init]; + NSArray *ciphers = [KPKCipher availableCiphers]; + for(KPKCipher *cipher in ciphers) { + [cipherMenu addItemWithTitle:cipher.name action:NULL keyEquivalent:@""]; + cipherMenu.itemArray.lastObject.representedObject = cipher.uuid; + } + self.encryptionPopupButton.menu = cipherMenu; } #pragma mark Actions @@ -94,25 +110,9 @@ /* Security */ - metaData.protectNotes = HNHUIBoolForState(self.protectNotesCheckButton.state); - metaData.protectPassword = HNHUIBoolForState(self.protectPasswortCheckButton.state); - metaData.protectTitle = HNHUIBoolForState(self.protectTitleCheckButton.state); - metaData.protectUrl = HNHUIBoolForState(self.protectURLCheckButton.state); - metaData.protectUserName = HNHUIBoolForState(self.protectUserNameCheckButton.state); - metaData.defaultUserName = self.defaultUsernameTextField.stringValue; - - /* - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setBool:protectNotes forKey:kMPSettingsKeyLegacyHideNotes]; - [defaults setBool:protectPassword forKey:kMPSettingsKeyLegacyHidePassword]; - [defaults setBool:protectTitle forKey:kMPSettingsKeyLegacyHideTitle]; - [defaults setBool:protectURL forKey:kMPSettingsKeyLegacyHideURL]; - [defaults setBool:protectUsername forKey:kMPSettingsKeyLegacyHideUsername]; - [defaults synchronize]; - */ - metaData.keyDerivationParameters = @{ KPKAESRoundsOption : [[KPKNumber alloc] initWithUnsignedInteger64: MAX(0,self.encryptionRoundsTextField.integerValue)]}; + metaData.keyDerivationParameters = @{ KPKAESRoundsOption : [[KPKNumber alloc] initWithUnsignedInteger64: MAX(0,self.AESEncryptionRoundsTextField.integerValue)]}; /* Register an action to enable promts when user cloeses without saving */ [self.document updateChangeCount:NSChangeDone]; @@ -124,10 +124,10 @@ } - (IBAction)benchmarkRounds:(id)sender { - [self.benchmarkButton setEnabled:NO]; + self.createKeyDerivationParametersButton.enabled = NO; [KPKAESKeyDerivation parametersForDelay:1 completionHandler:^(NSDictionary * _Nonnull options) { - self.encryptionRoundsTextField.integerValue = [options[KPKAESRoundsOption] unsignedInteger64Value]; - self.benchmarkButton.enabled = YES; + self.AESEncryptionRoundsTextField.integerValue = [options[KPKAESRoundsOption] unsignedInteger64Value]; + self.createKeyDerivationParametersButton.enabled = YES; }]; } @@ -141,7 +141,7 @@ /* Update all stuff that might have changed */ KPKMetaData *metaData = ((MPDocument *)self.document).tree.metaData; [self _setupDatabaseTab:metaData]; - [self _setupProtectionTab:metaData]; + [self _setupSecurityTab:metaData]; [self _setupAdvancedTab:((MPDocument *)self.document).tree]; self.isDirty = NO; } @@ -180,16 +180,10 @@ self.databaseColorColorWell.color = databaseColor; } -- (void)_setupProtectionTab:(KPKMetaData *)metaData { - self.protectNotesCheckButton.state = HNHUIStateForBool(metaData.protectNotes); - self.protectPasswortCheckButton.state = HNHUIStateForBool(metaData.protectPassword); - self.protectTitleCheckButton.state = HNHUIStateForBool(metaData.protectTitle); - self.protectURLCheckButton.state = HNHUIStateForBool(metaData.protectUrl); - self.protectUserNameCheckButton.state = HNHUIStateForBool(metaData.protectUserName); - - [self.encryptionRoundsTextField setIntegerValue:[metaData.keyDerivationParameters[KPKAESRoundsOption] unsignedInteger64Value]]; +- (void)_setupSecurityTab:(KPKMetaData *)metaData { + [self.AESEncryptionRoundsTextField setIntegerValue:[metaData.keyDerivationParameters[KPKAESRoundsOption] unsignedInteger64Value]]; - [self.benchmarkButton setEnabled:YES]; + self.createKeyDerivationParametersButton.enabled = YES; } - (void)_setupAdvancedTab:(KPKTree *)tree { @@ -229,7 +223,7 @@ break; case MPDatabaseSettingsTabSecurity: - [self.window makeFirstResponder:self.protectTitleCheckButton]; + //[self.window makeFirstResponder:self.protectTitleCheckButton]; break; case MPDatabaseSettingsTabGeneral: diff --git a/MacPass/MPDocumentWindowController.m b/MacPass/MPDocumentWindowController.m index 4626b332..0e093a1a 100644 --- a/MacPass/MPDocumentWindowController.m +++ b/MacPass/MPDocumentWindowController.m @@ -199,7 +199,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword); NSString *fileType = document.fileType; /* we did open as legacy */ if([fileType isEqualToString:MPKdbDocumentUTI]) { - if(document.tree.minimumType != KPKDatabaseFormatKdb) { + if(document.tree.minimumFormat != KPKDatabaseFormatKdb) { NSAlert *alert = [[NSAlert alloc] init]; alert.alertStyle = NSWarningAlertStyle; alert.messageText = NSLocalizedString(@"WARNING_ON_LOSSY_SAVE", ""); diff --git a/MacPass/MPPasswordEditWindowController.m b/MacPass/MPPasswordEditWindowController.m index 8d51f27c..9ef4d6fe 100644 --- a/MacPass/MPPasswordEditWindowController.m +++ b/MacPass/MPPasswordEditWindowController.m @@ -117,7 +117,7 @@ - (IBAction)generateKey:(id)sender { MPDocument *document = self.document; - NSData *data = [NSData generateKeyfiledataForVersion:document.tree.minimumType]; + NSData *data = [NSData generateKeyfiledataForVersion:document.tree.minimumFormat]; if(data) { NSSavePanel *savePanel = [NSSavePanel savePanel]; savePanel.allowedFileTypes = @[@"key", @"xml"]; diff --git a/MacPass/MPSavePanelAccessoryViewController.m b/MacPass/MPSavePanelAccessoryViewController.m index 51b79bdc..cbe8e604 100644 --- a/MacPass/MPSavePanelAccessoryViewController.m +++ b/MacPass/MPSavePanelAccessoryViewController.m @@ -82,7 +82,7 @@ - (void)_updateNote { NSString *uti = self.fileTypePopupButton.selectedItem.representedObject; - BOOL showInfoText = (self.document.tree.minimumType == KPKDatabaseFormatKdbx && [uti isEqualToString:MPKdbDocumentUTI]); + BOOL showInfoText = (self.document.tree.minimumFormat == KPKDatabaseFormatKdbx && [uti isEqualToString:MPKdbDocumentUTI]); self.infoTextField.hidden = !showInfoText; }