MYIdentity.m
author snej@snej.local
Thu Apr 09 22:27:51 2009 -0700 (2009-04-09)
changeset 5 b2e360b78189
parent 4 f4709533c816
child 8 4c0eafa7b233
permissions -rw-r--r--
Fixed iPhone build.
Updated README.
snej@4
     1
//
snej@4
     2
//  MYIdentity.m
snej@4
     3
//  MYCrypto
snej@4
     4
//
snej@4
     5
//  Created by Jens Alfke on 4/9/09.
snej@4
     6
//  Copyright 2009 Jens Alfke. All rights reserved.
snej@4
     7
//
snej@4
     8
snej@4
     9
#import "MYIdentity.h"
snej@4
    10
#import "MYCrypto_Private.h"
snej@4
    11
snej@4
    12
snej@4
    13
@implementation MYIdentity
snej@4
    14
snej@4
    15
snej@4
    16
- (id) initWithIdentityRef: (SecIdentityRef)identityRef {
snej@4
    17
    Assert(identityRef);
snej@4
    18
    SecCertificateRef certificateRef;
snej@4
    19
    if (!check(SecIdentityCopyCertificate(identityRef, &certificateRef), @"SecIdentityCopyCertificate")) {
snej@4
    20
        [self release];
snej@4
    21
        return nil;
snej@4
    22
    }
snej@4
    23
    self = [super initWithCertificateRef: certificateRef];
snej@4
    24
    if (self) {
snej@4
    25
        _identityRef = identityRef;
snej@4
    26
        CFRetain(identityRef);
snej@4
    27
    }
snej@4
    28
    CFRelease(certificateRef);
snej@4
    29
    return self;
snej@4
    30
}
snej@4
    31
snej@4
    32
snej@5
    33
#if !TARGET_OS_IPHONE
snej@4
    34
- (id) initWithCertificateRef: (SecCertificateRef)certificateRef {
snej@4
    35
    self = [super initWithCertificateRef: certificateRef];
snej@4
    36
    if (self) {
snej@4
    37
        if (!check(SecIdentityCreateWithCertificate(NULL, certificateRef, &_identityRef),
snej@4
    38
                   @"SecIdentityCreateWithCertificate")) {
snej@4
    39
            [self release];
snej@4
    40
            return nil;
snej@4
    41
        }
snej@4
    42
    }
snej@4
    43
    return self;
snej@4
    44
}
snej@5
    45
#endif
snej@4
    46
snej@4
    47
- (void) dealloc
snej@4
    48
{
snej@4
    49
    if (_identityRef) CFRelease(_identityRef);
snej@4
    50
    [super dealloc];
snej@4
    51
}
snej@4
    52
snej@4
    53
- (void) finalize
snej@4
    54
{
snej@4
    55
    if (_identityRef) CFRelease(_identityRef);
snej@4
    56
    [super finalize];
snej@4
    57
}
snej@4
    58
snej@4
    59
snej@4
    60
- (MYPrivateKey*) privateKey {
snej@4
    61
    SecKeyRef keyRef = NULL;
snej@4
    62
    if (!check(SecIdentityCopyPrivateKey(_identityRef, &keyRef), @"SecIdentityCopyPrivateKey"))
snej@4
    63
        return NULL;
snej@4
    64
    MYPrivateKey *privateKey = [[MYPrivateKey alloc] _initWithKeyRef: keyRef
snej@4
    65
                                                          publicKey: self.publicKey];
snej@4
    66
    CFRelease(keyRef);
snej@4
    67
    return [privateKey autorelease];
snej@4
    68
}
snej@4
    69
snej@4
    70
snej@5
    71
#if !TARGET_OS_IPHONE
snej@5
    72
snej@4
    73
+ (MYIdentity*) preferredIdentityForName: (NSString*)name
snej@4
    74
{
snej@4
    75
    Assert(name);
snej@4
    76
    SecIdentityRef identityRef;
snej@4
    77
    if (!check(SecIdentityCopyPreference((CFStringRef)name, 0, NULL, &identityRef),
snej@4
    78
               @"SecIdentityCopyPreference"))
snej@4
    79
        return nil;
snej@4
    80
    return identityRef ?[[[self alloc] initWithIdentityRef: identityRef] autorelease] :nil;
snej@4
    81
}
snej@4
    82
snej@4
    83
- (BOOL) makePreferredIdentityForName: (NSString*)name {
snej@4
    84
    Assert(name);
snej@4
    85
    return check(SecIdentitySetPreference(_identityRef, (CFStringRef)name, 0),
snej@4
    86
                 @"SecIdentitySetPreference");
snej@4
    87
}
snej@4
    88
snej@5
    89
#endif !TARGET_OS_IPHONE
snej@5
    90
snej@4
    91
@end