5 // Created by Mitch Adler on 7/18/12.
9 #ifndef _SOSINTERNAL_H_
10 #define _SOSINTERNAL_H_
12 #include <CoreFoundation/CoreFoundation.h>
14 #include <Security/SecKey.h>
16 #include <SecureObjectSync/SOSCloudCircle.h>
18 #include <utilities/SecCFWrappers.h>
23 // Public errors are first (See SOSCloudCircle)
25 kSOSErrorFirstPrivateError
= 1024,
27 kSOSErrorAllocationFailure
= 1024,
28 kSOSErrorEncodeFailure
= 1025,
29 kSOSErrorNameMismatch
= 1026,
30 kSOSErrorSendFailure
= 1027,
31 kSOSErrorProcessingFailure
= 1028,
32 kSOSErrorDecodeFailure
= 1029,
34 kSOSErrorAlreadyPeer
= 1030,
35 kSOSErrorNotApplicant
= 1031,
36 kSOSErrorPeerNotFound
= 1032,
38 kSOSErrorNoKey
= 1033,
39 kSOSErrorBadKey
= 1034,
40 kSOSErrorBadFormat
= 1035,
41 kSOSErrorNoCircleName
= 1036,
42 kSOSErrorNoCircle
= 1037,
43 kSOSErrorBadSignature
= 1038,
44 kSOSErrorReplay
= 1039,
46 kSOSErrorUnexpectedType
= 1040,
48 kSOSErrorUnsupported
= 1041
51 bool SOSCreateError(CFIndex errorCode
, CFStringRef descriptionString
, CFErrorRef previousError
, CFErrorRef
*newError
);
53 bool SOSCreateErrorWithFormat(CFIndex errorCode
, CFErrorRef previousError
, CFErrorRef
*newError
,
54 CFDictionaryRef formatOptions
, CFStringRef formatString
, ...)
55 CF_FORMAT_FUNCTION(5,6);
57 bool SOSCreateErrorWithFormatAndArguments(CFIndex errorCode
, CFErrorRef previousError
, CFErrorRef
*newError
,
58 CFDictionaryRef formatOptions
, CFStringRef formatString
, va_list args
)
59 CF_FORMAT_FUNCTION(5,0);
62 static inline bool isSOSErrorCoded(CFErrorRef error
, CFIndex sosErrorCode
) {
63 return CFErrorGetCode(error
) == sosErrorCode
&& CFEqualSafe(CFErrorGetDomain(error
), kSOSErrorDomain
);
70 OSStatus
GenerateECPair(int keySize
, SecKeyRef
* public, SecKeyRef
*full
);
71 OSStatus
GeneratePermanentECPair(int keySize
, SecKeyRef
* public, SecKeyRef
*full
);
73 CFStringRef
SOSChangesCopyDescription(CFDictionaryRef changes
, bool is_sender
);
75 CFStringRef
SOSCopyIDOfKey(SecKeyRef key
, CFErrorRef
*error
);
78 // Der encoding accumulation
80 static inline bool accumulate_size(size_t *accumulator
, size_t size
) {