• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Code signing validation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Code signing validation


  • Subject: Code signing validation
  • From: "email@hidden" <email@hidden>
  • Date: Tue, 28 Oct 2008 09:36:47 +0000

Hello list

Having implemented code signing for my app I wanted to be able to do a quick visual check that things were as they should be.
I used the following to display a code signing validation message in the app About window for both the application bundle and a couple of auxiliary executables.


Has anyone else done anything similar, or hopefully, better?
It would probably be a good idea to also check the signing identity.


#import <Cocoa/Cocoa.h>

typedef enum {
	CodesignUnrecognised = -2,
	CodesignError = -1,
	CodesignOkay = 0,
	CodesignFail = 1,
	CodesignInvalidArgs = 2,
	CodesignFailedRequirement = 3,
} CodesignResult;

@interface MGSCodeSigning : NSObject {
	NSString *_resultString;
}

@property (copy) NSString *resultString;

- (CodesignResult)validateExecutable;
- (CodesignResult)validatePath:(NSString *)path;
- (CodesignResult)validateApplication;

@end

#import "MGSCodeSigning.h"
#include <dlfcn.h>

@implementation MGSCodeSigning

@synthesize resultString = _resultString;

/*

 validate executable

*/
- (CodesignResult)validateExecutable
{
Dl_info info;
int errDlAddr = dladdr( (const void *)__func__, &info );
if(errDlAddr == 0) {
return CodesignError;
}
char *exec_path = (char *)(info.dli_fname);

NSString *path = [NSString stringWithCString:exec_path encoding:NSUTF8StringEncoding];
return [self validatePath:path];
}
/*


 validate this application

 */
- (CodesignResult)validateApplication
{
	return [self validatePath:[[NSBundle mainBundle] bundlePath]];
}
/*

 validate path

*/
- (CodesignResult)validatePath:(NSString *)path
{
self.resultString = nil;
int status = CodesignError;

@try {
NSArray *arguments = [NSArray arrayWithObjects: @"--verify", path, nil];
NSTask *task = [[NSTask alloc] init];

[task setArguments:arguments];
[task setLaunchPath:@"/usr/bin/codesign"];
[task setStandardOutput:[NSFileHandle fileHandleWithNullDevice]];
[task setStandardError:[NSFileHandle fileHandleWithNullDevice]];
[task launch];
[task waitUntilExit];
status = [task terminationStatus];

switch (status) {
case CodesignOkay:
self.resultString = NSLocalizedString(@"Valid", @"Codesign okay.");
break;

case CodesignFail:
self.resultString = NSLocalizedString(@"Invalid", @"Codesign failed.");
break;

case CodesignInvalidArgs:
self.resultString = NSLocalizedString(@"Invalid arguments", @"Codesign invalid arguments");
break;

case CodesignFailedRequirement:
self.resultString = NSLocalizedString(@"Failed requirement", @"Codesign failed requirement.");
break;

default:
self.resultString = NSLocalizedString(@"Unrecognised response", @"Codesign unrecognised response.");
status = CodesignUnrecognised;
break;

}

if (status != CodesignOkay) {
NSLog(@"codesign failure: %@", self.resultString);
}


}@catch (NSException *e) {
NSLog(@"Exception launching codesign: %@", [e reason]);
return CodesignError;
}

return status;
}


@end





_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Code signing validation
      • From: Jean-Daniel Dupas <email@hidden>
  • Prev by Date: Re: Exceptions vs. pointers to error objects
  • Next by Date: alpha value from NSBitmapImageRep
  • Previous by thread: Re: Exceptions vs. pointers to error objects
  • Next by thread: Re: Code signing validation
  • Index(es):
    • Date
    • Thread