]> git.saurik.com Git - apple/security.git/blob - keychain/ckks/CKKSAnalytics.h
357a032c96eb1b999211b296dc20a03edf3d1347
[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 OctagonAnalyticCDPBitStatus;
44 extern NSString* const OctagonAnalyticsTrustState;
45 extern NSString* const OctagonAnalyticsAttemptedJoin;
46 extern NSString* const OctagonAnalyticsUserControllableViewsSyncing;
47 extern NSString* const OctagonAnalyticsLastHealthCheck;
48 extern NSString* const OctagonAnalyticsSOSStatus;
49 extern NSString* const OctagonAnalyticsDateOfLastPreflightPreapprovedJoin;
50 extern NSString* const OctagonAnalyticsLastKeystateReady;
51 extern NSString* const OctagonAnalyticsLastCoreFollowup;
52 extern NSString* const OctagonAnalyticsCoreFollowupFailureCount;
53 extern NSString* const OctagonAnalyticsCoreFollowupLastFailureTime;
54 extern NSString* const OctagonAnalyticsPrerecordPending;
55 extern NSString* const OctagonAnalyticsCDPStateRun;
56
57 extern NSString* const OctagonAnalyticsHaveMachineID;
58 extern NSString* const OctagonAnalyticsMIDOnMemoizedList;
59 extern NSString* const OctagonAnalyticsPeersWithMID;
60
61 extern NSString* const CKKSAnalyticsLastCKKSPush;
62 extern NSString* const CKKSAnalyticsLastOctagonPush;
63
64 extern NSString* const OctagonAnalyticsKVSProvisioned;
65 extern NSString* const OctagonAnalyticsKVSEnabled;
66 extern NSString* const OctagonAnalyticsKeychainSyncProvisioned;
67 extern NSString* const OctagonAnalyticsKeychainSyncEnabled;
68 extern NSString* const OctagonAnalyticsCloudKitProvisioned;
69 extern NSString* const OctagonAnalyticsCloudKitEnabled;
70
71 extern NSString* const OctagonAnalyticsBottledUniqueTLKsRecovered;
72 extern NSString* const OctagonAnalyticsBottledTotalTLKShares;
73 extern NSString* const OctagonAnalyticsBottledTotalTLKSharesRecovered;
74 extern NSString* const OctagonAnalyticsBottledUniqueTLKsWithSharesCount;
75 extern NSString* const OctagonAnalyticsBottledTLKUniqueViewCount;
76
77 @protocol CKKSAnalyticsFailableEvent <NSObject>
78 @end
79 typedef NSString<CKKSAnalyticsFailableEvent> CKKSAnalyticsFailableEvent;
80 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessIncomingQueueClassA;
81 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessIncomingQueueClassC;
82 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessOutgoingQueue;
83 extern CKKSAnalyticsFailableEvent* const CKKSEventUploadChanges;
84 extern CKKSAnalyticsFailableEvent* const CKKSEventStateError;
85 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessHealKeyHierarchy;
86 extern CKKSAnalyticsFailableEvent* const CKKSEventProcessReencryption;
87
88 extern CKKSAnalyticsFailableEvent* const OctagonEventPreflightBottle;
89 extern CKKSAnalyticsFailableEvent* const OctagonEventLaunchBottle;
90 extern CKKSAnalyticsFailableEvent* const OctagonEventScrubBottle;
91 extern CKKSAnalyticsFailableEvent* const OctagonEventSignIn;
92 extern CKKSAnalyticsFailableEvent* const OctagonEventSignOut;
93 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoreBottle;
94 extern CKKSAnalyticsFailableEvent* const OctagonEventRamp;
95 extern CKKSAnalyticsFailableEvent* const OctagonEventBottleCheck;
96 extern CKKSAnalyticsFailableEvent* const OctagonEventCoreFollowUp;
97 extern CKKSAnalyticsFailableEvent* const OctagonEventUpdateBottle;
98
99 extern CKKSAnalyticsFailableEvent* const OctagonEventRecoverBottle;
100 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchAllBottles;
101 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchEscrowContents;
102
103 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredSignedBottlePeer;
104 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredOctagonPeerEncryptionKey;
105 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoredOctagonPeerSigningKey;
106 extern CKKSAnalyticsFailableEvent* const OctagonEventRestoreComplete;
107
108 /* Initial health check */
109 extern CKKSAnalyticsFailableEvent* const OctagonEventCheckTrustState;
110
111 /* Outer calls as seen by the client */
112 extern CKKSAnalyticsFailableEvent* const OctagonEventBottledPeerRestore;
113 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchEscrowContents;
114 extern CKKSAnalyticsFailableEvent* const OctagonEventResetAndEstablish;
115 extern CKKSAnalyticsFailableEvent* const OctagonEventEstablish;
116 extern CKKSAnalyticsFailableEvent* const OctagonEventLeaveClique;
117 extern CKKSAnalyticsFailableEvent* const OctagonEventRemoveFriendsInClique;
118 extern CKKSAnalyticsFailableEvent* const OctagonEventRecoveryKey;
119
120 /* Inner calls as seen by TPH and securityd */
121 /* inner: Upgrade */
122 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeFetchDeviceIDs;
123 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeSetAllowList;
124 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradeSilentEscrow;
125 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreapprovedJoin;
126 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreflightPreapprovedJoin;
127 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePrepare;
128 extern CKKSAnalyticsFailableEvent* const OctagonEventUpgradePreapprovedJoinAfterPairing;
129
130 /* inner: join with voucher */
131 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinWithVoucher;
132
133 /* inner: join with bottle */
134 extern CKKSAnalyticsFailableEvent* const OctagonEventPreflightVouchWithBottle;
135 extern CKKSAnalyticsFailableEvent* const OctagonEventVoucherWithBottle;
136
137 /* inner: join with recovery key */
138 extern CKKSAnalyticsFailableEvent* const OctagonEventPreflightVouchWithRecoveryKey;
139 extern CKKSAnalyticsFailableEvent* const OctagonEventVoucherWithRecoveryKey;
140 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyValidationFailed;
141 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyFailed;
142 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyCircleReset;
143 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyCircleResetFailed;
144 extern CKKSAnalyticsFailableEvent* const OctagonEventJoinRecoveryKeyEnrollFailed;
145
146 /* inner: set recovery key */
147 extern CKKSAnalyticsFailableEvent* const OctagonEventSetRecoveryKey;
148 extern CKKSAnalyticsFailableEvent* const OctagonEventSetRecoveryKeyValidationFailed;
149
150 /* inner: reset */
151 extern CKKSAnalyticsFailableEvent* const OctagonEventReset;
152
153 /* inner: prepare */
154 extern CKKSAnalyticsFailableEvent* const OctagonEventPrepareIdentity;
155
156 /* inner: establish */
157 extern CKKSAnalyticsFailableEvent* const OctagonEventEstablishIdentity;
158
159 /* inner: fetchviews */
160 extern CKKSAnalyticsFailableEvent* const OctagonEventFetchViews;
161
162 /* state machine */
163 extern CKKSAnalyticsFailableEvent* const OctagonEventStateTransition;
164
165 /* become untrusted */
166 extern CKKSAnalyticsFailableEvent* const OctagonEventCheckTrustForCFU;
167
168 /* watchOS only: pairing with companion */
169 extern CKKSAnalyticsFailableEvent* const OctagonEventCompanionPairing;
170
171 /* trust state from trusted peers helper*/
172 extern CKKSAnalyticsFailableEvent* const OctagonEventTPHHealthCheckStatus;
173
174 extern CKKSAnalyticsFailableEvent* const OctagonEventAuthKitDeviceList;
175
176 @protocol CKKSAnalyticsSignpostEvent <NSObject>
177 @end
178 typedef NSString<CKKSAnalyticsSignpostEvent> CKKSAnalyticsSignpostEvent;
179 extern CKKSAnalyticsSignpostEvent* const CKKSEventPushNotificationReceived;
180 extern CKKSAnalyticsSignpostEvent* const CKKSEventItemAddedToOutgoingQueue;
181 extern CKKSAnalyticsSignpostEvent* const CKKSEventReachabilityTimerExpired;
182 extern CKKSAnalyticsSignpostEvent* const CKKSEventMissingLocalItemsFound;
183
184 @protocol CKKSAnalyticsActivity <NSObject>
185 @end
186 typedef NSString<CKKSAnalyticsActivity> CKKSAnalyticsActivity;
187 extern CKKSAnalyticsActivity* const CKKSActivityOTFetchRampState;
188 extern CKKSAnalyticsActivity* const CKKSActivityOctagonPreflightBottle;
189 extern CKKSAnalyticsActivity* const CKKSActivityOctagonLaunchBottle;
190 extern CKKSAnalyticsActivity* const CKKSActivityOctagonRestore;
191 extern CKKSAnalyticsActivity* const CKKSActivityScrubBottle;
192 extern CKKSAnalyticsActivity* const CKKSActivityBottleCheck;
193 extern CKKSAnalyticsActivity* const CKKSActivityOctagonUpdateBottle;
194
195 extern CKKSAnalyticsActivity* const OctagonActivityAccountAvailable;
196 extern CKKSAnalyticsActivity* const OctagonActivityAccountNotAvailable;
197 extern CKKSAnalyticsActivity* const OctagonActivityResetAndEstablish;
198 extern CKKSAnalyticsActivity* const OctagonActivityEstablish;
199 extern CKKSAnalyticsActivity* const OctagonActivityFetchAllViableBottles;
200 extern CKKSAnalyticsActivity* const OctagonActivityFetchEscrowContents;
201 extern CKKSAnalyticsActivity* const OctagonActivityBottledPeerRestore;
202 extern CKKSAnalyticsActivity* const OctagonActivitySetRecoveryKey;
203 extern CKKSAnalyticsActivity* const OctagonActivityLeaveClique;
204 extern CKKSAnalyticsActivity* const OctagonActivityRemoveFriendsInClique;
205 extern CKKSAnalyticsActivity* const OctagonActivityJoinWithRecoveryKey;
206 extern CKKSAnalyticsActivity* const OctagonSOSAdapterUpdateKeys;
207
208
209 @interface CKKSAnalytics : SFAnalytics
210
211 + (instancetype)logger;
212
213 - (void)logSuccessForEvent:(CKKSAnalyticsFailableEvent*)event zoneName:(NSString*)viewName;
214 - (void)logRecoverableError:(NSError*)error
215 forEvent:(CKKSAnalyticsFailableEvent*)event
216 zoneName:(NSString*)viewName
217 withAttributes:(NSDictionary*)attributes;
218
219 - (void)logRecoverableError:(NSError*)error
220 forEvent:(CKKSAnalyticsFailableEvent*)event
221 withAttributes:(NSDictionary *)attributes;
222
223 - (void)logUnrecoverableError:(NSError*)error
224 forEvent:(CKKSAnalyticsFailableEvent*)event
225 withAttributes:(NSDictionary *)attributes;
226
227 - (void)logUnrecoverableError:(NSError*)error
228 forEvent:(CKKSAnalyticsFailableEvent*)event
229 zoneName:(NSString*)viewName
230 withAttributes:(NSDictionary*)attributes;
231
232 - (void)noteEvent:(CKKSAnalyticsSignpostEvent*)event;
233 - (void)noteEvent:(CKKSAnalyticsSignpostEvent*)event zoneName:(NSString*)zoneName;
234
235 - (void)setDateProperty:(NSDate*)date forKey:(NSString*)key zoneName:(NSString*)zoneName;
236 - (NSDate *)datePropertyForKey:(NSString *)key zoneName:(NSString*)zoneName;
237
238 @end
239
240 @interface CKKSAnalytics (UnitTesting)
241
242 - (NSDate*)dateOfLastSuccessForEvent:(CKKSAnalyticsFailableEvent*)event
243 zoneName:(NSString*)zoneName;
244 - (NSDictionary *)errorChain:(NSError *)error
245 depth:(NSUInteger)depth;
246 - (NSDictionary *)createErrorAttributes:(NSError *)error
247 depth:(NSUInteger)depth
248 attributes:(NSDictionary *)attributes;
249
250 @end
251
252 #endif
253
254