]> git.saurik.com Git - apple/security.git/blob - keychain/ckks/CKKSAnalytics.h
Security-59306.11.20.tar.gz
[apple/security.git] / keychain / ckks / CKKSAnalytics.h
1 /*
2 * Copyright (c) 2017 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 #import <Foundation/Foundation.h>
25
26 #if OCTAGON
27 #import "Analytics/SFAnalytics.h"
28
29 extern NSString* const CKKSAnalyticsInCircle;
30 extern NSString* const CKKSAnalyticsHasTLKs;
31 extern NSString* const CKKSAnalyticsSyncedClassARecently;
32 extern NSString* const CKKSAnalyticsSyncedClassCRecently;
33 extern NSString* const CKKSAnalyticsIncomingQueueIsErrorFree;
34 extern NSString* const CKKSAnalyticsOutgoingQueueIsErrorFree;
35 extern NSString* const CKKSAnalyticsInSync;
36 extern NSString* const CKKSAnalyticsValidCredentials;
37 extern NSString* const CKKSAnalyticsLastUnlock;
38 extern NSString* const CKKSAnalyticsLastKeystateReady;
39 extern NSString* const CKKSAnalyticsLastInCircle;
40
41 extern NSString* const OctagonAnalyticsStateMachineState;
42 extern NSString* const OctagonAnalyticIcloudAccountState;
43 extern NSString* const OctagonAnalyticsTrustState;
44 extern NSString* const OctagonAnalyticsLastHealthCheck;
45 extern NSString* const OctagonAnalyticsSOSStatus;
46 extern NSString* const OctagonAnalyticsDateOfLastPreflightPreapprovedJoin;
47 extern NSString* const OctagonAnalyticsLastKeystateReady;
48 extern NSString* const OctagonAnalyticsLastCoreFollowup;
49 extern NSString* const OctagonAnalyticsCoreFollowupStatus;
50 extern NSString* const OctagonAnalyticsCoreFollowupFailureCount;
51 extern NSString* const OctagonAnalyticsCoreFollowupLastFailureTime;
52 extern NSString* const OctagonAnalyticsPrerecordPending;
53 extern NSString* const OctagonAnalyticsCDPStateRun;
54
55 extern NSString* const OctagonAnalyticsKVSProvisioned;
56 extern NSString* const OctagonAnalyticsKVSEnabled;
57 extern NSString* const OctagonAnalyticsKeychainSyncProvisioned;
58 extern NSString* const OctagonAnalyticsKeychainSyncEnabled;
59 extern NSString* const OctagonAnalyticsCloudKitProvisioned;
60 extern NSString* const OctagonAnalyticsCloudKitEnabled;
61
62 @class CKKSKeychainView;
63
64 @protocol CKKSAnalyticsFailableEvent <NSObject>
65 @end
66 typedef NSString<CKKSAnalyticsFailableEvent> CKKSAnalyticsFailableEvent;
67 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessIncomingQueueClassA;
68 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessIncomingQueueClassC;
69 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessOutgoingQueue;
70 extern CKKSAnalyticsFailableEvent* const CKKSEventUploadChanges;
71 extern CKKSAnalyticsFailableEvent* const CKKSEventStateError;
72 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessHealKeyHierarchy;
73 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessReencryption;
74
75 extern CKKSAnalyticsFailableEvent* const OctagonEventPreflightBottle;
76 extern CKKSAnalyticsFailableEvent* const OctagonEventLaunchBottle;
77 extern CKKSAnalyticsFailableEvent* const OctagonEventScrubBottle;
78 extern CKKSAnalyticsFailableEvent* const OctagonEventSignIn;
79 extern CKKSAnalyticsFailableEvent* const OctagonEventSignOut;
80 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoreBottle;
81 extern CKKSAnalyticsFailableEvent* const OctagonEventRamp;
82 extern CKKSAnalyticsFailableEvent* const OctagonEventBottleCheck;
83 extern CKKSAnalyticsFailableEvent* const OctagonEventCoreFollowUp;
84 extern CKKSAnalyticsFailableEvent* const OctagonEventUpdateBottle;
85
86 extern CKKSAnalyticsFailableEvent* const OctagonEventRecoverBottle;
87 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchAllBottles;
88 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchEscrowContents;
89
90 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredSignedBottlePeer;
91 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredOctagonPeerEncryptionKey;
92 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredOctagonPeerSigningKey;
93 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoreComplete;
94
95 /* Initial health check */
96 extern CKKSAnalyticsFailableEvent* const OctagonEventCheckTrustState;
97
98 /* Outer calls as seen by the client */
99 extern CKKSAnalyticsFailableEvent* const OctagonEventBottledPeerRestore;
100 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchEscrowContents;
101 extern CKKSAnalyticsFailableEvent* const OctagonEventResetAndEstablish;
102 extern CKKSAnalyticsFailableEvent* const OctagonEventEstablish;
103 extern CKKSAnalyticsFailableEvent* const OctagonEventLeaveClique;
104 extern CKKSAnalyticsFailableEvent* const OctagonEventRemoveFriendsInClique;
105 extern CKKSAnalyticsFailableEvent* const OctagonEventRecoveryKey;
106
107 /* Inner calls as seen by TPH and securityd */
108 /* inner: Upgrade */
109 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeFetchDeviceIDs;
110 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeSetAllowList;
111 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeSilentEscrow;
112 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreapprovedJoin;
113 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreflightPreapprovedJoin;
114 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePrepare;
115 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreapprovedJoinAfterPairing;
116
117 /* inner: join with voucher */
118 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinWithVoucher;
119
120 /* inner: join with bottle */
121 extern CKKSAnalyticsFailableEvent* const OctagonEventVoucherWithBottle;
122
123 /* inner: join with recovery key */
124 extern CKKSAnalyticsFailableEvent* const OctagonEventVoucherWithRecoveryKey;
125 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyValidationFailed;
126 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyFailed;
127 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyCircleReset;
128 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyCircleResetFailed;
129 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyEnrollFailed;
130
131 /* inner: set recovery key */
132 extern CKKSAnalyticsFailableEvent* const OctagonEventSetRecoveryKey;
133 extern CKKSAnalyticsFailableEvent* const OctagonEventSetRecoveryKeyValidationFailed;
134
135 /* inner: reset */
136 extern CKKSAnalyticsFailableEvent* const OctagonEventReset;
137
138 /* inner: prepare */
139 extern CKKSAnalyticsFailableEvent* const OctagonEventPrepareIdentity;
140
141 /* inner: establish */
142 extern CKKSAnalyticsFailableEvent* const OctagonEventEstablishIdentity;
143
144 /* inner: fetchviews */
145 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchViews;
146
147 /* state machine */
148 extern CKKSAnalyticsFailableEvent* const OctagonEventStateTransition;
149
150 /* become untrusted */
151 extern CKKSAnalyticsFailableEvent* const OctagonEventCheckTrustForCFU;
152
153 /* watchOS only: pairing with companion */
154 extern CKKSAnalyticsFailableEvent* const OctagonEventCompanionPairing;
155
156 /* trust state from trusted peers helper*/
157 extern CKKSAnalyticsFailableEvent* const OctagonEventTPHHealthCheckStatus;
158
159 @protocol CKKSAnalyticsSignpostEvent <NSObject>
160 @end
161 typedef NSString<CKKSAnalyticsSignpostEvent> CKKSAnalyticsSignpostEvent;
162 extern CKKSAnalyticsSignpostEvent* const CKKSEventPushNotificationReceived;
163 extern CKKSAnalyticsSignpostEvent* const CKKSEventItemAddedToOutgoingQueue;
164 extern CKKSAnalyticsSignpostEvent* const CKKSEventReachabilityTimerExpired;
165 extern CKKSAnalyticsSignpostEvent* const CKKSEventMissingLocalItemsFound;
166
167 @protocol CKKSAnalyticsActivity <NSObject>
168 @end
169 typedef NSString<CKKSAnalyticsActivity> CKKSAnalyticsActivity;
170 extern CKKSAnalyticsActivity* const CKKSActivityOTFetchRampState;
171 extern CKKSAnalyticsActivity* const CKKSActivityOctagonPreflightBottle;
172 extern CKKSAnalyticsActivity* const CKKSActivityOctagonLaunchBottle;
173 extern CKKSAnalyticsActivity* const CKKSActivityOctagonRestore;
174 extern CKKSAnalyticsActivity* const CKKSActivityScrubBottle;
175 extern CKKSAnalyticsActivity* const CKKSActivityBottleCheck;
176 extern CKKSAnalyticsActivity* const CKKSActivityOctagonUpdateBottle;
177
178 extern CKKSAnalyticsActivity* const OctagonActivityAccountAvailable;
179 extern CKKSAnalyticsActivity* const OctagonActivityAccountNotAvailable;
180 extern CKKSAnalyticsActivity* const OctagonActivityResetAndEstablish;
181 extern CKKSAnalyticsActivity* const OctagonActivityEstablish;
182 extern CKKSAnalyticsActivity* const OctagonActivityFetchAllViableBottles;
183 extern CKKSAnalyticsActivity* const OctagonActivityFetchEscrowContents;
184 extern CKKSAnalyticsActivity* const OctagonActivityBottledPeerRestore;
185 extern CKKSAnalyticsActivity* const OctagonActivitySetRecoveryKey;
186 extern CKKSAnalyticsActivity* const OctagonActivityLeaveClique;
187 extern CKKSAnalyticsActivity* const OctagonActivityRemoveFriendsInClique;
188 extern CKKSAnalyticsActivity* const OctagonActivityJoinWithRecoveryKey;
189 extern CKKSAnalyticsActivity* const OctagonSOSAdapterUpdateKeys;
190
191
192 @interface CKKSAnalytics : SFAnalytics
193
194 + (instancetype)logger;
195
196 - (void)logSuccessForEvent:(CKKSAnalyticsFailableEvent*)event inView:(CKKSKeychainView*)view;
197 - (void)logRecoverableError:(NSError*)error
198 forEvent:(CKKSAnalyticsFailableEvent*)event
199 inView:(CKKSKeychainView*)view
200 withAttributes:(NSDictionary*)attributes;
201
202 - (void)logRecoverableError:(NSError*)error
203 forEvent:(CKKSAnalyticsFailableEvent*)event
204 zoneName:(NSString*)zoneName
205 withAttributes:(NSDictionary *)attributes;
206
207 - (void)logRecoverableError:(NSError*)error
208 forEvent:(CKKSAnalyticsFailableEvent*)event
209 withAttributes:(NSDictionary *)attributes;
210
211 - (void)logUnrecoverableError:(NSError*)error
212 forEvent:(CKKSAnalyticsFailableEvent*)event
213 withAttributes:(NSDictionary *)attributes;
214
215 - (void)logUnrecoverableError:(NSError*)error
216 forEvent:(CKKSAnalyticsFailableEvent*)event
217 inView:(CKKSKeychainView*)view
218 withAttributes:(NSDictionary*)attributes;
219
220 - (void)noteEvent:(CKKSAnalyticsSignpostEvent*)event;
221 - (void)noteEvent:(CKKSAnalyticsSignpostEvent*)event inView:(CKKSKeychainView*)view;
222
223 - (void)setDateProperty:(NSDate*)date forKey:(NSString*)key inView:(CKKSKeychainView *)view;
224 - (NSDate *)datePropertyForKey:(NSString *)key inView:(CKKSKeychainView *)view;
225
226 @end
227
228 @interface CKKSAnalytics (UnitTesting)
229
230 - (NSDate*)dateOfLastSuccessForEvent:(CKKSAnalyticsFailableEvent*)event
231 inView:(CKKSKeychainView*)view;
232 - (NSDictionary *)errorChain:(NSError *)error
233 depth:(NSUInteger)depth;
234 - (NSDictionary *)createErrorAttributes:(NSError *)error
235 depth:(NSUInteger)depth
236 attributes:(NSDictionary *)attributes;
237
238 @end
239
240 #endif
241
242