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"
#import "keychain/ot/OctagonFlags.h"
#import "keychain/ot/OctagonStateMachine.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/CKKSKeychainViewState.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/CKKSZoneModifier.h"
#import "keychain/ckks/CKKSZoneChangeFetcher.h"
#import "keychain/ckks/CKKSSynchronizeOperation.h"
#import "keychain/ckks/CKKSLocalSynchronizeOperation.h"
#import "keychain/ckks/CKKSProvideKeySetOperation.h"
#import "keychain/ckks/CKKSOperationDependencies.h"
#import "keychain/trust/TrustedPeers/TPSyncingPolicy.h"
#include "CKKS.h"
NS_ASSUME_NONNULL_BEGIN
@class CKKSKey;
@class CKKSAESSIVKey;
@class CKKSSynchronizeOperation;
@class CKKSRateLimiter;
@class CKKSOutgoingQueueEntry;
@class CKKSZoneChangeFetcher;
@class CKKSCurrentKeySet;
@interface CKKSKeychainView : NSObject <CKKSCloudKitAccountStateListener,
CKKSChangeFetcherClient,
CKKSPeerUpdateListener,
CKKSDatabaseProviderProtocol,
OctagonStateMachineEngine>
@property (readonly) NSString* zoneName;
@property (readonly) CKRecordZoneID* zoneID;
@property CKKSKeychainViewState* viewState;
@property NSSet<CKKSKeychainViewState*>* viewStates;
@property CKKSAccountStatus accountStatus;
@property (readonly) CKContainer* container;
@property (weak) CKKSAccountStateTracker* accountTracker;
@property (weak) CKKSReachabilityTracker* reachabilityTracker;
@property (readonly) CKKSCloudKitClassDependencies* cloudKitClassDependencies;
@property (readonly) dispatch_queue_t queue;
@property CKKSCondition* loggedIn;
@property CKKSCondition* loggedOut;
@property CKKSCondition* accountStateKnown;
@property CKKSAccountStatus trustStatus;
@property (nullable) CKKSLaunchSequence *launch;
@property CKKSLockStateTracker* lockStateTracker;
@property (readonly) BOOL itemSyncingEnabled;
@property (readonly) OctagonStateMachine* stateMachine;
@property bool keyStateMachineRefetched;
@property bool keyStateFullRefetchRequested;
@property (nullable) CKKSResultOperation* keyStateReadyDependency;
@property (readonly) NSDictionary<CKKSZoneKeyState*, CKKSCondition*>* keyHierarchyConditions;
@property CKKSZoneChangeFetcher* zoneChangeFetcher;
@property (nullable) CKKSNearFutureScheduler* suggestTLKUpload;
@property (nullable) CKKSNearFutureScheduler* requestPolicyCheck;
@property CKKSIncomingQueueOperation* lastIncomingQueueOperation;
@property CKKSNewTLKOperation* lastNewTLKOperation;
@property CKKSOutgoingQueueOperation* lastOutgoingQueueOperation;
@property CKKSProcessReceivedKeysOperation* lastProcessReceivedKeysOperation;
@property CKKSReencryptOutgoingItemsOperation* lastReencryptOutgoingItemsOperation;
@property CKKSSynchronizeOperation* lastSynchronizeOperation;
@property CKKSResultOperation* lastFixupOperation;
@property NSOperation* holdReencryptOutgoingItemsOperation;
@property NSOperation* holdOutgoingQueueOperation;
@property NSOperation* holdIncomingQueueOperation;
@property NSOperation* holdLocalSynchronizeOperation;
@property CKKSResultOperation* holdFixupOperation;
@property BOOL initiatedLocalScan;
@property (readonly) CKKSOperationDependencies* operationDependencies;
- (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
requestPolicyCheck:(CKKSNearFutureScheduler*)requestPolicyCheck;
- (void)endTrustedOperation;
- (void)beginCloudKitOperation;
- (void)setCurrentSyncingPolicy:(TPSyncingPolicy*)syncingPolicy policyIsFresh:(BOOL)policyIsFresh;
- (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:(BOOL)refetchBeforeReturningKeySet;
- (void)receiveTLKUploadRecords:(NSArray<CKRecord*>*)records;
- (BOOL)requiresTLKUpload;
- (void)waitForKeyHierarchyReadiness;
- (void)cancelAllOperations;
- (CKKSOutgoingQueueOperation*)processOutgoingQueue:(CKOperationGroup* _Nullable)ckoperationGroup;
- (CKKSOutgoingQueueOperation*)processOutgoingQueueAfter:(CKKSResultOperation* _Nullable)after
ckoperationGroup:(CKOperationGroup* _Nullable)ckoperationGroup;
- (CKKSOutgoingQueueOperation*)processOutgoingQueueAfter:(CKKSResultOperation* _Nullable)after
requiredDelay:(uint64_t)requiredDelay
ckoperationGroup:(CKOperationGroup* _Nullable)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*)resetLocalData;
- (CKKSResultOperation*)resetCloudKitZone:(CKOperationGroup*)operationGroup;
- (void)keyStateMachineRequestProcess;
- (void)dispatchSyncWithSQLTransaction:(CKKSDatabaseTransactionResult (^)(void))block;
- (void)dispatchSyncWithReadOnlySQLTransaction:(void (^)(void))block;
- (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;
- (CKKSDeviceStateEntry* _Nullable)_onqueueCurrentDeviceStateEntry:(NSError* __autoreleasing*)error;
@property NSHashTable<CKKSIncomingQueueOperation*>* incomingQueueOperations;
@property NSHashTable<CKKSOutgoingQueueOperation*>* outgoingQueueOperations;
@property NSHashTable<CKKSScanLocalItemsOperation*>* scanLocalItemsOperations;
- (NSDictionary<NSString*, NSString*>*)status;
- (NSDictionary<NSString*, NSString*>*)fastStatus;
- (void)xpc24HrNotification;
- (void)scheduleOperation:(NSOperation*)op;
@end
@interface CKKSKeychainView (Testing)
- (void)_onqueuePokeKeyStateMachine;
- (void)cancelAllOperations;
- (void)waitUntilAllOperationsAreFinished;
- (void)waitForOperationsOfClass:(Class)operationClass;
- (void)waitForFetchAndIncomingQueueProcessing;
- (void)halt;
- (void)handleCKLogout;
@end
NS_ASSUME_NONNULL_END
#else // !OCTAGON
#import <Foundation/Foundation.h>
@interface CKKSKeychainView : NSObject
{
NSString* _containerName;
}
@end
#endif // OCTAGON