This is Crypter.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "Crypter.h"
#import "NXPGPDelegate.h"
#import <defaults/defaults.h>
#import <strings.h>
#import <libc.h>
#import <stdlib.h>
#import <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#define ENCRYPT 0
#define DECRYPT 1
#define SIGN 2
#define CHECKSIG 3
#define ADDKEY 4
#define ENCRYPT_F 5
#define DECRYPT_F 6
#define SIGN_F 7
#define CHECKSIG_F 8
#define ADDKEY_F 9
@implementation Crypter
- (char **)encodeText:(const char *)plainText length:(int)length
{
char lineopts[24];
if (sign) {
sprintf(lineopts, "-feast");
sprintf(userIdStr, "-u %s", userID);
} else {
sprintf(lineopts, "-feat");
sprintf(userIdStr, " ");
}
[self runpgp:ENCRYPT lineOpts:lineopts data:plainText length:&length];
return textBuffer;
}
#ifndef S_ISDIR
#define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR))
#endif
- (char **)encodeFile:(const char *)plainText length:(int)length
{
char lineopts[2048];
char newName[1024];
struct stat buf;
sprintf(newName,"%s", plainText);
if(stat(plainText, &buf)<0) {
sprintf(newName,"PGP:%s", plainText);
perror(newName);
}
else {
if(S_ISDIR(buf.st_mode)) {
char *ll;
sprintf(newName,"%s.tar.Z", plainText);
ll=strrchr(plainText, '/')+1;
sprintf(lineopts, "cd %s; cd ..; gnutar cZf %s %s", plainText, newName, ll);
system(lineopts);
}
}
if (sign) {
sprintf(lineopts, "-es %s", newName);
sprintf(userIdStr, "-u %s", userID);
} else {
sprintf(lineopts, "-e %s", newName);
sprintf(userIdStr, " ");
}
[self runpgp:ENCRYPT lineOpts:lineopts data:NULL length:&length];
if(S_ISDIR(buf.st_mode)) {
unlink(newName);
}
return textBuffer;
}
- (char **)decodeText:(const char *)cipherText length:(int *)lengthptr
{
char lineopts[24];
strcpy(lineopts, "-f");
[self runpgp:DECRYPT lineOpts:lineopts data:cipherText length:lengthptr];
return textBuffer;
}
- (char **)decodeFile:(const char *)cipherText length:(int *)lengthptr
{
char lineopts[2048];
sprintf(lineopts, "%s", cipherText);
[self runpgp:DECRYPT lineOpts:lineopts data:NULL length:lengthptr];
return textBuffer;
}
- (char **)signText:(const char *)plainText length:(int *)lengthptr
{
char lineopts[24];
strcpy(lineopts, "-fast");
sprintf(userIdStr, "-u %s", userID);
[self runpgp:SIGN lineOpts:lineopts data:plainText length:lengthptr];
return textBuffer;
}
- (char **)signFile:(const char *)plainText length:(int *)lengthptr
{
char lineopts[2048];
sprintf(lineopts, "-s %s", plainText);
sprintf(userIdStr, "-u %s", userID);
[self runpgp:SIGN lineOpts:lineopts data:NULL length:lengthptr];
return textBuffer;
}
- (char **)checkSig:(const char *)signedText length:(int *)lengthptr
{
char lineopts[24];
strcpy(lineopts, "-f");
[self runpgp:CHECKSIG lineOpts:lineopts data:signedText length:lengthptr];
return textBuffer;
}
- (char **)checkFileSig:(const char *)signedText length:(int *)lengthptr
{
char lineopts[2048];
sprintf(lineopts, "-f < %s", signedText);
[self runpgp:CHECKSIG lineOpts:lineopts data:NULL length:lengthptr];
return textBuffer;
}
-(char **)addKey:(const char *)plainText length:(int *)lengthptr
{
char lineopts[24];
strcpy(lineopts, "-fka");
[self runpgp:ADDKEY lineOpts:lineopts data:plainText length:lengthptr];
return textBuffer;
}
-(char **)addKeyFile:(const char *)plainText length:(int *)lengthptr
{
char lineopts[2048];
sprintf(lineopts, "-ka %s", plainText);
[self runpgp:ADDKEY lineOpts:lineopts data:NULL length:lengthptr];
return textBuffer;
}
- setsign:(BOOL)set
{
sign = set;
return self;
}
- setpassPhrase:(const char *)passpointer
{
passPhrase = passpointer;
return self;
}
- setkeyRing:(const char *)keyringpointer
{
keyRing = keyringpointer;
return self;
}
- setuserID:(const char *)userIDpointer
{
userID = userIDpointer;
return self;
}
- setuserString:(const char *)userStringptr
{
userString = userStringptr;
return self;
}
- setPGPPATH:(const char *)pgpPATH
{
pgppath = pgpPATH;
return self;
}
- runpgp:(int)mode lineOpts:(char *)lineopts data:(const char *)incoming length:(int *)lengthptr
{
char *filename[2], *shellcom;
FILE *inFile, *pgpproc;
void *tempptr;
int i = 0;
int c, j, k = 0,doPassPhraseToo=0;
int oldMask;
oldMask=umask(0066);
filename[0] = calloc(55, 1);
filename[1] = calloc(55, 1);
shellcom = calloc(2048, 1);
for (k = 0; k <= 1; k++) {
for (i = 0; i <= 50; i++)
filename[k][i] = '\0';
}
i = 0;
k = 0;
j = *lengthptr;
textBuffer[0] = calloc((j + 2), 1);
textBuffer[1] = calloc(8192, 1);
sprintf(filename[0], "/tmp/file000000data#");
NXGetTempFilename(filename[0], 9);
sprintf(filename[1], "/tmp/file000000status#");
NXGetTempFilename(filename[1], 9);
switch (mode) {
case ENCRYPT:
sprintf(shellcom, "PGPPATH=%s pgp +batchmode %s %s %s -z \"%s\" >%s 2>%s",pgppath, lineopts, userString, userIdStr, sign ? passPhrase: " ", filename[0], filename[1]);
if(sign)
{
doPassPhraseToo=1;
}
break;
case DECRYPT:
sprintf(shellcom, "PGPPATH=%s pgp +batchmode %s -z \"%s\" >%s 2>%s", pgppath, lineopts, passPhrase, filename[0], filename[1]);
doPassPhraseToo=1;
break;
case SIGN:
sprintf(shellcom, "PGPPATH=%s pgp +batchmode %s +clearsig=on %s -z \"%s\" >%s 2>%s", pgppath, lineopts, userIdStr, passPhrase, filename[0], filename[1]);
doPassPhraseToo=1;
break;
case CHECKSIG:
sprintf(shellcom, "PGPPATH=%s pgp +batchmode %s >%s 2>%s", pgppath, lineopts, filename[0], filename[1]);
break;
case ADDKEY:
sprintf(shellcom, "PGPPATH=%s pgp +batchmode %s >%s 2>%s", pgppath, lineopts, filename[0], filename[1]);
break;
default:
fprintf(stderr, "Something wrong. runpgp called with invalid mode.\n");
exit(-1);
break;
}
pgpproc = popen(shellcom, "w");
/* if(doPassPhraseToo)
{
for (i = 0; i < strlen(passPhrase); i++)
{
fputc(passPhrase[i], pgpproc);
fputc(passPhrase[i], stderr);
}
fputc('\n',pgpproc);
fputc('\n',stderr);
fflush(pgpproc);
fflush(stderr);
}
sleep(3);*/
if(incoming) {
for (i = 0; i < j; i++)
fputc(incoming[i], pgpproc);
fflush(pgpproc);
}
pclose(pgpproc);
for (k = 0; k <= 1; k++) {
inFile = fopen(filename[k], "r");
i = 0;
while ((c = fgetc(inFile)) != EOF) {
textBuffer[k][i] = c;
if (i >= (j - 2)) {
j += 1024;
tempptr = malloc(j);
memcpy(tempptr, textBuffer[k], i + 1);
free(textBuffer[k]);
textBuffer[k] = tempptr;
}
i++;
}
textBuffer[k][i] = '\0';
fclose(inFile);
unlink(filename[k]);
if (k == 0)
[delegate setLength:i];
}
free(filename[0]);
free(filename[1]);
free(shellcom);
umask(oldMask);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.