]> git.saurik.com Git - apple/security.git/blob - keychain/trust/TrustedPeersTests/TPDummySigningKey.m
Security-58286.41.2.tar.gz
[apple/security.git] / keychain / trust / TrustedPeersTests / TPDummySigningKey.m
1 /*
2 * Copyright (c) 2017 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 #import "TPDummySigningKey.h"
25
26 @interface TPDummySigningKey ()
27 @property (nonatomic, strong) NSData *publicKey;
28 @end
29
30
31 @implementation TPDummySigningKey
32
33 - (instancetype)initWithPublicKeyData:(NSData *)publicKey
34 {
35 self = [super init];
36 if (self) {
37 _publicKey = publicKey;
38 _privateKeyIsAvailable = YES;
39 }
40 return self;
41 }
42
43 - (NSData *)signatureForData:(NSData *)data withError:(NSError **)error
44 {
45 if (self.privateKeyIsAvailable) {
46 return [self signatureForData:data];
47 } else {
48 if (error) {
49 *error = [NSError errorWithDomain:@"TPDummySigningKey" code:1 userInfo:nil];
50 }
51 return nil;
52 }
53 }
54
55 - (NSData *)signatureForData:(NSData *)data
56 {
57 // A really dumb hash that is just good enough for unit tests.
58 NSUInteger hash = [self.publicKey hash] ^ [data hash];
59 return [NSData dataWithBytes:&hash length:sizeof(hash)];
60 }
61
62 - (BOOL)checkSignature:(NSData *)sig matchesData:(NSData *)data
63 {
64 return [sig isEqualToData:[self signatureForData:data]];
65 }
66
67 @end
68
69
70 @implementation TPDummySigningKeyFactory
71
72 - (id <TPSigningKey>)keyWithPublicKeyData:(NSData *)publicKey
73 {
74 if (0 == publicKey.length) {
75 return nil;
76 }
77 return [[TPDummySigningKey alloc] initWithPublicKeyData:publicKey];
78 }
79
80 + (instancetype) dummySigningKeyFactory
81 {
82 return [[TPDummySigningKeyFactory alloc] init];
83 }
84
85 @end