1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Definitions for CryptAuth API calls. Do not edit unless transcribing
6 // from server definitions.
11 option optimize_for = LITE_RUNTIME;
13 // Basic device information used to classify the source of a request.
14 message DeviceClassifier {
15 // The Operating System version number on the device.
16 // (e.g., an android.os.Build.VERSION.SDK_INT)
17 optional int64 device_os_version_code = 14;
19 // The software version number running on the device
20 // (e.g., GmsCore version code).
21 optional int64 device_software_version_code = 18;
23 // Software package information if applicable
24 // (e.g., com.google.android.apps.authenticator2).
25 optional string device_software_package = 19;
27 // Device type/platform.
28 optional DeviceType device_type = 32 [default = UNKNOWN];
39 // Device information provided to external clients that need to sync device
41 message ExternalDeviceInfo {
42 // A cryptographic public key associated with the device.
43 optional bytes public_key = 1;
45 // A user friendly (human readable) name for this device.
46 optional string friendly_device_name = 2;
48 // If available, the device's bluetooth MAC address.
49 optional string bluetooth_address = 3;
51 // Whether or not this device can be used as an unlock key.
52 optional bool unlock_key = 4;
54 // Whether or not this device can be unlocked.
55 optional bool unlockable = 5;
58 // Determine if the calling device is allowed to promote the SmartLock
59 // feature to the user and contact the user's authzen enrolled devices to make
60 // them update their enrollments and to check if they're reachable (we don't
61 // want to show a promotional popup if the user has no reachable devices).
62 message FindEligibleForPromotionRequest {
63 // The public key of the device that is asking us whether it should show
64 // promotional material. Required.
65 optional bytes promoter_public_key = 2;
67 // Information about the requesting device and its platform.
68 optional DeviceClassifier device_classifier = 3;
71 // Contains the authzen transaction id that the caller can use to check if
72 // there are reachable devices.
73 message FindEligibleForPromotionResponse {
74 // Whether the caller is allowed to show promotional material.
75 optional bool may_show_promo = 1;
78 // Request for a list of devices that could be used as Unlock Keys, optionally
79 // requesting a callback over bluetooth (for proximity detection).
80 message FindEligibleUnlockDevicesRequest {
81 // A bluetooth MAC address to be contacted if a device that may be eligible
82 // for unlock is nearby. If set, a message will be pushed to all eligible
83 // unlock devices requesting that they contact the specified MAC address. If
84 // this field is left unset, no callback will be made, and no message will be
85 // pushed to the user's devices.
86 optional string callback_bluetooth_address = 2;
88 // During setup, we call find and sendDeviceSyncTickle. If no devices are
89 // found, we call find again, in hopes that the tickle caused a state
90 // change that made some device eligible. This is the count for these
91 // retries (in practice, this will always be 0 or 1).
92 // Should always be set.
93 optional int32 retry_count = 3;
95 // If present and positive, the devices must have been updated within this
96 // many milliseconds of the RPC in order to be considered eligible.
97 optional int64 max_last_update_time_delta_millis = 4;
99 // If true, we will not examine the push connectivity status of devices
100 // when determining eligibility.
101 optional bool offline_allowed = 5 [default = false];
103 // Information about the requesting device and its platform.
104 optional DeviceClassifier device_classifier = 6;
107 // Response containing a list of devices that could be made Unlock Keys
108 message FindEligibleUnlockDevicesResponse {
109 // Devices that could be made Unlock Keys (even if they aren't enabled yet)
110 repeated ExternalDeviceInfo eligible_devices = 1;
112 // Devices that cannot be made unlock keys, and reasons for this. This list
113 // will not contain any non-gms core devices, even though these are also not
114 // eligible to be unlock keys.
115 repeated IneligibleDevice ineligible_devices = 2;
118 // Request to complete a device enrollment.
119 message FinishEnrollmentRequest {
120 // The enrollment session identifer from the <code>setup</code> response.
121 optional bytes enrollment_session_id = 2;
123 // An encrypted payload containing enrollment information for the device.
124 optional bytes enrollment_message = 3;
126 // A Diffie-Hellman public key for the device, to complete the key exchange.
127 optional bytes device_ephemeral_key = 4;
129 // An integer encoding the reason this enrollment was invoked (triggered).
130 // See InvocationReason enum for definitions.
131 optional int32 invocation_reason = 11 [default = 0];
133 // How many retries of this operation have happened thus far.
134 optional int32 retry_count = 12 [default = 0];
136 // Information about the requesting device and its platform.
137 optional DeviceClassifier device_classifier = 13;
140 // Response indicating whether a device enrollment completed successfully.
141 message FinishEnrollmentResponse {
142 // Status should be OK if the request was successful.
143 optional string status = 1;
145 // A detailed error message if there was a failure.
146 optional string error_message = 2;
149 // Device info uploaded during enrollment.
150 message GcmDeviceInfo {
151 // This field's name does not match the one in DeviceInfo for legacy reasons.
152 // Consider using long_device_id and device_type instead when enrolling
153 // non-android devices.
154 optional fixed64 android_device_id = 1;
156 // Used for device_address of DeviceInfo field 2, but for GCM capable devices.
157 optional bytes gcm_registration_id = 102;
159 // Used for device_address of DeviceInfo field 2, but for iOS devices.
160 optional bytes apn_registration_id = 202;
162 // Has the user enabled the associated apn_registration_id for notifications.
163 optional bool apn_notification_enabled = 203 [default = false];
165 // Used for device_address of DeviceInfo field 2, a Bluetooth Mac address for
166 // the device (e.g., to be used with EasyUnlock).
167 optional string bluetooth_mac_address = 302;
169 // SHA-256 hash of the device master key (from the key exchange).
170 // Differs from DeviceInfo field 3, which contains the actual master key.
171 optional bytes device_master_key_hash = 103;
173 // A SecureMessage.EcP256PublicKey.
174 required bytes user_public_key = 4;
176 // device's model name
177 // (e.g., an android.os.Build.MODEL or UIDevice.model).
178 optional string device_model = 7;
181 optional string locale = 8;
183 // The handle for user_public_key (and implicitly, a master key).
184 optional bytes key_handle = 9;
186 // The initial counter value for the device, sent by the device.
187 optional int64 counter = 12 [default = 0];
189 // The Operating System version on the device
190 // (e.g., an android.os.Build.DISPLAY or UIDevice.systemVersion).
191 optional string device_os_version = 13;
193 // The Operating System version number on the device
194 // (e.g., an android.os.Build.VERSION.SDK_INT).
195 optional int64 device_os_version_code = 14;
197 // The Operating System release on the device
198 // (e.g., an android.os.Build.VERSION.RELEASE).
199 optional string device_os_release = 15;
201 // The Operating System codename on the device
202 // (e.g., an android.os.Build.VERSION.CODENAME or UIDevice.systemName).
203 optional string device_os_codename = 16;
205 // The software version running on the device
206 // (e.g., Authenticator app version string).
207 optional string device_software_version = 17;
209 // The software version number running on the device
210 // (e.g., Authenticator app version code).
211 optional int64 device_software_version_code = 18;
213 // Software package information if applicable
214 // (e.g., com.google.android.apps.authenticator2).
215 optional string device_software_package = 19;
217 // Size of the display in thousandths of an inch (e.g., 7000 mils = 7 in).
218 optional int32 device_display_diagonal_mils = 22;
220 // For Authzen capable devices, their Authzen protocol version.
221 optional int32 device_authzen_version = 24;
223 // Not all devices have device identifiers that fit in 64 bits.
224 optional bytes long_device_id = 29;
226 // The device manufacturer name
227 // (e.g., android.os.Build.MANUFACTURER).
228 optional string device_manufacturer = 31;
230 // Used to indicate which type of device this is.
231 optional DeviceType device_type = 32 [default = ANDROID];
233 // Fields corresponding to screenlock type/features and hardware features
234 // should be numbered in the 400 range.
236 // Is this device using a secure screenlock (e.g., pattern or pin unlock).
237 optional bool using_secure_screenlock = 400 [default = false];
239 // Is auto-unlocking the screenlock (e.g., when at "home") supported?
240 optional bool auto_unlock_screenlock_supported = 401 [default = false];
242 // Is auto-unlocking the screenlock (e.g., when at "home") enabled?
243 optional bool auto_unlock_screenlock_enabled = 402 [default = false];
245 // Does the device have a Bluetooth (classic) radio?
246 optional bool bluetooth_radio_supported = 403 [default = false];
248 // Is the Bluetooth (classic) radio on?
249 optional bool bluetooth_radio_enabled = 404 [default = false];
251 // The enrollment session id this is sent with.
252 optional bytes enrollment_session_id = 1000;
254 // A copy of the user's OAuth token.
255 optional string oauth_token = 1001;
258 message GcmMetadata {
259 required MessageType type = 1;
260 optional int32 version = 2 [default = 0];
263 // Request for a listing of a user's own devices.
264 message GetMyDevicesRequest {
265 // Return only devices that can act as EasyUnlock keys.
266 optional bool approved_for_unlock_required = 2;
268 // Allow the returned list to be somewhat out of date (read will be faster).
269 optional bool allow_stale_read = 3 [default = false];
271 // An integer encoding the reason this request was invoked (triggered).
272 // See InvocationReason enum for definitions.
273 optional int32 invocation_reason = 4 [default = 0];
275 // How many retries of this operation have happened thus far.
276 optional int32 retry_count = 5 [default = 0];
278 // Information about the requesting device and its platform.
279 optional DeviceClassifier device_classifier = 6;
282 // Response containing a listing of the users devices.
283 message GetMyDevicesResponse {
284 // A listing of all sync-able devices.
285 repeated ExternalDeviceInfo devices = 1;
288 // A device that the server thinks is not eligible to be an unlock key, and the
290 message IneligibleDevice {
291 // The device that is not eligible to be an unlock key.
292 optional ExternalDeviceInfo device = 1;
294 // The reasons why the server thinks it is not an unlock key. NOTE: for now,
295 // this list of reasons will contain exactly one element. It is a repeated
296 // field because, in principle, there can be more than one reason that makes a
297 // device not eligible to be an unlock key, and we want to be able to add
298 // multiple reasons in the future.
299 repeated string reasons = 2;
302 // A list of "reasons" that can be provided for calling server-side APIs.
303 // This is particularly important for calls that can be triggered by different
305 // NOTE: Added INVOCATION_* prefix to enum names due to name conflict with
306 // preprocessor MACRO on Windows.
307 enum InvocationReason {
308 INVOCATION_REASON_UNKNOWN = 0;
309 // First run of the software package invoking this call.
310 INVOCATION_REASON_INITIALIZATION = 1;
311 // Ordinary periodic actions (e.g. monthly master key rotation).
312 INVOCATION_REASON_PERIODIC = 2;
313 // Slow-cycle periodic action (e.g. yearly keypair rotation???).
314 INVOCATION_REASON_SLOW_PERIODIC = 3;
315 // Fast-cycle periodic action (e.g. daily sync for Smart Lock users).
316 INVOCATION_REASON_FAST_PERIODIC = 4;
317 // Expired state (e.g. expired credentials, or cached entries) was detected.
318 INVOCATION_REASON_EXPIRATION = 5;
319 // An unexpected protocol failure occurred (so attempting to repair state).
320 INVOCATION_REASON_FAILURE_RECOVERY = 6;
321 // A new account has been added to the device.
322 INVOCATION_REASON_NEW_ACCOUNT = 7;
323 // An existing account on the device has been changed.
324 INVOCATION_REASON_CHANGED_ACCOUNT = 8;
325 // The user toggled the state of a feature (e.g. Smart Lock enabled via BT).
326 INVOCATION_REASON_FEATURE_TOGGLED = 9;
327 // A "push" from the server caused this action (e.g. a sync tickle).
328 INVOCATION_REASON_SERVER_INITIATED = 10;
329 // A local address change triggered this (e.g. GCM registration id changed).
330 INVOCATION_REASON_ADDRESS_CHANGE = 11;
331 // A software update has triggered this.
332 INVOCATION_REASON_SOFTWARE_UPDATE = 12;
333 // A manual action by the user triggered this (e.g. commands sent via adb).
334 INVOCATION_REASON_MANUAL = 13;
337 // Note: This is the same enum as securegcm.Type in securegcm.proto in the
338 // server definitions. Renamed for clarity here.
345 TX_SYNC_RESPONSE = 5;
347 DEVICE_INFO_UPDATE = 7;
348 TX_CANCEL_REQUEST = 8;
349 PROXIMITYAUTH_PAIRING = 10;
350 GCMV1_IDENTITY_ASSERTION = 11;
352 // Device-to-device communications are protected by an unauthenticated
353 // Diffie-Hellman exchange. The InitiatorHello message is simply the
354 // initiator's public DH key, and is not encoded as a SecureMessage, so
355 // it doesn't have a tag.
356 // The ResponderHello message (which is sent by the responder
357 // to the initiator), on the other hand, carries a payload that is protected
358 // by the derived shared key. It also contains the responder's
359 // public DH key. ResponderHelloAndPayload messages have the
360 // DEVICE_TO_DEVICE_RESPONDER_HELLO tag.
361 DEVICE_TO_DEVICE_RESPONDER_HELLO_PAYLOAD = 12;
363 // Device-to-device communications are protected by an unauthenticated
364 // Diffie-Hellman exchange. Once the initiator and responder
365 // agree on a shared key (through Diffie-Hellman), they will use messages
366 // tagged with DEVICE_TO_DEVICE_MESSAGE to exchange data.
367 DEVICE_TO_DEVICE_MESSAGE = 13;
369 // Notification to let a device know it should contact a nearby device.
370 DEVICE_PROXIMITY_CALLBACK = 14;
372 // Device-to-device communications are protected by an unauthenticated
373 // Diffie-Hellman exchange. During device-to-device authentication, the first
374 // message from initiator (the challenge) is signed and put into the payload
375 // of the message sent back to the initiator.
376 UNLOCK_KEY_SIGNED_CHALLENGE = 15;
379 // GCM tickles related to registration management.
380 enum RegistrationTickleType {
381 UNKNOWN_REGISTRATION_TICKLE_TYPE = 0;
383 // Force a re-enrollment with the server.
384 FORCE_ENROLLMENT = 1;
386 // Update enrollment information with the server. This could either be an
387 // authzen re-enrollment or a SyncTx.
388 UPDATE_ENROLLMENT = 2;
390 // Devices that receive this should sync the user's list of devices.
394 // Requests to send a "tickle" requesting to sync all of a user's devices now
395 message SendDeviceSyncTickleRequest {
396 // The type of tickle. *_ENROLLMENT tickles will only be sent to
397 // android devices. DEVICES_SYNC will be sent to chromebooks and android
398 // devices. UNKNOWN_TICKLE_TYPE or absent will be treated as
399 // UPDATE_ENROLLMENT.
400 // This field will also determine GCM parameters, such as
401 // TTL and collapse token.
402 optional RegistrationTickleType tickle_type = 3;
404 // Information about the requesting device and its platform.
405 optional DeviceClassifier device_classifier = 4;
408 message SendDeviceSyncTickleResponse {
412 // Contains information needed to begin a device enrollment.
413 message SetupEnrollmentInfo {
414 // Type of protocol this setup information was requested for.
415 optional string type = 1;
417 // A session identifier to be used for this enrollment session.
418 optional bytes enrollment_session_id = 2;
420 // A Diffie-Hellman public key used to perform a key exchange during
422 optional bytes server_ephemeral_key = 3;
425 // Requests information needed to begin a device enrollment.
426 message SetupEnrollmentRequest {
427 // Deprecated. See <code>application_id</code>.
428 optional string origin = 2;
430 // Type(s) of protocol supported by this enrolling device (e.g. "gcmV1").
431 repeated string types = 3;
433 // Indicates whether a legacy crypto suite must be used with this device.
434 optional bool use_legacy_crypto = 4;
436 // A URL describing which application facets this enrollment can be used (see
438 optional string application_id = 5;
440 // An integer encoding the reason this enrollment was invoked (triggered).
441 // See InvocationReason enum for definitions.
442 optional int32 invocation_reason = 6 [default = 0];
444 // How many retries of this operation have happened thus far.
445 optional int32 retry_count = 7 [default = 0];
447 // Information about the requesting device and its platform.
448 optional DeviceClassifier device_classifier = 8;
451 // Contains information needed to begin a device enrollment.
452 message SetupEnrollmentResponse {
453 // Should return OK if the request was well formed.
454 optional string status = 1;
456 // Information for each of the requested protocol <code>type</code>s.
457 repeated SetupEnrollmentInfo infos = 2;
460 // Used to enable or disable EasyUnlock features on a specified device, and also
461 // causes other devices to sync the new EasyUnlock state.
462 message ToggleEasyUnlockRequest {
463 // If true, Easy Unlock will be enabled for the device with public key equal
464 // to public_key. Otherwise, it will be disabled for that device.
465 optional bool enable = 1;
467 // Encoded public key of the device to enable/disable (here you must use the
468 // same exact encoding that was sent during device enrollment).
469 optional bytes public_key = 2;
471 // If true, EasyUnlock enabled state will be set to the value of "enable" for
472 // all of a user's devices. This is the same as calling the toggle RPC for
473 // every device. However, this removes the need for calling GetMyDevices, so
474 // it reduces network overhead. If this field is set "public_key" must not be
475 // set. NOTE: the case enable=true is not yet supported, so this option can
476 // only disable EasyUnlock for all devices.
477 optional bool apply_to_all = 3;
479 // Information about the requesting device and its platform.
480 optional DeviceClassifier device_classifier = 4;
483 message ToggleEasyUnlockResponse {