blob: aa4acdc52c54463b56e009fa7d7c1a936a0f310a [file]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Common sync protocol for encrypted data.
// If you change or add any fields in this file, update proto_visitors.h and
// potentially proto_enum_conversions.{h, cc}.
syntax = "proto2";
option java_multiple_files = true;
option java_package = "org.chromium.components.sync.protocol";
option optimize_for = LITE_RUNTIME;
package sync_pb;
// A proto representation of an encrypted blob as exposed in the Sync protocol,
// along with metadata to help identify which key should be used to decrypt this
// specific encrypted blob. The latter information is useful as performance
// optimization, because rotation of the encryption key doesn't immediately
// re-encrypt all data. If rotation has been issued multiple times, it may lead
// to a significant number of candidate keys that need to be tried with, so it
// is faster to be able to narrow down to exactly one candidate key (based on a
// name or ID).
message EncryptedData {
// The initial version of Sync's encryption (referred here as V1) populated
// exactly two fields below: `key_name` and `blob`.
optional string key_name = 1;
optional string blob = 2; // base64-encoded.
// The more modern (experimental) V2 populates `blob_v2` and optionally
// `key_id_v2` (clients should handle absence correctly and fall back to
// exhaustive attempts with all keys available).
optional bytes blob_v2 = 3;
optional uint32 key_id_v2 = 4;
}