chromium/components/trusted_vault/proto/local_trusted_vault.proto

// 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;

  // 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 = 4;
}

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 RecoveryKeyStoreState {
  // Whether LSKF-wrapped recovery keys should be uploaded to the Recovery Key
  // Store service periodically.
  optional bool recovery_key_store_upload_enabled = 1;

  // The last time an update to recovery key store succeeded.
  optional int64 last_recovery_key_store_update_millis_since_unix_epoch = 2;

  // The public part of the LSKF-wrapped application key pair that was uploaded
  // to the recovery key store service.
  optional bytes public_key = 3;

  // Whether `public_key` is registered as a member of the security domain.
  optional bool recovery_key_is_registered_to_security_domain = 4;
};

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;

  // 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;

  optional RecoveryKeyStoreState recovery_key_store_state = 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;
}