Updated the README for the 0.1 release.
5 // Created by Jens Alfke on 3/26/09.
6 // Copyright 2009 Jens Alfke. All rights reserved.
9 #import "MYCertificate.h"
10 #import "MYCrypto_Private.h"
12 #if !MYCRYPTO_USE_IPHONE_API
15 @implementation MYCertificate
18 /** Creates a MYCertificate object for an existing Keychain certificate reference. */
19 - (id) initWithCertificateRef: (SecCertificateRef)certificateRef {
20 self = [super initWithKeychainItemRef: (SecKeychainItemRef)certificateRef];
22 _certificateRef = certificateRef; // superclass has already CFRetained it
27 /** Creates a MYCertificate object from exported key data, but does not add it to any keychain. */
28 - (id) initWithCertificateData: (NSData*)data
29 type: (CSSM_CERT_TYPE) type
30 encoding: (CSSM_CERT_ENCODING) encoding
33 CSSM_DATA cssmData = {.Data=(void*)data.bytes, .Length=data.length};
34 SecCertificateRef certificateRef = NULL;
35 if (!check(SecCertificateCreateFromData(&cssmData, type, encoding, &certificateRef),
36 @"SecCertificateCreateFromData")) {
40 self = [self initWithCertificateRef: certificateRef];
41 CFRelease(certificateRef);
45 - (id) initWithCertificateData: (NSData*)data {
46 return [self initWithCertificateData: data
47 type: CSSM_CERT_X_509v3
48 encoding: CSSM_CERT_ENCODING_BER];
51 + (MYCertificate*) preferredCertificateForName: (NSString*)name {
52 SecCertificateRef certRef = NULL;
53 if (!check(SecCertificateCopyPreference((CFStringRef)name, 0, &certRef),
54 @"SecCertificateCopyPreference"))
56 return [[[MYCertificate alloc] initWithCertificateRef: certRef] autorelease];
59 - (BOOL) setPreferredCertificateForName: (NSString*)name {
60 return check(SecCertificateSetPreference(_certificateRef, (CFStringRef)name, 0, NULL),
61 @"SecCertificateSetPreference");
64 @synthesize certificateRef=_certificateRef;
66 - (NSData*) certificateData {
68 if (!check(SecCertificateGetData(_certificateRef, &cssmData),
69 @"SecCertificateGetData"))
71 return [NSData dataWithBytes: cssmData.Data length: cssmData.Length];
74 - (MYPublicKey*) publicKey {
75 SecKeyRef keyRef = NULL;
76 if (!check(SecCertificateCopyPublicKey(_certificateRef, &keyRef),
77 @"SecCertificateCopyPublicKey") || !keyRef)
79 MYPublicKey *key = [[[MYPublicKey alloc] initWithKeyRef: keyRef] autorelease];
84 - (NSString*) commonName {
85 CFStringRef name = NULL;
86 if (!check(SecCertificateCopyCommonName(_certificateRef, &name),
87 @"SecCertificateCopyCommonName") || !name)
89 return [(id)CFMakeCollectable(name) autorelease];
92 - (NSArray*) emailAddresses {
93 CFArrayRef addrs = NULL;
94 if (!check(SecCertificateCopyEmailAddresses(_certificateRef, &addrs),
95 @"SecCertificateCopyEmailAddresses") || !addrs)
97 return [(id)CFMakeCollectable(addrs) autorelease];
104 #endif !MYCRYPTO_USE_IPHONE_API