SOSRing.h
 1  //
 2  //  SOSRing.h
 3  //  sec
 4  //
 5  //  Created by Richard Murphy on 3/3/15.
 6  //
 7  //
 8  
 9  #ifndef _sec_SOSRing_
10  #define _sec_SOSRing_
11  
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>
19  
20  typedef struct __OpaqueSOSRing *SOSRingRef;
21  
22  enum {
23      kSOSRingMember      = 0,
24      kSOSRingNotInRing   = 1,
25      kSOSRingApplicant   = 2,
26      kSOSRingReject      = 3,
27      kSOSRingRetired      = 4,
28      kSOSRingError       = 99,
29  };
30  typedef int SOSRingStatus;
31  
32  enum {
33      kSOSRingBase = 0,
34      kSOSRingBackup = 1,
35      kSOSRingPeerKeyed = 2,
36      kSOSRingEntropyKeyed = 3,
37      kSOSRingPKKeyed = 4,
38      kSOSRingRecovery = 5,
39      kSOSRingTypeCount = 6,
40      kSOSRingTypeError = 0xfbad,
41  };
42  typedef uint32_t SOSRingType;
43  
44  CFTypeID SOSRingGetTypeID(void);
45  
46  SOSRingRef SOSRingCreate(CFStringRef name, CFStringRef myPeerID, SOSRingType type, CFErrorRef *error);
47  bool SOSRingResetToEmpty(SOSRingRef ring, CFStringRef myPeerID, CFErrorRef *error);
48  bool SOSRingGenerationSign(SOSRingRef ring, SecKeyRef user_privkey, SOSFullPeerInfoRef requestor, CFErrorRef *error);
49  bool SOSRingConcordanceSign(SOSRingRef ring, SOSFullPeerInfoRef requestor, CFErrorRef *error);
50  SOSConcordanceStatus SOSRingConcordanceTrust(SOSFullPeerInfoRef me, CFSetRef peers,
51                                               SOSRingRef knownRing, SOSRingRef proposedRing,
52                                               SecKeyRef knownPubkey, SecKeyRef userPubkey,
53                                               CFStringRef excludePeerID, CFErrorRef *error);
54  bool SOSRingAccept(SOSRingRef ring, SecKeyRef user_privkey, SOSFullPeerInfoRef requestor, CFErrorRef *error);
55  bool SOSRingReject(SOSRingRef ring, SecKeyRef user_privkey, SOSFullPeerInfoRef requestor, CFErrorRef *error);
56  bool SOSRingSetPayload(SOSRingRef ring, SecKeyRef user_privkey, CFDataRef payload, SOSFullPeerInfoRef requestor, CFErrorRef *error);
57  CFDataRef SOSRingGetPayload(SOSRingRef ring, CFErrorRef *error);
58  CFSetRef SOSRingGetBackupViewset(SOSRingRef ring, CFErrorRef *error);
59  CFStringRef SOSRingGetBackupView(SOSRingRef ring, CFErrorRef *error);
60  
61  bool SOSRingSetBackupKeyBag(SOSRingRef ring, SOSFullPeerInfoRef fpi, CFSetRef viewSet, SOSBackupSliceKeyBagRef bskb, CFErrorRef *error);
62  
63  SOSBackupSliceKeyBagRef SOSRingCopyBackupSliceKeyBag(SOSRingRef ring, CFErrorRef *error);
64  
65  bool SOSRingPeerTrusted(SOSRingRef ring, SOSFullPeerInfoRef requestor, CFErrorRef *error);
66  bool SOSRingPKTrusted(SOSRingRef ring, SecKeyRef pubkey, CFErrorRef *error);
67  
68  CFDataRef SOSRingCopyEncodedData(SOSRingRef ring, CFErrorRef *error);
69  SOSRingRef SOSRingCreateFromData(CFErrorRef* error, CFDataRef ring_data);
70  
71  CFStringRef SOSRingGetName(SOSRingRef ring);
72  uint32_t SOSRingGetType(SOSRingRef ring);
73  SOSGenCountRef SOSRingGetGeneration(SOSRingRef ring);
74  uint32_t SOSRingGetVersion(SOSRingRef ring);
75  CFStringRef SOSRingGetIdentifier(SOSRingRef ring);
76  CFStringRef SOSRingGetLastModifier(SOSRingRef ring);
77  
78  CFMutableSetRef SOSRingGetApplicants(SOSRingRef ring);
79  
80  static inline bool isSOSRing(CFTypeRef object) {
81      return object && (CFGetTypeID(object) == SOSRingGetTypeID());
82  }
83  
84  bool SOSBackupRingSetViews(SOSRingRef ring, SOSFullPeerInfoRef requestor, CFSetRef viewSet, CFErrorRef *error);
85  CFSetRef SOSBackupRingGetViews(SOSRingRef ring, CFErrorRef *error);
86  
87  #endif /* defined(_sec_SOSRing_) */