5 //  Created by Richard Murphy on 3/3/15. 
  12 #include <CoreFoundation/CoreFoundation.h> 
  13 #include <Security/SecureObjectSync/SOSCloudCircle.h> 
  14 #include "keychain/SecureObjectSync/SOSGenCount.h" 
  15 #include "keychain/SecureObjectSync/SOSFullPeerInfo.h" 
  16 #include "keychain/SecureObjectSync/SOSConcordanceTrust.h" 
  17 #include <Security/SecureObjectSync/SOSBackupSliceKeyBag.h> 
  18 #include <Security/SecKey.h> 
  20 typedef struct __OpaqueSOSRing 
*SOSRingRef
; 
  24     kSOSRingNotInRing   
= 1, 
  25     kSOSRingApplicant   
= 2, 
  30 typedef int SOSRingStatus
; 
  35     kSOSRingPeerKeyed 
= 2, 
  36     kSOSRingEntropyKeyed 
= 3, 
  39     kSOSRingTypeCount 
= 6, 
  40     kSOSRingTypeError 
= 0xfbad, 
  42 typedef uint32_t SOSRingType
; 
  44 CFTypeID 
SOSRingGetTypeID(void); 
  46 SOSRingRef 
SOSRingCreate(CFStringRef name
, CFStringRef myPeerID
, SOSRingType type
, CFErrorRef 
*error
); 
  47 bool SOSRingResetToEmpty(SOSRingRef ring
, CFStringRef myPeerID
, CFErrorRef 
*error
); 
  48 bool SOSRingResetToOffering(SOSRingRef ring
, __unused SecKeyRef user_privkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  49 SOSRingStatus 
SOSRingDeviceIsInRing(SOSRingRef ring
, CFStringRef peerID
); 
  50 bool SOSRingApply(SOSRingRef ring
, SecKeyRef user_pubkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  51 bool SOSRingWithdraw(SOSRingRef ring
, SecKeyRef user_privkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  52 bool SOSRingGenerationSign(SOSRingRef ring
, SecKeyRef user_privkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  53 bool SOSRingConcordanceSign(SOSRingRef ring
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  54 SOSConcordanceStatus 
SOSRingConcordanceTrust(SOSFullPeerInfoRef me
, CFSetRef peers
, 
  55                                              SOSRingRef knownRing
, SOSRingRef proposedRing
, 
  56                                              SecKeyRef knownPubkey
, SecKeyRef userPubkey
, 
  57                                              CFStringRef excludePeerID
, CFErrorRef 
*error
); 
  58 bool SOSRingAccept(SOSRingRef ring
, SecKeyRef user_privkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  59 bool SOSRingReject(SOSRingRef ring
, SecKeyRef user_privkey
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  60 bool SOSRingSetPayload(SOSRingRef ring
, SecKeyRef user_privkey
, CFDataRef payload
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  61 CFDataRef 
SOSRingGetPayload(SOSRingRef ring
, CFErrorRef 
*error
); 
  62 CFSetRef 
SOSRingGetBackupViewset(SOSRingRef ring
, CFErrorRef 
*error
); 
  63 CFStringRef 
SOSRingGetBackupView(SOSRingRef ring
, CFErrorRef 
*error
); 
  65 bool SOSRingSetBackupKeyBag(SOSRingRef ring
, SOSFullPeerInfoRef fpi
, CFSetRef viewSet
, SOSBackupSliceKeyBagRef bskb
, CFErrorRef 
*error
); 
  67 SOSBackupSliceKeyBagRef 
SOSRingCopyBackupSliceKeyBag(SOSRingRef ring
, CFErrorRef 
*error
); 
  69 bool SOSRingPeerTrusted(SOSRingRef ring
, SOSFullPeerInfoRef requestor
, CFErrorRef 
*error
); 
  70 bool SOSRingPKTrusted(SOSRingRef ring
, SecKeyRef pubkey
, CFErrorRef 
*error
); 
  72 CFDataRef 
SOSRingCopyEncodedData(SOSRingRef ring
, CFErrorRef 
*error
); 
  73 SOSRingRef 
SOSRingCreateFromData(CFErrorRef
* error
, CFDataRef ring_data
); 
  75 CFStringRef 
SOSRingGetName(SOSRingRef ring
); 
  76 uint32_t SOSRingGetType(SOSRingRef ring
); 
  77 SOSGenCountRef 
SOSRingGetGeneration(SOSRingRef ring
); 
  78 uint32_t SOSRingGetVersion(SOSRingRef ring
); 
  79 CFStringRef 
SOSRingGetIdentifier(SOSRingRef ring
); 
  80 CFStringRef 
SOSRingGetLastModifier(SOSRingRef ring
); 
  82 CFMutableSetRef 
SOSRingGetApplicants(SOSRingRef ring
); 
  84 static inline bool isSOSRing(CFTypeRef object
) { 
  85     return object 
&& (CFGetTypeID(object
) == SOSRingGetTypeID()); 
  88 bool SOSBackupRingSetViews(SOSRingRef ring
, SOSFullPeerInfoRef requestor
, CFSetRef viewSet
, CFErrorRef 
*error
); 
  89 CFSetRef 
SOSBackupRingGetViews(SOSRingRef ring
, CFErrorRef 
*error
); 
  91 #endif /* defined(_sec_SOSRing_) */