diff --git a/GPGServices.m b/GPGServices.m index 743c26d..85f7f1a 100644 --- a/GPGServices.m +++ b/GPGServices.m @@ -29,11 +29,9 @@ -(void)applicationDidFinishLaunching:(NSNotification *)aNotification -(void)importKey:(NSString *)inputString { - GPGData *inputData; - NSDictionary *importedKeys; + NSDictionary *importedKeys = nil; GPGContext *aContext = [[GPGContext alloc] init]; - - inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; + GPGData* inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; NS_DURING importedKeys=[aContext importKeyData:inputData]; @@ -94,9 +92,6 @@ - (GPGKey*)myPrivateKey { -(NSString *)myFingerprint { - NSString *result=nil; - GPGKey *myKey; - GPGOptions *myOptions=[[GPGOptions alloc] init]; NSString *keyID=[myOptions optionValueForName:@"default-key"]; [myOptions release]; @@ -108,7 +103,8 @@ -(NSString *)myFingerprint } GPGContext *aContext = [[GPGContext alloc] init]; - + + GPGKey *myKey = nil; NS_DURING myKey=[aContext keyFromFingerprint:keyID secretKey:NO]; if(myKey==nil) @@ -118,26 +114,23 @@ -(NSString *)myFingerprint return nil; } NS_HANDLER - result=nil; [self displayMessageWindowWithTitleText:@"Retrieving fingerprint failed." bodyText:[NSString stringWithFormat:@"%@",GPGErrorDescription([[[localException userInfo] objectForKey:@"GPGErrorKey"] intValue])]]; [aContext release]; return nil; NS_ENDHANDLER - result=[[myKey formattedFingerprint] copy]; [aContext release]; - return [result autorelease]; + return [[[myKey formattedFingerprint] copy] autorelease]; } -(NSString *)myKey { - NSString *result=nil; - GPGKey *myKey; - NSData *keyData; + NSData *keyData = nil; GPGOptions *myOptions=[[GPGOptions alloc] init]; NSString *keyID=[myOptions optionValueForName:@"default-key"]; [myOptions release]; + if(keyID==nil) { [self displayMessageWindowWithTitleText:@"Default key not set." bodyText:@"No default key is specified in the GPG Preferences."]; @@ -149,7 +142,7 @@ -(NSString *)myKey [aContext setUsesTextMode:YES]; NS_DURING - myKey=[aContext keyFromFingerprint:keyID secretKey:NO]; + GPGKey* myKey=[aContext keyFromFingerprint:keyID secretKey:NO]; if(myKey==nil) { [self displayMessageWindowWithTitleText:@"Found no key." bodyText:@"Could not retrieve your key from keychain (maybe you've not set a default key in ~/.gnupg/gpg.conf)"]; @@ -164,25 +157,24 @@ -(NSString *)myKey return nil; } NS_HANDLER - result=nil; [self displayMessageWindowWithTitleText:@"Exporting key failed." bodyText:[NSString stringWithFormat:@"%@",GPGErrorDescription([[[localException userInfo] objectForKey:@"GPGErrorKey"] intValue])]]; [aContext release]; return nil; NS_ENDHANDLER [aContext release]; - result=[[NSString alloc] initWithData:keyData encoding:NSUTF8StringEncoding]; - return [result autorelease]; + return [[[NSString alloc] initWithData:keyData + encoding:NSUTF8StringEncoding] autorelease]; } -(NSString *)encryptTextString:(NSString *)inputString { - GPGData *inputData, *outputData; - GPGContext *aContext = [[GPGContext alloc] init]; + GPGContext *aContext = [[GPGContext alloc] init]; + [aContext setUsesArmor:YES]; + BOOL trustsAllKeys = YES; + GPGData *outputData = nil; - [aContext setUsesArmor:YES]; - RecipientWindowController* rcp = [[RecipientWindowController alloc] init]; int ret = [rcp runModal]; [rcp release]; @@ -191,7 +183,7 @@ -(NSString *)encryptTextString:(NSString *)inputString [aContext release]; return nil; } else { - inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; + GPGData *inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; BOOL sign = rcp.sign; NSArray* validRecipients = rcp.selectedKeys; @@ -237,12 +229,12 @@ -(NSString *)encryptTextString:(NSString *)inputString -(NSString *)decryptTextString:(NSString *)inputString { - GPGData *inputData, *outputData; + GPGData *outputData = nil; GPGContext *aContext = [[GPGContext alloc] init]; [aContext setPassphraseDelegate:self]; - inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; + GPGData *inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; NS_DURING outputData=[aContext decryptedData:inputData]; @@ -271,13 +263,10 @@ -(NSString *)decryptTextString:(NSString *)inputString -(NSString *)signTextString:(NSString *)inputString { - GPGData *inputData, *outputData; GPGContext *aContext = [[GPGContext alloc] init]; - [aContext setPassphraseDelegate:self]; - inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; - + GPGData *inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; GPGKey* chosenKey = [self myPrivateKey]; NSSet* availableKeys = [self myKeys]; @@ -301,6 +290,7 @@ -(NSString *)signTextString:(NSString *)inputString return nil; } + GPGData *outputData = nil; NS_DURING outputData=[aContext signedData:inputData signatureMode:GPGSignatureModeClear]; NS_HANDLER @@ -334,14 +324,11 @@ -(NSString *)signTextString:(NSString *)inputString -(void)verifyTextString:(NSString *)inputString { - GPGData *inputData; - NSArray *sigs; - GPGSignature *sig; - NSString *userID, *validity; GPGContext *aContext = [[GPGContext alloc] init]; - inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; + GPGData* inputData=[[GPGData alloc] initWithDataNoCopy:[inputString dataUsingEncoding:NSUTF8StringEncoding]]; + NSArray *sigs = nil; NS_DURING sigs=[aContext verifySignedData:inputData originalData:nil]; NS_HANDLER @@ -358,11 +345,11 @@ -(void)verifyTextString:(NSString *)inputString if([sigs count]>0) { - sig=[sigs objectAtIndex:0]; + GPGSignature* sig=[sigs objectAtIndex:0]; if(GPGErrorCodeFromError([sig status])==GPGErrorNoError) { - userID=[[aContext keyFromFingerprint:[sig fingerprint] secretKey:NO] userID]; - validity=[sig validityDescription]; + NSString* userID=[[aContext keyFromFingerprint:[sig fingerprint] secretKey:NO] userID]; + NSString* validity=[sig validityDescription]; [self displayMessageWindowWithTitleText:@"Verification successful." bodyText:[NSString stringWithFormat:@"Good signature (%@ trust):\n\"%@\"",validity,userID]]; } else @@ -472,21 +459,18 @@ - (void)encryptFiles:(NSArray*)files { -(void)dealWithPasteboard:(NSPasteboard *)pboard userData:(NSString *)userData mode:(ServiceModeEnum)mode error:(NSString **)error { - NSString *pboardString; - NSString *newString=nil; - NSString *type; - [self cancelTerminateTimer]; [NSApp activateIgnoringOtherApps:YES]; + NSString *pboardString = nil; if(mode!=MyKeyService && mode!=MyFingerprintService) { - type = [pboard availableTypeFromArray:[NSArray arrayWithObjects: - NSHTMLPboardType, - NSStringPboardType, - NSRTFPboardType, - NSFilenamesPboardType, - nil]]; + NSString* type = [pboard availableTypeFromArray:[NSArray arrayWithObjects: + NSHTMLPboardType, + NSStringPboardType, + NSRTFPboardType, + NSFilenamesPboardType, + nil]]; if([type isEqualToString:NSHTMLPboardType]) { @@ -523,6 +507,7 @@ -(void)dealWithPasteboard:(NSPasteboard *)pboard userData:(NSString *)userData m } } + NSString *newString=nil; switch(mode) { case SignService: @@ -621,11 +606,9 @@ -(void)displayMessageWindowWithTitleText:(NSString *)title bodyText:(NSString *) -(NSString *)context:(GPGContext *)context passphraseForKey:(GPGKey *)key again:(BOOL)again { - NSString *passphrase; - int flag; [passphraseText setStringValue:@""]; - flag=[NSApp runModalForWindow:passphraseWindow]; - passphrase=[[[passphraseText stringValue] copy] autorelease]; + int flag=[NSApp runModalForWindow:passphraseWindow]; + NSString *passphrase=[[[passphraseText stringValue] copy] autorelease]; [passphraseWindow close]; if(flag) return passphrase; diff --git a/PrivateKeyChooserWindow.xib b/PrivateKeyChooserWindow.xib index acdaba0..fc3e1cd 100644 --- a/PrivateKeyChooserWindow.xib +++ b/PrivateKeyChooserWindow.xib @@ -49,7 +49,7 @@ 2 {{196, 240}, {480, 100}} 544735232 - Select Private-Key + Select Private-Key - GPGServices NSWindow @@ -63,6 +63,7 @@ {{302, 12}, {164, 32}} + YES 67239424 @@ -110,6 +111,7 @@ {{17, 56}, {446, 26}} + YES -2076049856 @@ -181,7 +183,7 @@ {{7, 11}, {480, 100}} - + {{0, 0}, {1280, 778}} {1e+13, 1e+13} @@ -230,6 +232,30 @@ 28 + + + initialFirstResponder + + + + 31 + + + + nextKeyView + + + + 33 + + + + nextKeyView + + + + 35 + @@ -294,21 +320,6 @@ - - 5 - - - YES - - - - cancelButton - - - 6 - - - 22 @@ -339,8 +350,8 @@ - 25 - + 27 + @@ -349,10 +360,25 @@ - 27 - + 25 + + + 5 + + + YES + + + + cancelButton + + + 6 + + + @@ -406,7 +432,7 @@ - 28 + 50 diff --git a/RecipientWindow.xib b/RecipientWindow.xib index d8a947f..4716218 100644 --- a/RecipientWindow.xib +++ b/RecipientWindow.xib @@ -51,7 +51,7 @@ 2 {{515, 167}, {667, 227}} 1081606144 - GPGServices + Choose Recipients - GPGServices NSWindow @@ -840,6 +840,54 @@ 67 + + + initialFirstResponder + + + + 68 + + + + nextKeyView + + + + 69 + + + + nextKeyView + + + + 70 + + + + nextKeyView + + + + 71 + + + + nextKeyView + + + + 72 + + + + nextKeyView + + + + 73 + @@ -888,8 +936,8 @@ - + @@ -1329,7 +1377,7 @@ - 67 + 73 diff --git a/RecipientWindowController.m b/RecipientWindowController.m index fbde85e..012f348 100644 --- a/RecipientWindowController.m +++ b/RecipientWindowController.m @@ -133,6 +133,8 @@ - (id)tableView:(NSTableView *)tableView } - (void)displayItemsMatchingString:(NSString*)searchString { + NSArray* oldSelectedKeys = self.selectedKeys; + if(searchString == nil || [searchString isEqualToString:@""]) { [keysMatchingSearch release]; @@ -155,9 +157,14 @@ - (void)displayItemsMatchingString:(NSString*)searchString { [keysMatchingSearch release]; keysMatchingSearch = [newFilteredArray retain]; } - - [tableView deselectAll:self]; - [tableView reloadData]; + + NSSet* oldKeySet = [NSSet setWithArray:oldSelectedKeys]; + NSIndexSet* idxsOfSelectedKeys = [keysMatchingSearch indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { + return [oldKeySet containsObject:obj]; + }]; + + [tableView reloadData]; + [tableView selectRowIndexes:idxsOfSelectedKeys byExtendingSelection:NO]; } - (void)controlTextDidChange:(NSNotification *)aNotification {