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