This is PGPfrontEnd.m in view mode; [Download] [Up]
#import "PGPfrontEnd.h"
@implementation PGPfrontEnd
- init
{
[super init];
cryptor = [[Cryptor alloc] init];
return self;
}
- (void)dealloc
{
[cryptor release];
[super dealloc];
return;
}
- (void)encrypt:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:ENCRYPT options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)decrypt:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:DECRYPT options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)decryptInWindow:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:DECRYPT options:nil pasteBoard:pboard];
[cryptor showStatus:self];
[cryptor showOutput:self];
*error = nil;
return;
}
- (void)encryptAndSign:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
NSMutableArray *optionArray;
optionArray = [NSMutableArray arrayWithObject:@"-s"];
[self filterPasteboard:ENCRYPT options:optionArray pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)checkSig:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:CHECKSIG options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)clearSign:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:CLEARSIGN options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)detachedSig:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:DETACHEDSIG options:nil pasteBoard:pboard];
[cryptor showStatus:self];
[cryptor showOutput:self];
*error = nil;
return;
}
- (void)encryptFiles:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboardFiles:ENCRYPT options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)decryptFiles:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboardFiles:DECRYPT options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)encryptIDEA:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboard:ENCRYPT_IDEA options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
- (void)encryptFilesIDEA:(NSPasteboard *)pboard userData:(NSString *)inData error:(NSString **)error
{
[self filterPasteboardFiles:ENCRYPT_IDEA options:nil pasteBoard:pboard];
[cryptor showStatus:self];
*error = nil;
return;
}
/* Filters a pasteboard selection through PGP, */
/* it encrypts or decrypts depending on the */
/* value of filterMode */
- (void)filterPasteboard:(int)filterMode options:(NSMutableArray *)options pasteBoard:(NSPasteboard *)pboard
{
NSArray *types;
NSString *pgpInString,*pgpOutString;
NSData *pgpIn,*pgpOut;
char *pgpInBuf,*pgpOutBuf;
int pgpInLength,pgpOutLength;
if(!options)
options = [[[NSMutableArray alloc] init] autorelease];
types = [pboard types];
if(![types containsObject:NSStringPboardType]) {
NSLog(@"NXPGP: Pasteboard couldn't give selection");
return;
}
/* Get input NSString */
pgpInString = [pboard stringForType:NSStringPboardType];
if(!pgpInString) {
NSLog(@"NXPGP: Pasteboard couldn't give selection data");
return;
}
/* Turn NSString into NSData */
pgpInBuf = (char *)[pgpInString cString];
pgpInLength = strlen(pgpInBuf);
pgpIn = [NSData dataWithBytes:pgpInBuf length:pgpInLength];
/* Process the input data */
pgpOut = [[cryptor runpgp:filterMode options:options data:pgpIn] retain];
/* Check for errors */
if(!pgpOut) {
NSLog(@"PGP cancelled out");
return;
}
if([pgpOut length] == 0) {
NSLog(@"PGP error resulted in null output\n");
[pgpOut release];
return;
}
/* Convert back to NSString */
pgpOutLength = [pgpOut length];
pgpOutBuf = malloc(pgpOutLength+1);
[pgpOut getBytes:pgpOutBuf length:pgpOutLength];
pgpOutBuf[pgpOutLength] = '\0';
pgpOutString = [NSString stringWithCString:pgpOutBuf];
[pgpOut release];
free(pgpOutBuf);
types = [NSArray arrayWithObject:NSStringPboardType];
[pboard declareTypes:types owner:nil];
[pboard setString:pgpOutString forType:NSStringPboardType];
return;
}
/* Filters a list of files or directories from */
/* the pasteboard through PGP. It encrypts or */
/* decrypts depending on the value of filterMode */
- (void)filterPasteboardFiles:(int)filterMode options:(NSMutableArray *)options pasteBoard:(NSPasteboard *)pboard
{
NSArray *pasteboardNames;
NSMutableArray *fileNames;
NSArray *types;
int iname;
fileNames = [[NSMutableArray alloc] init];
if(!options)
options = [[[NSMutableArray alloc] init] autorelease];
types = [pboard types];
if(![types containsObject:NSFilenamesPboardType]) {
NSLog(@"NXPGP: Pasteboard couldn't give Filename selection");
return;
}
pasteboardNames = [pboard propertyListForType:NSFilenamesPboardType];
if(!pasteboardNames) {
NSLog(@"NXPGP: Pasteboard couldn't give Filename data");
return;
}
/* Turn all directory names into an array of all the */
/* filenames in the subdirectory tree */
for(iname=0; iname<[pasteboardNames count]; iname++) {
NSString *currentName;
BOOL isDir;
isDir = NO;
currentName = [pasteboardNames objectAtIndex:iname];
[[NSFileManager defaultManager] fileExistsAtPath:currentName isDirectory:&isDir];
if(isDir) {
NSArray *subDirNames;
NSString *fullName;
int isubname;
subDirNames = [[NSFileManager defaultManager] subpathsAtPath:currentName];
for(isubname=0; isubname<[subDirNames count]; isubname++) {
fullName = [currentName stringByAppendingPathComponent:
[subDirNames objectAtIndex:isubname]];
[fileNames addObject:fullName];
}
}
else [fileNames addObject:currentName];
}
for(iname=0; iname<[fileNames count]; iname++)
NSLog([NSString stringWithFormat:@" %@",[fileNames objectAtIndex:iname]]);
[self filterPGPFiles:fileNames mode:filterMode options:options];
return;
}
/* Filters an array of files (ONLY FILES!) */
/* through PGP. It encrypts or decrypts */
/* depending on the value of filterMode */
- (void)filterPGPFiles:(NSMutableArray *)fileArray mode:(int)filterMode options:(NSMutableArray *)options
{
NSPanel *infoPanel;
NSData *pgpIn,*pgpOut;
NSTextField *fileTextField;
int ifile;
infoPanel = encryptInfoPanel;
fileTextField = encryptFileTextField;
switch(filterMode) {
case ENCRYPT:
case ENCRYPT_IDEA:
infoPanel = encryptInfoPanel;
fileTextField = encryptFileTextField;
break;
case DECRYPT:
infoPanel = decryptInfoPanel;
fileTextField = decryptFileTextField;
break;
}
for(ifile=0; ifile<[fileArray count]; ifile++) {
NSString *oldFile,*newFile;
int result;
oldFile = [fileArray objectAtIndex:ifile];
[fileTextField setStringValue:oldFile];
[infoPanel display];
[infoPanel flushWindow];
[infoPanel makeKeyAndOrderFront:self];
pgpIn = [NSData dataWithContentsOfFile:oldFile];
pgpOut = [[cryptor runpgp:filterMode options:options data:pgpIn] retain];
/* Check for errors */
if(!pgpOut) {
NSLog(@"NXPGP: PGP cancelled out");
[infoPanel orderOut:self];
[cryptor clearRecipient:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
return;
}
if([pgpOut length] == 0) {
NSLog(@"PGP error resulted in null output\n");
[infoPanel orderOut:self];
[cryptor clearRecipient:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
[pgpOut release];
return;
}
/* Write back to file */
switch(filterMode) {
case ENCRYPT:
case ENCRYPT_IDEA:
newFile = [oldFile stringByAppendingString:@".pgp"];
if([[NSFileManager defaultManager] fileExistsAtPath:newFile]) {
result = NSRunAlertPanel([NSString stringWithFormat:@"File %@ Exists",newFile],
@"Over Write Existing File?",@"Yes",@"No",0);
switch(result) {
case NSAlertDefaultReturn:
[pgpOut writeToFile:newFile atomically:NO];
break;
default:
break;
}
}
else
[pgpOut writeToFile:newFile atomically:NO];
break;
case DECRYPT:
newFile = [oldFile stringByDeletingPathExtension];
if([[NSFileManager defaultManager] fileExistsAtPath:newFile]) {
result = NSRunAlertPanel([NSString stringWithFormat:@"File %@ Exists",newFile],
@"Over Write Existing File?",@"Yes",@"No",0);
switch(result) {
case NSAlertDefaultReturn:
[pgpOut writeToFile:newFile atomically:NO];
break;
default:
break;
}
}
else
[pgpOut writeToFile:newFile atomically:NO];
break;
default:
break;
}
[pgpOut release];
}
[infoPanel orderOut:self];
[cryptor clearRecipient:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
return;
}
- showStatus:sender
{
[cryptor showStatus:self];
return self;
}
- showOutput:sender
{
[cryptor showOutput:self];
return self;
}
/****************** NSApplication Delegate Routines *************************/
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setServicesProvider:self];
return;
}
- (BOOL)application:(NSApplication *)anApp openFile:(NSString *)aFile
{
NSData *pgpIn,*pgpOut;
NSMutableArray *options;
NSString *newFile;
int result;
[decryptFileTextField setStringValue:aFile];
[decryptInfoPanel display];
[decryptInfoPanel flushWindow];
[decryptInfoPanel makeKeyAndOrderFront:self];
options = [[[NSMutableArray alloc] init] autorelease];
pgpIn = [NSData dataWithContentsOfFile:aFile];
pgpOut = [[cryptor runpgp:DECRYPT options:options data:pgpIn] retain];
/* Check for errors */
if(!pgpOut) {
NSLog(@"NXPGP: PGP cancelled out");
[decryptInfoPanel orderOut:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
return NO;
}
if([pgpOut length] == 0) {
NSLog(@"PGP error resulted in null output\n");
[decryptInfoPanel orderOut:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
[pgpOut release];
return NO;
}
/* Write back to file */
newFile = [aFile stringByDeletingPathExtension];
if([[NSFileManager defaultManager] fileExistsAtPath:newFile]) {
result = NSRunAlertPanel([NSString stringWithFormat:@"File %@ Exists",newFile],
@"Over Write Existing File?",@"Yes",@"No",0);
switch(result) {
case NSAlertDefaultReturn:
[pgpOut writeToFile:newFile atomically:NO];
break;
default:
break;
}
}
else
[pgpOut writeToFile:newFile atomically:NO];
[pgpOut release];
[decryptInfoPanel orderOut:self];
[cryptor clearIdeaPhrase:self];
[cryptor clearDecryptPhrase:self];
return YES;
}
#if 0
/**************************** Cryptor Test Routines *************************/
- encryptTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] init];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c"];
pgpOut = [cryptor runpgp:ENCRYPT options:options data:pgpIn];
[pgpOut writeToFile:@"/tmp/pgpOutput.pgp" atomically:NO];
return self;
}
- encryptSignTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] initWithObjects:@"-s", nil];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c"];
pgpOut = [cryptor runpgp:ENCRYPT options:options data:pgpIn];
[pgpOut writeToFile:@"/tmp/pgpOutput.pgp" atomically:NO];
return self;
}
- checkSigTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] init];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c.clearsign"];
pgpOut = [cryptor runpgp:CHECKSIG options:options data:pgpIn];
return self;
}
- decryptTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] init];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c.new.pgp"];
pgpOut = [cryptor runpgp:DECRYPT options:options data:pgpIn];
return self;
}
- clearSignTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] init];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c"];
pgpOut = [cryptor runpgp:CLEARSIGN options:options data:pgpIn];
return self;
}
- detachedSigTest:sender
{
NSMutableArray *options;
NSData *pgpIn,*pgpOut;
options = [[NSMutableArray alloc] init];
pgpIn = [NSData dataWithContentsOfFile:@"/junk/tmp/dumpgp.c"];
pgpOut = [cryptor runpgp:DETACHEDSIG options:options data:pgpIn];
return self;
}
#endif
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.