#ifndef _SOSINTERNAL_H_
#define _SOSINTERNAL_H_
#include <CoreFoundation/CoreFoundation.h>
#include <Security/SecKey.h>
#include <Security/SecureObjectSync/SOSCloudCircle.h>
#include <utilities/SecCFWrappers.h>
#include <corecrypto/ccec.h>
__BEGIN_DECLS
enum {
kSOSErrorFirstPrivateError = 1024,
kSOSErrorAllocationFailure = 1024,
kSOSErrorEncodeFailure = 1025,
kSOSErrorNameMismatch = 1026,
kSOSErrorSendFailure = 1027,
kSOSErrorProcessingFailure = 1028,
kSOSErrorDecodeFailure = 1029,
kSOSErrorAlreadyPeer = 1030,
kSOSErrorNotApplicant = 1031,
kSOSErrorPeerNotFound = 1032,
kSOSErrorNoKey = 1033,
kSOSErrorBadKey = 1034,
kSOSErrorBadFormat = 1035,
kSOSErrorNoCircleName = 1036,
kSOSErrorNoCircle = 1037,
kSOSErrorBadSignature = 1038,
kSOSErrorReplay = 1039,
kSOSErrorUnexpectedType = 1040,
kSOSErrorUnsupported = 1041,
kSOSErrorInvalidMessage = 1042,
kSOSErrorNoRing = 1043,
kSOSErrorNoiCloudPeer = 1044,
};
bool SOSErrorCreate(CFIndex errorCode, CFErrorRef *error, CFDictionaryRef formatOptions, CFStringRef descriptionString, ...);
bool SOSCreateError(CFIndex errorCode, CFStringRef descriptionString, CFErrorRef previousError, CFErrorRef *newError);
bool SOSCreateErrorWithFormat(CFIndex errorCode, CFErrorRef previousError, CFErrorRef *newError,
CFDictionaryRef formatOptions, CFStringRef formatString, ...)
CF_FORMAT_FUNCTION(5,6);
bool SOSCreateErrorWithFormatAndArguments(CFIndex errorCode, CFErrorRef previousError, CFErrorRef *newError,
CFDictionaryRef formatOptions, CFStringRef formatString, va_list args)
CF_FORMAT_FUNCTION(5,0);
static inline bool isSOSErrorCoded(CFErrorRef error, CFIndex sosErrorCode) {
return error && CFErrorGetCode(error) == sosErrorCode && CFEqualSafe(CFErrorGetDomain(error), kSOSErrorDomain);
}
ccec_const_cp_t SOSGetBackupKeyCurveParameters(void);
bool SOSGenerateDeviceBackupFullKey(ccec_full_ctx_t generatedKey, ccec_const_cp_t cp, CFDataRef entropy, CFErrorRef* error);
bool SOSPerformWithDeviceBackupFullKey(ccec_const_cp_t cp, CFDataRef entropy, CFErrorRef *error, void (^operation)(ccec_full_ctx_t fullKey));
CFDataRef SOSCopyDeviceBackupPublicKey(CFDataRef entropy, CFErrorRef *error);
CFMutableDataRef SOSCopyECWrappedData(ccec_pub_ctx *ec_ctx, CFDataRef data, CFErrorRef *error);
bool SOSPerformWithUnwrappedData(ccec_full_ctx_t ec_ctx, CFDataRef data, CFErrorRef *error,
void (^operation)(size_t size, uint8_t *buffer));
CFMutableDataRef SOSCopyECUnwrappedData(ccec_full_ctx_t ec_ctx, CFDataRef data, CFErrorRef *error);
OSStatus GenerateECPair(int keySize, SecKeyRef* public, SecKeyRef *full);
OSStatus GeneratePermanentECPair(int keySize, SecKeyRef* public, SecKeyRef *full);
CFStringRef SOSItemsChangedCopyDescription(CFDictionaryRef changes, bool is_sender);
CFStringRef SOSCopyIDOfKey(SecKeyRef key, CFErrorRef *error);
static inline bool accumulate_size(size_t *accumulator, size_t size) {
*accumulator += size;
return size != 0;
}
CFDataRef SOSDateCreate(void);
__END_DECLS
#endif