]> git.saurik.com Git - apple/security.git/blob - OSX/sec/Security/SecOTRIdentityPriv.h
Security-59754.41.1.tar.gz
[apple/security.git] / OSX / sec / Security / SecOTRIdentityPriv.h
1 /*
2 * Copyright (c) 2011-2014 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
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
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;
54 CFDataRef privateKeyPersistentRef;
55
56 bool isMessageProtectionKey;
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
76 extern const SecAsn1AlgId *kOTRSignatureAlgIDPtr;
77 void EnsureOTRAlgIDInited(void);
78
79 // Private functions for Public and Full IDs
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
91 bool SecOTRFICompareToPublicKey(SecOTRFullIdentityRef fullID, SecKeyRef publicKey);
92
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
107 bool SecOTRPICompareToPublicKey(SecOTRPublicIdentityRef publicID, SecKeyRef publicKey);
108
109
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
119 SecKeyRef CreateECPublicKeyFrom(CFAllocatorRef allocator, const uint8_t** data, size_t* limit);
120
121 bool SecOTRCreateError(enum SecOTRError family, CFIndex errorCode, CFStringRef descriptionString, CFErrorRef previousError, CFErrorRef *newError);
122
123 __END_DECLS
124
125 #endif