]>
Commit | Line | Data |
---|---|---|
427c49bc | 1 | /* |
d8f41ccd | 2 | * Copyright (c) 2011-2014 Apple Inc. All Rights Reserved. |
427c49bc | 3 | * |
d8f41ccd A |
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@ | |
427c49bc A |
22 | */ |
23 | ||
d8f41ccd | 24 | |
427c49bc A |
25 | #ifndef _SECOTRIDENTITYPRIV_H_ |
26 | ||
27 | #include <CoreFoundation/CFRuntime.h> | |
28 | #include <CoreFoundation/CFData.h> | |
29 | ||
30 | #include <Security/SecKey.h> | |
31 | ||
32 | #include <Security/oidsalg.h> | |
33 | ||
34 | #include <CommonCrypto/CommonDigest.h> // DIGEST_LENGTH | |
35 | #include <Security/SecOTR.h> | |
36 | ||
37 | __BEGIN_DECLS | |
427c49bc A |
38 | |
39 | // OAEP Padding, uses lots of space. Might need this to be data | |
40 | // Driven when we support more key types. | |
41 | #define kPaddingOverhead (2 + 2 * CC_SHA1_DIGEST_LENGTH + 1) | |
42 | ||
43 | // | |
44 | // Identity opaque structs | |
45 | // | |
46 | ||
47 | #define kMPIDHashSize CC_SHA1_DIGEST_LENGTH | |
48 | ||
49 | struct _SecOTRFullIdentity { | |
50 | CFRuntimeBase _base; | |
51 | ||
52 | SecKeyRef publicSigningKey; | |
53 | SecKeyRef privateSigningKey; | |
5c19dc3a | 54 | CFDataRef privateKeyPersistentRef; |
d64be36e A |
55 | |
56 | bool isMessageProtectionKey; | |
427c49bc A |
57 | uint8_t publicIDHash[kMPIDHashSize]; |
58 | }; | |
59 | ||
60 | ||
61 | struct _SecOTRPublicIdentity { | |
62 | CFRuntimeBase _base; | |
63 | ||
64 | SecKeyRef publicSigningKey; | |
65 | ||
66 | bool wantsHashes; | |
67 | ||
68 | uint8_t hash[kMPIDHashSize]; | |
69 | }; | |
70 | ||
71 | enum SecOTRError { | |
72 | secOTRErrorLocal, | |
73 | secOTRErrorOSError, | |
74 | }; | |
75 | ||
fa7225c8 | 76 | extern const SecAsn1AlgId *kOTRSignatureAlgIDPtr; |
427c49bc A |
77 | void EnsureOTRAlgIDInited(void); |
78 | ||
79 | // Private functions for Public and Full IDs | |
427c49bc A |
80 | |
81 | bool SecOTRFIAppendSignature(SecOTRFullIdentityRef fullID, | |
82 | CFDataRef dataToHash, | |
83 | CFMutableDataRef appendTo, | |
84 | CFErrorRef *error); | |
85 | ||
86 | void SecOTRFIAppendPublicHash(SecOTRFullIdentityRef fullID, CFMutableDataRef appendTo); | |
87 | bool SecOTRFIComparePublicHash(SecOTRFullIdentityRef fullID, const uint8_t hash[kMPIDHashSize]); | |
88 | ||
89 | size_t SecOTRFISignatureSize(SecOTRFullIdentityRef privateID); | |
90 | ||
fa7225c8 A |
91 | bool SecOTRFICompareToPublicKey(SecOTRFullIdentityRef fullID, SecKeyRef publicKey); |
92 | ||
427c49bc A |
93 | bool SecOTRPIVerifySignature(SecOTRPublicIdentityRef publicID, |
94 | const uint8_t *dataToHash, size_t amountToHash, | |
95 | const uint8_t *signatureStart, size_t signatureSize, CFErrorRef *error); | |
96 | ||
97 | bool SecOTRPIEqualToBytes(SecOTRPublicIdentityRef id, const uint8_t*bytes, CFIndex size); | |
98 | bool SecOTRPIEqual(SecOTRPublicIdentityRef left, SecOTRPublicIdentityRef right); | |
99 | ||
100 | size_t SecOTRPISignatureSize(SecOTRPublicIdentityRef publicID); | |
101 | ||
102 | void SecOTRPICopyHash(SecOTRPublicIdentityRef publicID, uint8_t hash[kMPIDHashSize]); | |
103 | void SecOTRPIAppendHash(SecOTRPublicIdentityRef publicID, CFMutableDataRef appendTo); | |
104 | ||
105 | bool SecOTRPICompareHash(SecOTRPublicIdentityRef publicID, const uint8_t hash[kMPIDHashSize]); | |
106 | ||
fa7225c8 A |
107 | bool SecOTRPICompareToPublicKey(SecOTRPublicIdentityRef publicID, SecKeyRef publicKey); |
108 | ||
109 | ||
427c49bc A |
110 | // Utility streaming functions |
111 | OSStatus insertSize(CFIndex size, uint8_t* here); | |
112 | OSStatus appendSize(CFIndex size, CFMutableDataRef into); | |
113 | OSStatus readSize(const uint8_t** data, size_t* limit, uint16_t* size); | |
114 | ||
115 | OSStatus appendPublicOctets(SecKeyRef fromKey, CFMutableDataRef appendTo); | |
116 | OSStatus appendPublicOctetsAndSize(SecKeyRef fromKey, CFMutableDataRef appendTo); | |
117 | OSStatus appendSizeAndData(CFDataRef data, CFMutableDataRef appendTo); | |
118 | ||
427c49bc A |
119 | SecKeyRef CreateECPublicKeyFrom(CFAllocatorRef allocator, const uint8_t** data, size_t* limit); |
120 | ||
d8f41ccd | 121 | bool SecOTRCreateError(enum SecOTRError family, CFIndex errorCode, CFStringRef descriptionString, CFErrorRef previousError, CFErrorRef *newError); |
427c49bc A |
122 | |
123 | __END_DECLS | |
124 | ||
125 | #endif |