This is Cryptor.m in view mode; [Download] [Up]
#import "Cryptor.h" @implementation Cryptor - init { if(![NSBundle loadNibNamed:@"Cryptor" owner:self]) { fprintf(stderr,"Can't load Cryptor.nib\n"); exit(1); } statusRange.location = 0; statusRange.length = 0; outputRange.location = 0; outputRange.length = 0; [super init]; return self; } - (NSData *) runpgp:(int)mode options:(NSMutableArray *)lineOpts data:(NSData *)pgpDataIn { NSTask *pgpTask; NSPipe *toPGP,*fromPGP,*errPGP; NSFileHandle *readHandle,*writeHandle; NSFileHandle *errHandle; NSData *pgpOutput; NSMutableData *pgpError; NSString *mainDir; NSMutableString *launchPath; NSString *recipID,*userID,*passPhrase; int errorLength,outputLength; char *errorBuffer,*outputBuffer; NSString *errorString,*outputString; toPGP = [NSPipe pipe]; fromPGP = [NSPipe pipe]; errPGP = [NSPipe pipe]; readHandle = [fromPGP fileHandleForReading]; writeHandle = [toPGP fileHandleForWriting]; errHandle = [errPGP fileHandleForReading]; pgpTask = [[NSTask alloc] init]; [pgpTask setStandardOutput:fromPGP]; [pgpTask setStandardInput:toPGP]; [pgpTask setStandardError:errPGP]; mainDir = [[NSBundle mainBundle] bundlePath]; switch (mode) { case ENCRYPT: [lineOpts addObject:@"+batchmode"]; [lineOpts addObject:@"+force"]; [lineOpts addObject:@"+encrypttoself=on"]; [lineOpts addObject:@"-f"]; [lineOpts addObject:@"-a"]; if([lineOpts containsObject:@"-s"]) { [self getEncryptAndSignInfo:&recipID userID:&userID passPhrase:&passPhrase]; if(!recipID) { [pgpTask release]; return nil; } [lineOpts addObject:@"-z"]; [lineOpts addObject:passPhrase]; if([userID length] > 0) { [lineOpts addObject:@"-u"]; [lineOpts addObject:userID]; } [lineOpts addObject:@"-r"]; [lineOpts addObject:recipID]; } else { [self getEncryptInfo:&recipID]; if(!recipID) { [pgpTask release]; return nil; } [lineOpts addObject:@"-r"]; [lineOpts addObject:recipID]; } launchPath = (NSMutableString *)[mainDir stringByAppendingPathComponent:@"pgpe"]; if([[NSFileManager defaultManager] isExecutableFileAtPath:launchPath] == NO) { NSLog([NSString stringWithFormat: @"Can't find PGP executable: %s",[launchPath cString]]); return nil; } [pgpTask setLaunchPath:launchPath]; [pgpTask setArguments:lineOpts]; [pgpTask launch]; [writeHandle writeData:pgpDataIn]; [writeHandle closeFile]; break; case ENCRYPT_IDEA: [lineOpts addObject:@"+batchmode"]; [lineOpts addObject:@"-f"]; [lineOpts addObject:@"-c"]; [self getIdeaPhrase:&passPhrase]; if(!passPhrase) { [pgpTask release]; return nil; } [lineOpts addObject:@"-z"]; [lineOpts addObject:passPhrase]; launchPath = (NSMutableString *)[mainDir stringByAppendingPathComponent:@"pgpe"]; if([[NSFileManager defaultManager] isExecutableFileAtPath:launchPath] == NO) { NSLog([NSString stringWithFormat: @"Can't find PGP executable: %s",[launchPath cString]]); return nil; } [pgpTask setLaunchPath:launchPath]; [pgpTask setArguments:lineOpts]; [pgpTask launch]; [writeHandle writeData:pgpDataIn]; [writeHandle closeFile]; break; case DECRYPT: [self getDecryptInfo:&passPhrase]; if(!passPhrase) { [pgpTask release]; return nil; } [lineOpts addObject:@"-z"]; [lineOpts addObject:passPhrase]; /* Don't break here - go on */ case CHECKSIG: [lineOpts addObject:@"+batchmode"]; [lineOpts addObject:@"+force"]; [lineOpts addObject:@"-f"]; launchPath = (NSMutableString *)[mainDir stringByAppendingPathComponent:@"pgpv"]; if([[NSFileManager defaultManager] isExecutableFileAtPath:launchPath] == NO) { NSLog([NSString stringWithFormat: @"Can't find PGP executable: %s",[launchPath cString]]); return nil; } [pgpTask setLaunchPath:launchPath]; [pgpTask setArguments:lineOpts]; [pgpTask launch]; [writeHandle writeData:pgpDataIn]; [writeHandle closeFile]; break; case CLEARSIGN: [lineOpts addObject:@"+batchmode"]; [lineOpts addObject:@"+force"]; [lineOpts addObject:@"-f"]; [lineOpts addObject:@"-a"]; [lineOpts addObject:@"-t"]; [self getSignatureInfo:&userID passPhrase:&passPhrase]; if(!passPhrase) { [pgpTask release]; return nil; } [lineOpts addObject:@"-z"]; [lineOpts addObject:passPhrase]; if([userID length] > 0) { [lineOpts addObject:@"-u"]; [lineOpts addObject:userID]; } launchPath = (NSMutableString *)[mainDir stringByAppendingPathComponent:@"pgps"]; if([[NSFileManager defaultManager] isExecutableFileAtPath:launchPath] == NO) { NSLog([NSString stringWithFormat: @"Can't find PGP executable: %s",[launchPath cString]]); return nil; } [pgpTask setLaunchPath:launchPath]; [pgpTask setArguments:lineOpts]; [pgpTask launch]; [writeHandle writeData:pgpDataIn]; [writeHandle closeFile]; break; case DETACHEDSIG: [lineOpts addObject:@"+batchmode"]; [lineOpts addObject:@"+force"]; [lineOpts addObject:@"-f"]; [lineOpts addObject:@"-a"]; [lineOpts addObject:@"-t"]; [lineOpts addObject:@"-b"]; [self getSignatureInfo:&userID passPhrase:&passPhrase]; if(!passPhrase) { [pgpTask release]; return nil; } [lineOpts addObject:@"-z"]; [lineOpts addObject:passPhrase]; if([userID length] > 0) { [lineOpts addObject:@"-u"]; [lineOpts addObject:userID]; } launchPath = (NSMutableString *)[mainDir stringByAppendingPathComponent:@"pgps"]; if([[NSFileManager defaultManager] isExecutableFileAtPath:launchPath] == NO) { NSLog([NSString stringWithFormat: @"Can't find PGP executable: %s",[launchPath cString]]); return nil; } [pgpTask setLaunchPath:launchPath]; [pgpTask setArguments:lineOpts]; [pgpTask launch]; [writeHandle writeData:pgpDataIn]; [writeHandle closeFile]; break; default: return nil; } pgpOutput = [readHandle readDataToEndOfFile]; pgpError = (NSMutableData *)[errHandle readDataToEndOfFile]; [pgpTask kill]; [pgpTask release]; /* Display error/status message in statusTextView */ errorLength = [pgpError length]; errorBuffer = (char *)malloc(errorLength+1); [pgpError getBytes:errorBuffer]; errorBuffer[errorLength] = '\0'; errorString = [NSString stringWithCString:errorBuffer]; free(errorBuffer); [statusTextView setSelectedRange:statusRange]; [statusTextView insertText:errorString]; statusRange.length = errorLength; [statusTextView display]; /* Display pgp output in OutputTextView */ outputLength = [pgpOutput length]; outputBuffer = (char *)malloc(outputLength+1); [pgpOutput getBytes:outputBuffer]; outputBuffer[outputLength] = '\0'; outputString = [NSString stringWithCString:outputBuffer]; free(outputBuffer); [outputTextView setSelectedRange:outputRange]; [outputTextView insertText:outputString]; outputRange.length = outputLength; [outputTextView display]; return pgpOutput; } - (void)getEncryptAndSignInfo:(NSString **)recip userID:(NSString **)userid passPhrase:(NSString **)phrase { if(![NSApp runModalForWindow:eAndSPanel]) { *recip = nil; *userid = nil; *phrase = nil; [eAndSPanel orderOut:self]; return; } [eAndSPanel orderOut:self]; *recip = [eAndSencryptToField stringValue]; *userid = [eAndSsecretIDField stringValue]; *phrase = [eAndSsecretPhraseField stringValue]; [eAndSsecretPhraseField setStringValue:[NSString stringWithCString:""]]; return; } - (void)getEncryptInfo:(NSString **)recip { if([[eEncryptToField stringValue] length] <= 0) { if(![NSApp runModalForWindow:ePanel]) { *recip = nil; [ePanel orderOut:self]; return; } } [ePanel orderOut:self]; *recip = [eEncryptToField stringValue]; return; } - (void)getIdeaPhrase:(NSString **)phrase { if([[iPhraseField stringValue] length] > 0) { *phrase = [iPhraseField stringValue]; return; } if(![NSApp runModalForWindow:iPanel]) { *phrase = nil; [iPanel orderOut:self]; return; } [iPanel orderOut:self]; *phrase = [iPhraseField stringValue]; return; } - (void)getDecryptInfo:(NSString **)phrase { if([[dPhraseField stringValue] length] > 0) { *phrase = [dPhraseField stringValue]; return; } if(![NSApp runModalForWindow:dPanel]) { *phrase = nil; [dPanel orderOut:self]; return; } [dPanel orderOut:self]; *phrase = [dPhraseField stringValue]; return; } - (void)getSignatureInfo:(NSString **)userid passPhrase:(NSString **)phrase { if(![NSApp runModalForWindow:sPanel]) { *userid = nil; *phrase = nil; [sPanel orderOut:self]; return; } [sPanel orderOut:self]; *userid = [sigIDField stringValue]; *phrase = [sigPhraseField stringValue]; /* Clear passphrase out of field */ [sigPhraseField setStringValue:[NSString stringWithCString:""]]; return; } - showStatus:sender { [statusPanel orderFront:self]; return self; } - showOutput:sender { [outputPanel orderFront:self]; return self; } - endPassPhraseSession:sender { [NSApp stopModalWithCode:1]; return self; } - cancelModal:sender { [NSApp stopModalWithCode:0]; return self; } - clearIdeaPhrase:sender { [iPhraseField setStringValue:[NSString stringWithCString:""]]; return self; } - clearEandSPhrase:sender { [eAndSsecretPhraseField setStringValue:[NSString stringWithCString:""]]; return self; } - clearDecryptPhrase:sender { [dPhraseField setStringValue:[NSString stringWithCString:""]]; return self; } - clearSignPhrase:sender { [sigPhraseField setStringValue:[NSString stringWithCString:""]]; return self; } - clearRecipient:sender { [eAndSencryptToField setStringValue:@""]; [eEncryptToField setStringValue:@""]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.