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