1/* 2 * Copyright (c) 2012-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 _SOSINTERNAL_H_ 26#define _SOSINTERNAL_H_ 27 28#include <CoreFoundation/CoreFoundation.h> 29 30#include <Security/SecKey.h> 31 32#include <SecureObjectSync/SOSCloudCircle.h> 33 34#include <utilities/SecCFWrappers.h> 35 36__BEGIN_DECLS 37 38enum { 39 // Public errors are first (See SOSCloudCircle) 40 41 kSOSErrorFirstPrivateError = 1024, 42 43 kSOSErrorAllocationFailure = 1024, 44 kSOSErrorEncodeFailure = 1025, 45 kSOSErrorNameMismatch = 1026, 46 kSOSErrorSendFailure = 1027, 47 kSOSErrorProcessingFailure = 1028, 48 kSOSErrorDecodeFailure = 1029, 49 50 kSOSErrorAlreadyPeer = 1030, 51 kSOSErrorNotApplicant = 1031, 52 kSOSErrorPeerNotFound = 1032, 53 54 kSOSErrorNoKey = 1033, 55 kSOSErrorBadKey = 1034, 56 kSOSErrorBadFormat = 1035, 57 kSOSErrorNoCircleName = 1036, 58 kSOSErrorNoCircle = 1037, 59 kSOSErrorBadSignature = 1038, 60 kSOSErrorReplay = 1039, 61 62 kSOSErrorUnexpectedType = 1040, 63 64 kSOSErrorUnsupported = 1041 65}; 66 67// Returns false unless errorCode is 0. 68bool SOSErrorCreate(CFIndex errorCode, CFErrorRef *error, CFDictionaryRef formatOptions, CFStringRef descriptionString, ...); 69 70bool SOSCreateError(CFIndex errorCode, CFStringRef descriptionString, CFErrorRef previousError, CFErrorRef *newError); 71 72bool SOSCreateErrorWithFormat(CFIndex errorCode, CFErrorRef previousError, CFErrorRef *newError, 73 CFDictionaryRef formatOptions, CFStringRef formatString, ...) 74 CF_FORMAT_FUNCTION(5,6); 75 76bool SOSCreateErrorWithFormatAndArguments(CFIndex errorCode, CFErrorRef previousError, CFErrorRef *newError, 77 CFDictionaryRef formatOptions, CFStringRef formatString, va_list args) 78 CF_FORMAT_FUNCTION(5,0); 79 80 81static inline bool isSOSErrorCoded(CFErrorRef error, CFIndex sosErrorCode) { 82 return error && CFErrorGetCode(error) == sosErrorCode && CFEqualSafe(CFErrorGetDomain(error), kSOSErrorDomain); 83} 84 85 86// 87// Utility Functions 88// 89OSStatus GenerateECPair(int keySize, SecKeyRef* public, SecKeyRef *full); 90OSStatus GeneratePermanentECPair(int keySize, SecKeyRef* public, SecKeyRef *full); 91 92CFStringRef SOSChangesCopyDescription(CFDictionaryRef changes, bool is_sender); 93 94CFStringRef SOSCopyIDOfKey(SecKeyRef key, CFErrorRef *error); 95 96// 97// Der encoding accumulation 98// 99static inline bool accumulate_size(size_t *accumulator, size_t size) { 100 *accumulator += size; 101 return size != 0; 102} 103 104__END_DECLS 105 106#endif 107