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_) */