CKKSKeychainView.h [plain text]
#if OCTAGON
#import <Foundation/Foundation.h>
#include <dispatch/dispatch.h>
#import "keychain/analytics/CKKSLaunchSequence.h"
#import "keychain/ckks/OctagonAPSReceiver.h"
#import "keychain/ckks/CKKSLockStateTracker.h"
#import "keychain/ckks/CKKSReachabilityTracker.h"
#import "keychain/ckks/CloudKitDependencies.h"
#include "keychain/securityd/SecDbItem.h"
#include <utilities/SecDb.h>
#import "keychain/ckks/CKKS.h"
#import "keychain/ckks/CKKSFetchAllRecordZoneChangesOperation.h"
#import "keychain/ckks/CKKSGroupOperation.h"
#import "keychain/ckks/CKKSIncomingQueueOperation.h"
#import "keychain/ckks/CKKSNearFutureScheduler.h"
#import "keychain/ckks/CKKSNewTLKOperation.h"
#import "keychain/ckks/CKKSNotifier.h"
#import "keychain/ckks/CKKSOutgoingQueueOperation.h"
#import "keychain/ckks/CKKSPeer.h"
#import "keychain/ckks/CKKSPeerProvider.h"
#import "keychain/ckks/CKKSProcessReceivedKeysOperation.h"
#import "keychain/ckks/CKKSReencryptOutgoingItemsOperation.h"
#import "keychain/ckks/CKKSScanLocalItemsOperation.h"
#import "keychain/ckks/CKKSTLKShareRecord.h"
#import "keychain/ckks/CKKSUpdateDeviceStateOperation.h"
#import "keychain/ckks/CKKSZone.h"
#import "keychain/ckks/CKKSZoneModifier.h"
#import "keychain/ckks/CKKSZoneChangeFetcher.h"
#import "keychain/ckks/CKKSSynchronizeOperation.h"
#import "keychain/ckks/CKKSLocalSynchronizeOperation.h"
#import "keychain/ckks/CKKSProvideKeySetOperation.h"
#include "CKKS.h"
NS_ASSUME_NONNULL_BEGIN
@class CKKSKey;
@class CKKSAESSIVKey;
@class CKKSSynchronizeOperation;
@class CKKSRateLimiter;
@class CKKSManifest;
@class CKKSEgoManifest;
@class CKKSOutgoingQueueEntry;
@class CKKSZoneChangeFetcher;
@class CKKSCurrentKeySet;
@interface CKKSKeychainView : CKKSZone <CKKSZoneUpdateReceiver,
CKKSChangeFetcherClient,
CKKSPeerUpdateListener>
{
CKKSZoneKeyState* _keyHierarchyState;
}
@property CKKSCondition* loggedIn;
@property CKKSCondition* loggedOut;
@property CKKSCondition* accountStateKnown;
@property CKKSAccountStatus trustStatus;
@property (nullable) CKKSResultOperation* trustDependency;
@property (nullable) CKKSLaunchSequence *launch;
@property CKKSLockStateTracker* lockStateTracker;
@property CKKSZoneKeyState* keyHierarchyState;
@property (nullable) NSError* keyHierarchyError;
@property (nullable) CKOperationGroup* keyHierarchyOperationGroup;
@property (nullable) NSOperation* keyStateMachineOperation;
@property bool keyStateMachineRefetched;
@property bool keyStateFullRefetchRequested;
@property (nullable) CKKSEgoManifest* egoManifest;
@property (nullable) CKKSManifest* latestManifest;
@property (nullable) CKKSResultOperation* keyStateReadyDependency;
@property (nullable) CKKSResultOperation* keyStateNonTransientDependency;
@property bool droppedItems;
@property (readonly) NSString* lastActiveTLKUUID;
@property NSMutableDictionary<CKKSZoneKeyState*, CKKSCondition*>* keyHierarchyConditions;
@property CKKSZoneChangeFetcher* zoneChangeFetcher;
@property (weak) CKKSNearFutureScheduler* savedTLKNotifier;
@property (nullable) CKKSNearFutureScheduler* suggestTLKUpload;
@property CKKSIncomingQueueOperation* lastIncomingQueueOperation;
@property CKKSNewTLKOperation* lastNewTLKOperation;
@property CKKSOutgoingQueueOperation* lastOutgoingQueueOperation;
@property CKKSProcessReceivedKeysOperation* lastProcessReceivedKeysOperation;
@property CKKSReencryptOutgoingItemsOperation* lastReencryptOutgoingItemsOperation;
@property CKKSScanLocalItemsOperation* lastScanLocalItemsOperation;
@property CKKSSynchronizeOperation* lastSynchronizeOperation;
@property CKKSResultOperation* lastFixupOperation;
@property NSOperation* holdReencryptOutgoingItemsOperation;
@property NSOperation* holdOutgoingQueueOperation;
@property NSOperation* holdIncomingQueueOperation;
@property NSOperation* holdLocalSynchronizeOperation;
@property CKKSResultOperation* holdFixupOperation;
@property CKKSNearFutureScheduler* notifyViewChangedScheduler;
@property CKKSNearFutureScheduler* notifyViewReadyScheduler;
@property CKKSNearFutureScheduler* pokeKeyStateMachineScheduler;
@property (readonly) NSArray<id<CKKSPeerProvider>>* currentPeerProviders;
@property (readonly) NSArray<CKKSPeerProviderState*>* currentTrustStates;
- (instancetype)initWithContainer:(CKContainer*)container
zoneName:(NSString*)zoneName
accountTracker:(CKKSAccountStateTracker*)accountTracker
lockStateTracker:(CKKSLockStateTracker*)lockStateTracker
reachabilityTracker:(CKKSReachabilityTracker*)reachabilityTracker
changeFetcher:(CKKSZoneChangeFetcher*)fetcher
zoneModifier:(CKKSZoneModifier*)zoneModifier
savedTLKNotifier:(CKKSNearFutureScheduler*)savedTLKNotifier
cloudKitClassDependencies:(CKKSCloudKitClassDependencies*)cloudKitClassDependencies;
- (void)beginTrustedOperation:(NSArray<id<CKKSPeerProvider>>*)peerProviders
suggestTLKUpload:(CKKSNearFutureScheduler*)suggestTLKUpload;
- (void)endTrustedOperation;
- (void)handleKeychainEventDbConnection:(SecDbConnectionRef)dbconn
source:(SecDbTransactionSource)txionSource
added:(SecDbItemRef _Nullable)added
deleted:(SecDbItemRef _Nullable)deleted
rateLimiter:(CKKSRateLimiter*)rateLimiter;
- (void)setCurrentItemForAccessGroup:(NSData*)newItemPersistentRef
hash:(NSData*)newItemSHA1
accessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
replacing:(NSData* _Nullable)oldCurrentItemPersistentRef
hash:(NSData* _Nullable)oldItemSHA1
complete:(void (^)(NSError* operror))complete;
- (void)getCurrentItemForAccessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
fetchCloudValue:(bool)fetchCloudValue
complete:(void (^)(NSString* uuid, NSError* operror))complete;
- (bool)outgoingQueueEmpty:(NSError* __autoreleasing*)error;
- (CKKSResultOperation<CKKSKeySetProviderOperationProtocol>*)findKeySet;
- (void)receiveTLKUploadRecords:(NSArray<CKRecord*>*)records;
- (CKKSResultOperation*)waitForFetchAndIncomingQueueProcessing;
- (void)waitForKeyHierarchyReadiness;
- (void)cancelAllOperations;
- (CKKSKey* _Nullable)keyForItem:(SecDbItemRef)item error:(NSError* __autoreleasing*)error;
- (bool)_onqueueWithAccountKeysCheckTLK:(CKKSKey*)proposedTLK error:(NSError* __autoreleasing*)error;
- (BOOL)otherDevicesReportHavingTLKs:(CKKSCurrentKeySet*)keyset;
- (CKKSOutgoingQueueOperation*)processOutgoingQueue:(CKOperationGroup* _Nullable)ckoperationGroup;
- (CKKSOutgoingQueueOperation*)processOutgoingQueueAfter:(CKKSResultOperation* _Nullable)after
ckoperationGroup:(CKOperationGroup* _Nullable)ckoperationGroup;
- (CKKSOutgoingQueueOperation*)processOutgoingQueueAfter:(CKKSResultOperation*)after
requiredDelay:(uint64_t)requiredDelay
ckoperationGroup:(CKOperationGroup*)ckoperationGroup;
- (CKKSIncomingQueueOperation*)processIncomingQueue:(bool)failOnClassA;
- (CKKSIncomingQueueOperation*)processIncomingQueue:(bool)failOnClassA after:(CKKSResultOperation* _Nullable)after;
- (CKKSScanLocalItemsOperation*)scanLocalItems:(NSString*)name;
- (void)processIncomingQueueAfterNextUnlock;
- (CKKSResultOperation*)resultsOfNextProcessIncomingQueueOperation;
- (CKKSUpdateDeviceStateOperation*)updateDeviceState:(bool)rateLimit
waitForKeyHierarchyInitialization:(uint64_t)timeout
ckoperationGroup:(CKOperationGroup* _Nullable)ckoperationGroup;
- (CKKSSynchronizeOperation*)resyncWithCloud;
- (CKKSLocalSynchronizeOperation*)resyncLocal;
- (CKKSResultOperation*)fetchAndProcessCKChanges:(CKKSFetchBecause*)because;
- (CKKSResultOperation*)resetLocalData;
- (CKKSResultOperation*)resetCloudKitZone:(CKOperationGroup*)operationGroup;
- (void)keyStateMachineRequestProcess;
- (void)dispatchSync:(bool (^)(void))block;
- (void)dispatchSyncWithAccountKeys:(bool (^)(void))block;
- (void)_onqueueKeyStateMachineRequestFetch;
- (void)_onqueueKeyStateMachineRequestProcess;
- (void)_onqueueAdvanceKeyStateMachineToState:(CKKSZoneKeyState* _Nullable)state withError:(NSError* _Nullable)error;
- (bool)_onqueueChangeOutgoingQueueEntry:(CKKSOutgoingQueueEntry*)oqe
toState:(NSString*)state
error:(NSError* __autoreleasing*)error;
- (bool)_onqueueErrorOutgoingQueueEntry:(CKKSOutgoingQueueEntry*)oqe
itemError:(NSError*)itemError
error:(NSError* __autoreleasing*)error;
- (bool)_onqueueCKWriteFailed:(NSError*)ckerror attemptedRecordsChanged:(NSDictionary<CKRecordID*, CKRecord*>*)savedRecords;
- (bool)_onqueueCKRecordChanged:(CKRecord*)record resync:(bool)resync;
- (bool)_onqueueCKRecordDeleted:(CKRecordID*)recordID recordType:(NSString*)recordType resync:(bool)resync;
- (NSSet<id<CKKSPeer>>*)_onqueueFindPeers:(CKKSPeerProviderState*)trustState
missingShare:(CKKSKey*)key
afterUploading:(NSSet<CKKSTLKShareRecord*>* _Nullable)newShares
error:(NSError* __autoreleasing*)error;
- (BOOL)_onqueueAreNewSharesSufficient:(NSSet<CKKSTLKShareRecord*>*)newShares
currentTLK:(CKKSKey*)key
error:(NSError* __autoreleasing*)error;
- (NSSet<CKKSTLKShareRecord*>* _Nullable)_onqueueCreateMissingKeyShares:(CKKSKey*)key error:(NSError* __autoreleasing*)error;
- (bool)_onqueueUpdateLatestManifestWithError:(NSError**)error;
- (CKKSDeviceStateEntry* _Nullable)_onqueueCurrentDeviceStateEntry:(NSError* __autoreleasing*)error;
@property NSHashTable<CKKSIncomingQueueOperation*>* incomingQueueOperations;
@property NSHashTable<CKKSOutgoingQueueOperation*>* outgoingQueueOperations;
@property NSHashTable<CKKSScanLocalItemsOperation*>* scanLocalItemsOperations;
@property CKKSScanLocalItemsOperation* initialScanOperation;
- (NSDictionary<NSString*, NSString*>*)status;
- (NSDictionary<NSString*, NSString*>*)fastStatus;
@end
NS_ASSUME_NONNULL_END
#else // !OCTAGON
#import <Foundation/Foundation.h>
@interface CKKSKeychainView : NSObject
{
NSString* _containerName;
}
@end
#endif // OCTAGON