blob: 775ff39a972e1311a6d150479fda95ff1415e617 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package trusted_vault_pb;
// This enum is used in histograms. These values are persisted to logs. Entries
// should not be renumbered and numeric values should never be reused, only add
// at the end and. Also remember to update in tools/metrics/histograms/enums.xml
// TrustedVaultDegradedRecoverabilityValue enum.
// LINT.IfChange(TrustedVaultDegradedRecoverabilityValue)
enum DegradedRecoverabilityValue {
kUnknown = 0;
kNotDegraded = 1;
kDegraded = 2;
}
// LINT.ThenChange(/tools/metrics/histograms/metadata/sync/enums.xml:TrustedVaultDegradedRecoverabilityValue)
message LocalTrustedVaultKey {
// The actual key.
optional bytes key_material = 1;
}
message LocalDeviceRegistrationInfo {
// Private SecureBox key.
optional bytes private_key_material = 1;
// Indicates whether device is registered, i.e. whether its public key is
// successfully submitted to the server. If set to true, it is only
// trustworthy depending on whether re-registration completed successfully,
// reflected in `device_registered_version`.
optional bool device_registered = 2;
// Used to trigger another device registration attempt, even if device is
// already registered. Not set if `device_registered` is false.
optional int32 device_registered_version = 3;
// Deprecated. Use
// `LocalTrustedVaultPerUser.last_registration_returned_local_data_obsolete`
// instead.
optional bool deprecated_last_registration_returned_local_data_obsolete = 4
[deprecated = true];
}
message ICloudKeychainRegistrationInfo {
// Indicates whether iCloud Keychain is registered, i.e. whether its public
// key is successfully submitted to the server.
// Note: The iCloud Keychain could have been registered successfully on
// another device already, which isn't reflected in this field initially.
// Attempting a registration will, however, detect that state an update this
// field.
optional bool registered = 1;
}
message LocalTrustedVaultDegradedRecoverabilityState {
reserved 1;
// The time (in milliseconds since UNIX epoch) at which last refreshing
// request was sent.
optional int64 last_refresh_time_millis_since_unix_epoch = 2;
// Indicates whether the recoverability is degraded.
optional DegradedRecoverabilityValue degraded_recoverability_value = 3;
}
message LocalTrustedVaultPerUser {
// User identifier.
optional bytes gaia_id = 1;
// All keys known for a user.
repeated LocalTrustedVaultKey vault_key = 2;
// The version corresponding to the last element in `vault_key`.
optional int32 last_vault_key_version = 3;
// Indicates whether `vault_key` is marked as stale by upper layers, which
// suggests (but doesn't guarantee) that the server may contain additional
// (newer) keys. If the device is registered in the security domain, it means
// it may be worth downloading new keys (follow key rotation). Otherwise, new
// keys need to be fetched through key retrieval procedure.
optional bool keys_marked_as_stale_by_consumer = 4;
// Device key and corresponding registration metadata.
optional LocalDeviceRegistrationInfo local_device_registration_info = 5;
// Registration metadata for iCloud Keychain member.
optional ICloudKeychainRegistrationInfo icloud_keychain_registration_info =
10;
// The time (in milliseconds since UNIX epoch) at which last unsuccessful (due
// to transient errors) request was sent to the vault service. Used for
// throttling requests to the server.
optional int64 last_failed_request_millis_since_unix_epoch = 6;
// Whether keys relevant for the user should be deleted when account becomes
// non-primary.
optional bool should_delete_keys_when_non_primary = 7;
// The state of the degraded recoverability, indicates whether the
// recoverability is degraded and when was the last refreshing time.
optional LocalTrustedVaultDegradedRecoverabilityState
degraded_recoverability_state = 8;
// If true, it indicates that a previous attempt to register or reregister
// the device failed, with a failure that suggests future attempts will fail
// too. This usually means additional keys are needed, which can be resolved
// via key retrieval.
//
// Note that true doesn't imply the device isn't registered. It may be that
// the failure corresponds to a re-registration attempt. In this case, besides
// key retrieval, it may be possible to resolve the error by attempting to
// download new keys.
optional bool last_registration_returned_local_data_obsolete = 11;
reserved 9;
}
message LocalTrustedVault {
repeated LocalTrustedVaultPerUser user = 1;
// Version of the stored data, used to perform data migrations.
optional int32 data_version = 2;
}
// Encapsulates serialized local data (LocalTrustedVault) together with its MD5
// digest, used to store data in the file and verify its integrity.
message LocalTrustedVaultFileContent {
// Serialized LocalTrustedVault.
optional string serialized_local_trusted_vault = 1;
// MD5 digest of `serialized_local_trusted_vault` formatted as hexadecimal
// string.
optional string md5_digest_hex_string = 2;
// SHA256 digest of `serialized_local_trusted_vault` formatted as hexadecimal
// string. Added in crrev.com/c/6702027 as part of a migtation effort away
// from MD5.
optional string sha256_digest_hex_string = 3;
}