X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5dd5f9ec28f304ca377c42fd7f711d6cf12b90e1..5c19dc3ae3bd8e40a9c028b0deddd50ff337692c:/Security/sec/SOSCircle/SecureObjectSync/SOSAccountPriv.h diff --git a/Security/sec/SOSCircle/SecureObjectSync/SOSAccountPriv.h b/Security/sec/SOSCircle/SecureObjectSync/SOSAccountPriv.h deleted file mode 100644 index 39be45d2..00000000 --- a/Security/sec/SOSCircle/SecureObjectSync/SOSAccountPriv.h +++ /dev/null @@ -1,293 +0,0 @@ -// -// SOSAccountPriv.h -// sec -// - -#ifndef sec_SOSAccountPriv_h -#define sec_SOSAccountPriv_h - -#include "SOSAccount.h" - -#include -#include -#include -#include -#include - - -#include - -#include -#include -#include - -#include -#include - -#import - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -struct __OpaqueSOSAccount { - CFRuntimeBase _base; - - dispatch_queue_t queue; - - CFDictionaryRef gestalt; - - CFMutableDictionaryRef circle_identities; - CFMutableDictionaryRef circles; - CFMutableDictionaryRef retired_peers; - - bool user_public_trusted; - CFDataRef user_key_parameters; - SecKeyRef user_public; - SecKeyRef previous_public; - enum DepartureReason departure_code; - - // Non-persistent data - - SOSDataSourceFactoryRef factory; - SecKeyRef _user_private; - dispatch_source_t user_private_timer; - int lock_notification_token; - - SOSTransportKeyParameterRef key_transport; - CFMutableDictionaryRef circle_transports; - CFMutableDictionaryRef message_transports; - - // Live Notification - CFMutableArrayRef change_blocks; -}; - -SOSAccountRef SOSAccountCreateBasic(CFAllocatorRef allocator, - CFDictionaryRef gestalt, - SOSDataSourceFactoryRef factory); - -bool SOSAccountEnsureFactoryCircles(SOSAccountRef a); - -void SOSAccountSetToNew(SOSAccountRef a); - -void SOSAccountForEachKnownCircle(SOSAccountRef account, - void (^handle_incompatible)(CFStringRef name), - void (^handle_no_peer)(SOSCircleRef circle), - void (^handle_peer)(SOSCircleRef circle, SOSFullPeerInfoRef full_peer)); - -bool SOSAccountIsMyPeerActiveInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); -bool SOSAccountIsMyPeerActiveInCircleNamed(SOSAccountRef account, CFStringRef circle_name, CFErrorRef* error); - -// DER Stuff - - -size_t der_sizeof_data_or_null(CFDataRef data, CFErrorRef* error); - -uint8_t* der_encode_data_or_null(CFDataRef data, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -const uint8_t* der_decode_data_or_null(CFAllocatorRef allocator, CFDataRef* data, - CFErrorRef* error, - const uint8_t* der, const uint8_t* der_end); - -size_t der_sizeof_public_bytes(SecKeyRef publicKey, CFErrorRef* error); - -uint8_t* der_encode_public_bytes(SecKeyRef publicKey, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -const uint8_t* der_decode_public_bytes(CFAllocatorRef allocator, CFIndex algorithmID, SecKeyRef* publicKey, CFErrorRef* error, const uint8_t* der, const uint8_t* der_end); - -const uint8_t* ccder_decode_bool(bool* boolean, const uint8_t* der, const uint8_t *der_end); - -size_t ccder_sizeof_bool(bool value __unused, CFErrorRef *error); - -uint8_t* ccder_encode_bool(bool value, const uint8_t *der, uint8_t *der_end); - -// Persistence - - -SOSAccountRef SOSAccountCreateFromDER_V1(CFAllocatorRef allocator, - SOSDataSourceFactoryRef factory, - CFErrorRef* error, - const uint8_t** der_p, const uint8_t *der_end); - -SOSAccountRef SOSAccountCreateFromDER_V2(CFAllocatorRef allocator, - SOSDataSourceFactoryRef factory, - CFErrorRef* error, - const uint8_t** der_p, const uint8_t *der_end); - -SOSAccountRef SOSAccountCreateFromDER_V3(CFAllocatorRef allocator, - SOSDataSourceFactoryRef factory, - CFErrorRef* error, - const uint8_t** der_p, const uint8_t *der_end); - -SOSAccountRef SOSAccountCreateFromDER(CFAllocatorRef allocator, - SOSDataSourceFactoryRef factory, - CFErrorRef* error, - const uint8_t** der_p, const uint8_t *der_end); - -SOSAccountRef SOSAccountCreateFromData(CFAllocatorRef allocator, CFDataRef circleData, - SOSDataSourceFactoryRef factory, - CFErrorRef* error); - -size_t SOSAccountGetDEREncodedSize(SOSAccountRef account, CFErrorRef *error); - -uint8_t* SOSAccountEncodeToDER(SOSAccountRef account, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -size_t SOSAccountGetDEREncodedSize_V3(SOSAccountRef account, CFErrorRef *error); - -uint8_t* SOSAccountEncodeToDER_V3(SOSAccountRef account, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -size_t SOSAccountGetDEREncodedSize_V2(SOSAccountRef account, CFErrorRef *error); - -uint8_t* SOSAccountEncodeToDER_V2(SOSAccountRef account, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -size_t SOSAccountGetDEREncodedSize_V1(SOSAccountRef account, CFErrorRef *error); - -uint8_t* SOSAccountEncodeToDER_V1(SOSAccountRef account, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); - -CFDataRef SOSAccountCopyEncodedData(SOSAccountRef account, CFAllocatorRef allocator, CFErrorRef *error); - -// Update - -bool SOSAccountHandleCircleMessage(SOSAccountRef account, - CFStringRef circleName, CFDataRef encodedCircleMessage, CFErrorRef *error); - -void SOSAccountRecordRetiredPeerInCircleNamed(SOSAccountRef account, CFStringRef circleName, SOSPeerInfoRef retiree); - - -bool SOSAccountHandleUpdateCircle(SOSAccountRef account, - SOSCircleRef prospective_circle, - bool writeUpdate, - CFErrorRef *error); - -// Circles - -void SOSAccountForEachKnownCircle(SOSAccountRef account, - void (^handle_incompatible)(CFStringRef name), - void (^handle_no_peer)(SOSCircleRef circle), - void (^handle_peer)(SOSCircleRef circle, SOSFullPeerInfoRef full_peer)); - -int SOSAccountCountCircles(SOSAccountRef a); - -SOSFullPeerInfoRef SOSAccountMakeMyFullPeerInCircleNamed(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -bool SOSAccountDestroyCirclePeerInfoNamed(SOSAccountRef account, CFStringRef name, CFErrorRef* error); - -bool SOSAccountDestroyCirclePeerInfo(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSFullPeerInfoRef SOSAccountGetMyFullPeerInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSPeerInfoRef SOSAccountGetMyPeerInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSPeerInfoRef SOSAccountGetMyPeerInCircleNamed(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -bool SOSAccountIsActivePeerInCircleNamed(SOSAccountRef account, CFStringRef circle_name, CFStringRef peerid, CFErrorRef* error); - -bool SOSAccountIsMyPeerActiveInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSCircleRef SOSAccountFindCircle(SOSAccountRef a, CFStringRef name, CFErrorRef *error); - -SOSCircleRef SOSAccountEnsureCircle(SOSAccountRef a, CFStringRef name, CFErrorRef *error); - -bool SOSAccountUpdateCircleFromRemote(SOSAccountRef account, SOSCircleRef newCircle, CFErrorRef *error); - -bool SOSAccountUpdateCircle(SOSAccountRef account, SOSCircleRef newCircle, CFErrorRef *error); - -bool SOSAccountModifyCircle(SOSAccountRef account, - CFStringRef circleName, - CFErrorRef* error, - bool (^action)(SOSCircleRef circle)); - -SOSFullPeerInfoRef SOSAccountGetMyFullPeerInCircleNamedIfPresent(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -void AppendCircleKeyName(CFMutableArrayRef array, CFStringRef name); - -CFStringRef SOSInterestListCopyDescription(CFArrayRef interests); - - -// Peers and PeerInfos -bool SOSAccountDestroyCirclePeerInfoNamed(SOSAccountRef account, CFStringRef name, CFErrorRef* error); - -bool SOSAccountDestroyCirclePeerInfo(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSPeerInfoRef SOSAccountGetMyPeerInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSPeerInfoRef SOSAccountGetMyPeerInCircleNamed(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -bool SOSAccountIsActivePeerInCircleNamed(SOSAccountRef account, CFStringRef circle_name, CFStringRef peerid, CFErrorRef* error); - -bool SOSAccountIsMyPeerActiveInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -// FullPeerInfos - including Cloud Identity -SOSFullPeerInfoRef CopyCloudKeychainIdentity(SOSPeerInfoRef cloudPeer, CFErrorRef *error); - -SOSFullPeerInfoRef SOSAccountGetMyFullPeerInCircleNamedIfPresent(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -bool SOSAccountIsAccountIdentity(SOSAccountRef account, SOSPeerInfoRef peer_info, CFErrorRef *error); - -SOSFullPeerInfoRef SOSAccountMakeMyFullPeerInCircleNamed(SOSAccountRef account, CFStringRef name, CFErrorRef *error); - -SOSFullPeerInfoRef SOSAccountGetMyFullPeerInCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -SOSPeerInfoRef GenerateNewCloudIdentityPeerInfo(CFErrorRef *error); - -// Credentials -bool SOSAccountHasPublicKey(SOSAccountRef account, CFErrorRef* error); -void SOSAccountSetPreviousPublic(SOSAccountRef account); -bool SOSAccountPublishCloudParameters(SOSAccountRef account, CFErrorRef* error); -bool SOSAccountRetrieveCloudParameters(SOSAccountRef account, SecKeyRef *newKey, - CFDataRef derparms, - CFDataRef *newParameters, CFErrorRef* error); - -//Testing -void SOSAccountSetUserPublicTrustedForTesting(SOSAccountRef account); -CFDictionaryRef SOSAccountGetMessageTransports(SOSAccountRef account); -// Utility - - -static inline void CFArrayAppendValueIfNot(CFMutableArrayRef array, CFTypeRef value, CFTypeRef excludedValue) -{ - if (!CFEqualSafe(value, excludedValue)) - CFArrayAppendValue(array, value); -} - -static inline CFMutableDictionaryRef CFDictionaryEnsureCFDictionaryAndGetCurrentValue(CFMutableDictionaryRef dict, CFTypeRef key) -{ - CFMutableDictionaryRef result = (CFMutableDictionaryRef) CFDictionaryGetValue(dict, key); - - if (!isDictionary(result)) { - result = CFDictionaryCreateMutableForCFTypes(kCFAllocatorDefault); - CFDictionarySetValue(dict, key, result); - CFReleaseSafe(result); - } - - return result; -} - -static inline CFMutableArrayRef CFDictionaryEnsureCFArrayAndGetCurrentValue(CFMutableDictionaryRef dict, CFTypeRef key) -{ - CFMutableArrayRef result = (CFMutableArrayRef) CFDictionaryGetValue(dict, key); - - if (!isArray(result)) { - result = CFArrayCreateMutableForCFTypes(kCFAllocatorDefault); - CFDictionarySetValue(dict, key, result); - CFReleaseSafe(result); - } - - return result; -} - -bool sosAccountLeaveCircle(SOSAccountRef account, SOSCircleRef circle, CFErrorRef* error); - -bool SOSAccountEnsurePeerRegistration(SOSAccountRef account, CFErrorRef *error); - -#endif