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