Skip to content

Commit

Permalink
Merge
Browse files Browse the repository at this point in the history
  • Loading branch information
Mento committed May 27, 2012
2 parents 6606b92 + 4bafd93 commit 0dfa015
Show file tree
Hide file tree
Showing 22 changed files with 929 additions and 127 deletions.
30 changes: 28 additions & 2 deletions Libmacgpg.xcodeproj/project.pbxproj
Expand Up @@ -70,6 +70,12 @@
45156A2D14FB506E00129FE7 /* GPGArraySettingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45156A2C14FB506E00129FE7 /* GPGArraySettingTest.m */; };
451932F514F8061100D1F727 /* GPGStdSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 451932F314F8061100D1F727 /* GPGStdSetting.h */; };
451932F614F8061100D1F727 /* GPGStdSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 451932F414F8061100D1F727 /* GPGStdSetting.m */; };
451D8829156A7AD900A0B890 /* GPGStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 451D8827156A7AD900A0B890 /* GPGStream.h */; settings = {ATTRIBUTES = (Public, ); }; };
451D882A156A7AD900A0B890 /* GPGStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 451D8828156A7AD900A0B890 /* GPGStream.m */; };
451D882D156A7CA300A0B890 /* GPGMemoryStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 451D882B156A7CA300A0B890 /* GPGMemoryStream.h */; settings = {ATTRIBUTES = (Public, ); }; };
451D882E156A7CA300A0B890 /* GPGMemoryStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 451D882C156A7CA300A0B890 /* GPGMemoryStream.m */; };
451D8831156A7E4900A0B890 /* GPGFileStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 451D882F156A7E4900A0B890 /* GPGFileStream.h */; settings = {ATTRIBUTES = (Public, ); }; };
451D8832156A7E4900A0B890 /* GPGFileStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 451D8830156A7E4900A0B890 /* GPGFileStream.m */; };
4547646614FBC8A900A37306 /* GPGStdSettingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4547646514FBC8A900A37306 /* GPGStdSettingTest.m */; };
455B17BA15143D9A00FAD47D /* GPGOptionsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 455B17B915143D9A00FAD47D /* GPGOptionsTest.m */; };
4570876614FAA7C90030AAE6 /* GPGConfReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4570876414FAA7C90030AAE6 /* GPGConfReader.h */; };
Expand All @@ -82,6 +88,7 @@
45C0BC03151B65C700AA8BF6 /* GPGTestVerify.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C0BC02151B65C700AA8BF6 /* GPGTestVerify.m */; };
45C0BC18151B66F500AA8BF6 /* GPGResourceUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C0BC17151B66F500AA8BF6 /* GPGResourceUtil.m */; };
45C6E82714F8913B00ED67C6 /* pinentry-mac.app in Resources */ = {isa = PBXBuildFile; fileRef = 30C412B1149A34D80035D35F /* pinentry-mac.app */; };
45DD3D4C15642A0D00C9A4C1 /* GPGSignatureTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45DD3D4B15642A0D00C9A4C1 /* GPGSignatureTest.m */; };
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */

Expand Down Expand Up @@ -180,6 +187,12 @@
45156A2C14FB506E00129FE7 /* GPGArraySettingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGArraySettingTest.m; sourceTree = "<group>"; };
451932F314F8061100D1F727 /* GPGStdSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = GPGStdSetting.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
451932F414F8061100D1F727 /* GPGStdSetting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = GPGStdSetting.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
451D8827156A7AD900A0B890 /* GPGStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPGStream.h; sourceTree = "<group>"; };
451D8828156A7AD900A0B890 /* GPGStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGStream.m; sourceTree = "<group>"; };
451D882B156A7CA300A0B890 /* GPGMemoryStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPGMemoryStream.h; sourceTree = "<group>"; };
451D882C156A7CA300A0B890 /* GPGMemoryStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGMemoryStream.m; sourceTree = "<group>"; };
451D882F156A7E4900A0B890 /* GPGFileStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPGFileStream.h; sourceTree = "<group>"; };
451D8830156A7E4900A0B890 /* GPGFileStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGFileStream.m; sourceTree = "<group>"; };
4547646514FBC8A900A37306 /* GPGStdSettingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGStdSettingTest.m; sourceTree = "<group>"; };
455B17B915143D9A00FAD47D /* GPGOptionsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGOptionsTest.m; sourceTree = "<group>"; };
4570876414FAA7C90030AAE6 /* GPGConfReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = GPGConfReader.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
Expand All @@ -195,6 +208,7 @@
45C0BC02151B65C700AA8BF6 /* GPGTestVerify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGTestVerify.m; sourceTree = "<group>"; };
45C0BC16151B66F500AA8BF6 /* GPGResourceUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPGResourceUtil.h; sourceTree = "<group>"; };
45C0BC17151B66F500AA8BF6 /* GPGResourceUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGResourceUtil.m; sourceTree = "<group>"; };
45DD3D4B15642A0D00C9A4C1 /* GPGSignatureTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPGSignatureTest.m; sourceTree = "<group>"; };
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8DC2EF5B0486A6940098B216 /* Libmacgpg.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Libmacgpg.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -293,6 +307,12 @@
3048830E1462B22000F2E5F4 /* GPGWatcher.m */,
304883091462B11700F2E5F4 /* DirectoryWatcher.h */,
3048830A1462B11700F2E5F4 /* DirectoryWatcher.m */,
451D8827156A7AD900A0B890 /* GPGStream.h */,
451D8828156A7AD900A0B890 /* GPGStream.m */,
451D882B156A7CA300A0B890 /* GPGMemoryStream.h */,
451D882C156A7CA300A0B890 /* GPGMemoryStream.m */,
451D882F156A7E4900A0B890 /* GPGFileStream.h */,
451D8830156A7E4900A0B890 /* GPGFileStream.m */,
);
name = Classes;
path = Source;
Expand Down Expand Up @@ -371,6 +391,7 @@
45156A2614FB35DC00129FE7 /* GPGDictSettingTest.m */,
455B17B915143D9A00FAD47D /* GPGOptionsTest.m */,
45C0BC02151B65C700AA8BF6 /* GPGTestVerify.m */,
45DD3D4B15642A0D00C9A4C1 /* GPGSignatureTest.m */,
);
path = UnitTest;
sourceTree = "<group>";
Expand Down Expand Up @@ -440,6 +461,9 @@
45156A1C14FB1B1200129FE7 /* GPGLinesSetting.h in Headers */,
45156A2014FB1D7D00129FE7 /* GPGDictSetting.h in Headers */,
45156A2A14FB3EF700129FE7 /* GPGArraySetting.h in Headers */,
451D8829156A7AD900A0B890 /* GPGStream.h in Headers */,
451D882D156A7CA300A0B890 /* GPGMemoryStream.h in Headers */,
451D8831156A7E4900A0B890 /* GPGFileStream.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -586,6 +610,7 @@
455B17BA15143D9A00FAD47D /* GPGOptionsTest.m in Sources */,
45C0BC03151B65C700AA8BF6 /* GPGTestVerify.m in Sources */,
45C0BC18151B66F500AA8BF6 /* GPGResourceUtil.m in Sources */,
45DD3D4C15642A0D00C9A4C1 /* GPGSignatureTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -620,6 +645,9 @@
45156A1D14FB1B1200129FE7 /* GPGLinesSetting.m in Sources */,
45156A2114FB1D7D00129FE7 /* GPGDictSetting.m in Sources */,
45156A2B14FB3EF700129FE7 /* GPGArraySetting.m in Sources */,
451D882A156A7AD900A0B890 /* GPGStream.m in Sources */,
451D882E156A7CA300A0B890 /* GPGMemoryStream.m in Sources */,
451D8832156A7E4900A0B890 /* GPGFileStream.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -739,7 +767,6 @@
SenTestingKit,
);
PRODUCT_NAME = UnitTest;
TEST_AFTER_BUILD = YES;
WRAPPER_EXTENSION = octest;
};
name = Debug;
Expand All @@ -764,7 +791,6 @@
SenTestingKit,
);
PRODUCT_NAME = UnitTest;
TEST_AFTER_BUILD = YES;
WRAPPER_EXTENSION = octest;
ZERO_LINK = NO;
};
Expand Down
11 changes: 11 additions & 0 deletions Resources/en.lproj/Localizable.strings
Expand Up @@ -76,3 +76,14 @@ GPG_EllipticCurveAlgorithm = "EllipticCurve";
GPG_ECDSAAlgorithm = "ECDSA";
GPG_ElgamalAlgorithm = "ELG";
GPG_DiffieHellmanAlgorithm = "DiffieHellman";
"Algorithm_%i" = "Algorithm_%i";

/* GPGSignature humanReadableDescription */
"Signed" = "Signed";
"Signature expired" = "Signature expired";
"Key expired" = "Key expired";
"Bad signature" = "Bad signature";
"Signature revoked" = "Signature revoked";
"Signature error" = "Signature error";
"Unverifiable signature" = "Unverifiable signature";
"Signed by stranger" = "Signed by stranger";
8 changes: 8 additions & 0 deletions Source/GPGController.h
Expand Up @@ -24,6 +24,7 @@

@class GPGSignature;
@class GPGController;
@class GPGStream;

@protocol GPGControllerDelegate
@optional
Expand Down Expand Up @@ -171,10 +172,17 @@
- (void)key:(NSObject <KeyFingerprint> *)key setDisabled:(BOOL)disabled;
- (void)key:(NSObject <KeyFingerprint> *)key setOwnerTrsut:(GPGValidity)trust;

- (void)processTo:(GPGStream *)output data:(GPGStream *)input withEncryptSignMode:(GPGEncryptSignMode)encryptSignMode
recipients:(NSObject <EnumerationList> *)recipients hiddenRecipients:(NSObject <EnumerationList> *)hiddenRecipients;
- (NSData *)processData:(NSData *)data withEncryptSignMode:(GPGEncryptSignMode)encryptSignMode
recipients:(NSObject <EnumerationList> *)recipients hiddenRecipients:(NSObject <EnumerationList> *)hiddenRecipients;

- (void)decryptTo:(GPGStream *)output data:(GPGStream *)input;
- (NSData *)decryptData:(NSData *)data;

- (NSArray *)verifySignatureOf:(GPGStream *)signatureInput originalData:(GPGStream *)originalInput;
- (NSArray *)verifySignature:(NSData *)signatureData originalData:(NSData *)originalData;

- (NSArray *)verifySignedData:(NSData *)signedData;
- (NSSet *)keysInExportedData:(NSData *)data;

Expand Down
131 changes: 89 additions & 42 deletions Source/GPGController.m
Expand Up @@ -27,6 +27,8 @@
#import "GPGException.h"
#import "GPGPacket.h"
#import "GPGWatcher.h"
#import "GPGStream.h"
#import "GPGMemoryStream.h"

#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -361,11 +363,25 @@ - (NSData *)processData:(NSData *)data withEncryptSignMode:(GPGEncryptSignMode)m
[asyncProxy processData:data withEncryptSignMode:mode recipients:recipients hiddenRecipients:hiddenRecipients];
return nil;
}
@try {
[self operationDidStart];


GPGMemoryStream *output = [GPGMemoryStream memoryStream];
GPGMemoryStream *input = [GPGMemoryStream memoryStreamForReading:data];

[self operationDidStart];
[self processTo:output data:input withEncryptSignMode:mode recipients:recipients hiddenRecipients:hiddenRecipients];
NSData *retVal = [output readAllData];
[self cleanAfterOperation];
[self operationDidFinishWithReturnValue:retVal];
return retVal;
}

- (void)processTo:(GPGStream *)output data:(GPGStream *)input withEncryptSignMode:(GPGEncryptSignMode)mode recipients:(NSObject<EnumerationList> *)recipients hiddenRecipients:(NSObject<EnumerationList> *)hiddenRecipients
{
// asyncProxy not recognized here

@try {
if ((mode & (GPGEncryptFlags | GPGSignFlags)) == 0) {
[NSException raise:NSInvalidArgumentException format:@"Unknwon mode: %i!", mode];
[NSException raise:NSInvalidArgumentException format:@"Unknown mode: %i!", mode];
}


Expand Down Expand Up @@ -401,8 +417,16 @@ - (NSData *)processData:(NSData *)data withEncryptSignMode:(GPGEncryptSignMode)m
}

if ((mode & GPGSeparateSign) && (mode & GPGEncryptFlags)) {
// save object; processTo: will overwrite without releasing
GPGTask *tempTask = gpgTask;
data = [self processData:data withEncryptSignMode:mode & ~(GPGEncryptFlags | GPGSeparateSign) recipients:nil hiddenRecipients:nil];

// create new in-memory writeable stream
GPGMemoryStream *sigoutput = [GPGMemoryStream memoryStream];
[self processTo:sigoutput data:input withEncryptSignMode:mode & ~(GPGEncryptFlags | GPGSeparateSign) recipients:nil hiddenRecipients:nil];
input = sigoutput;

// reset back to the outer gpg task
[gpgTask release];
gpgTask = tempTask;
} else {
switch (mode & GPGSignFlags & ~GPGSeparateSign) {
Expand All @@ -426,23 +450,16 @@ - (NSData *)processData:(NSData *)data withEncryptSignMode:(GPGEncryptSignMode)m
}
}


[gpgTask addInData:data];
gpgTask.outStream = output;
[gpgTask addInput:input];

if ([gpgTask start] != 0) {
@throw [GPGException exceptionWithReason:localizedLibmacgpgString(@"Process data failed!") gpgTask:gpgTask];
@throw [GPGException exceptionWithReason:localizedLibmacgpgString(@"Encrypt/sign failed!") gpgTask:gpgTask];
}

} @catch (NSException *e) {
[self handleException:e];
} @finally {
[self cleanAfterOperation];
}

NSData *retVal = gpgTask.outData;
[self operationDidFinishWithReturnValue:retVal];
return retVal;

}
}

- (NSData *)decryptData:(NSData *)data {
Expand All @@ -451,17 +468,34 @@ - (NSData *)decryptData:(NSData *)data {
[asyncProxy decryptData:data];
return nil;
}
NSData *retVal;


GPGMemoryStream *output = [GPGMemoryStream memoryStream];
GPGMemoryStream *input = [GPGMemoryStream memoryStreamForReading:data];

[self operationDidStart];
[self decryptTo:output data:input];
NSData *retVal = [output readAllData];
[self cleanAfterOperation];
[self operationDidFinishWithReturnValue:retVal];
return retVal;
}

- (void)decryptTo:(GPGStream *)output data:(GPGStream *)input
{
@try {
[self operationDidStart];

data = [GPGPacket unArmor:data];
NSData *unarmored = [GPGPacket unArmorFrom:input clearText:nil];
if (unarmored) {
input = [GPGMemoryStream memoryStreamForReading:unarmored];
}
else {
[input seekToBeginning];
}

gpgTask = [GPGTask gpgTask];
[self addArgumentsForOptions];
[self addArgumentsForKeyserver];
[gpgTask addInData:data];
[gpgTask addInput:input];
gpgTask.outStream = output;

[gpgTask addArgument:@"--decrypt"];

Expand All @@ -470,13 +504,7 @@ - (NSData *)decryptData:(NSData *)data {
}
} @catch (NSException *e) {
[self handleException:e];
} @finally {
retVal = gpgTask.outData;
[self cleanAfterOperation];
[self operationDidFinishWithReturnValue:retVal];
}

return retVal;
}

- (NSArray *)verifySignature:(NSData *)signatureData originalData:(NSData *)originalData {
Expand All @@ -485,22 +513,39 @@ - (NSArray *)verifySignature:(NSData *)signatureData originalData:(NSData *)orig
[asyncProxy verifySignature:signatureData originalData:originalData];
return nil;
}

GPGMemoryStream *signatureInput = [GPGMemoryStream memoryStreamForReading:signatureData];
GPGMemoryStream *originalInput = nil;
if (originalData)
originalInput = [GPGMemoryStream memoryStreamForReading:originalData];
return [self verifySignatureOf:signatureInput originalData:originalInput];
}

- (NSArray *)verifySignatureOf:(GPGStream *)signatureInput originalData:(GPGStream *)originalInput
{
NSArray *retVal;
@try {
[self operationDidStart];


signatureData = [GPGPacket unArmor:signatureData clearText:originalData ? nil : &originalData];
[originalData writeToFile:@"/Users/Roman/Desktop/dat" atomically:YES];
[signatureData writeToFile:@"/Users/Roman/Desktop/dat.sig" atomically:YES];

NSData *originalData = nil;
NSData *unarmored = [GPGPacket unArmorFrom:signatureInput clearText:originalInput ? nil : &originalData];
if (unarmored) {
signatureInput = [GPGMemoryStream memoryStreamForReading:unarmored];
}
else {
[signatureInput seekToBeginning];
}

if (originalData)
originalInput = [GPGMemoryStream memoryStreamForReading:originalData];


gpgTask = [GPGTask gpgTask];
[self addArgumentsForOptions];
[self addArgumentsForKeyserver];
[gpgTask addInData:signatureData];
if (originalData) {
[gpgTask addInData:originalData];
[gpgTask addInput:signatureInput];
if (originalInput) {
[gpgTask addInput:originalInput];
}

[gpgTask addArgument:@"--verify"];
Expand Down Expand Up @@ -761,9 +806,10 @@ - (NSData *)generateRevokeCertificateForKey:(NSObject <KeyFingerprint> *)key rea
} @finally {
[self cleanAfterOperation];
}

[self operationDidFinishWithReturnValue:gpgTask.outData];
return gpgTask.outData;

NSData *retVal = [gpgTask outData];
[self operationDidFinishWithReturnValue:retVal];
return retVal;
}

- (void)revokeKey:(NSObject <KeyFingerprint> *)key reason:(int)reason description:(NSString *)description {
Expand Down Expand Up @@ -1075,7 +1121,7 @@ - (NSData *)exportKeys:(NSObject <EnumerationList> *)keys allowSecret:(BOOL)allo
if ([gpgTask start] != 0) {
@throw [GPGException exceptionWithReason:localizedLibmacgpgString(@"Export failed!") gpgTask:gpgTask];
}
exportedData = gpgTask.outData;
exportedData = [gpgTask outData];


if (allowSec) {
Expand All @@ -1088,8 +1134,9 @@ - (NSData *)exportKeys:(NSObject <EnumerationList> *)keys allowSecret:(BOOL)allo
if ([gpgTask start] != 0) {
@throw [GPGException exceptionWithReason:localizedLibmacgpgString(@"Export failed!") gpgTask:gpgTask];
}
exportedData = [NSMutableData dataWithData:exportedData];
[(NSMutableData *)exportedData appendData:gpgTask.outData];
NSMutableData *concatExportedData = [NSMutableData dataWithData:exportedData];
[concatExportedData appendData:[gpgTask outData]];
exportedData = concatExportedData;
}
} @catch (NSException *e) {
[self handleException:e];
Expand Down

0 comments on commit 0dfa015

Please sign in to comment.