xref: /aosp_15_r20/external/googleapis/google/cloud/webrisk/v1beta1/webrisk.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2019 Google LLC.
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker//
15*d5c09012SAndroid Build Coastguard Worker
16*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
17*d5c09012SAndroid Build Coastguard Worker
18*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.webrisk.v1beta1;
19*d5c09012SAndroid Build Coastguard Worker
20*d5c09012SAndroid Build Coastguard Workerimport "google/api/annotations.proto";
21*d5c09012SAndroid Build Coastguard Workerimport "google/api/client.proto";
22*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto";
23*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
24*d5c09012SAndroid Build Coastguard Worker
25*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.WebRisk.V1Beta1";
26*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/webrisk/apiv1beta1/webriskpb;webriskpb";
27*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true;
28*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "WebRiskProto";
29*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.webrisk.v1beta1";
30*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "GCWR";
31*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\WebRisk\\V1beta1";
32*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::WebRisk::V1beta1";
33*d5c09012SAndroid Build Coastguard Worker
34*d5c09012SAndroid Build Coastguard Worker// Web Risk v1beta1 API defines an interface to detect malicious URLs on your
35*d5c09012SAndroid Build Coastguard Worker// website and in client applications.
36*d5c09012SAndroid Build Coastguard Workerservice WebRiskServiceV1Beta1 {
37*d5c09012SAndroid Build Coastguard Worker  option (google.api.default_host) = "webrisk.googleapis.com";
38*d5c09012SAndroid Build Coastguard Worker  option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
39*d5c09012SAndroid Build Coastguard Worker
40*d5c09012SAndroid Build Coastguard Worker  // Gets the most recent threat list diffs.
41*d5c09012SAndroid Build Coastguard Worker  rpc ComputeThreatListDiff(ComputeThreatListDiffRequest) returns (ComputeThreatListDiffResponse) {
42*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
43*d5c09012SAndroid Build Coastguard Worker      get: "/v1beta1/threatLists:computeDiff"
44*d5c09012SAndroid Build Coastguard Worker    };
45*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "threat_type,version_token,constraints";
46*d5c09012SAndroid Build Coastguard Worker  }
47*d5c09012SAndroid Build Coastguard Worker
48*d5c09012SAndroid Build Coastguard Worker  // This method is used to check whether a URI is on a given threatList.
49*d5c09012SAndroid Build Coastguard Worker  rpc SearchUris(SearchUrisRequest) returns (SearchUrisResponse) {
50*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
51*d5c09012SAndroid Build Coastguard Worker      get: "/v1beta1/uris:search"
52*d5c09012SAndroid Build Coastguard Worker    };
53*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "uri,threat_types";
54*d5c09012SAndroid Build Coastguard Worker  }
55*d5c09012SAndroid Build Coastguard Worker
56*d5c09012SAndroid Build Coastguard Worker  // Gets the full hashes that match the requested hash prefix.
57*d5c09012SAndroid Build Coastguard Worker  // This is used after a hash prefix is looked up in a threatList
58*d5c09012SAndroid Build Coastguard Worker  // and there is a match. The client side threatList only holds partial hashes
59*d5c09012SAndroid Build Coastguard Worker  // so the client must query this method to determine if there is a full
60*d5c09012SAndroid Build Coastguard Worker  // hash match of a threat.
61*d5c09012SAndroid Build Coastguard Worker  rpc SearchHashes(SearchHashesRequest) returns (SearchHashesResponse) {
62*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
63*d5c09012SAndroid Build Coastguard Worker      get: "/v1beta1/hashes:search"
64*d5c09012SAndroid Build Coastguard Worker    };
65*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "hash_prefix,threat_types";
66*d5c09012SAndroid Build Coastguard Worker  }
67*d5c09012SAndroid Build Coastguard Worker}
68*d5c09012SAndroid Build Coastguard Worker
69*d5c09012SAndroid Build Coastguard Worker// Describes an API diff request.
70*d5c09012SAndroid Build Coastguard Workermessage ComputeThreatListDiffRequest {
71*d5c09012SAndroid Build Coastguard Worker  // The constraints for this diff.
72*d5c09012SAndroid Build Coastguard Worker  message Constraints {
73*d5c09012SAndroid Build Coastguard Worker    // The maximum size in number of entries. The diff will not contain more
74*d5c09012SAndroid Build Coastguard Worker    // entries than this value.  This should be a power of 2 between 2**10 and
75*d5c09012SAndroid Build Coastguard Worker    // 2**20.  If zero, no diff size limit is set.
76*d5c09012SAndroid Build Coastguard Worker    int32 max_diff_entries = 1;
77*d5c09012SAndroid Build Coastguard Worker
78*d5c09012SAndroid Build Coastguard Worker    // Sets the maximum number of entries that the client is willing to have
79*d5c09012SAndroid Build Coastguard Worker    // in the local database. This should be a power of 2 between 2**10 and
80*d5c09012SAndroid Build Coastguard Worker    // 2**20. If zero, no database size limit is set.
81*d5c09012SAndroid Build Coastguard Worker    int32 max_database_entries = 2;
82*d5c09012SAndroid Build Coastguard Worker
83*d5c09012SAndroid Build Coastguard Worker    // The compression types supported by the client.
84*d5c09012SAndroid Build Coastguard Worker    repeated CompressionType supported_compressions = 3;
85*d5c09012SAndroid Build Coastguard Worker  }
86*d5c09012SAndroid Build Coastguard Worker
87*d5c09012SAndroid Build Coastguard Worker  // The ThreatList to update.
88*d5c09012SAndroid Build Coastguard Worker  ThreatType threat_type = 1 [(google.api.field_behavior) = REQUIRED];
89*d5c09012SAndroid Build Coastguard Worker
90*d5c09012SAndroid Build Coastguard Worker  // The current version token of the client for the requested list (the
91*d5c09012SAndroid Build Coastguard Worker  // client version that was received from the last successful diff).
92*d5c09012SAndroid Build Coastguard Worker  bytes version_token = 2;
93*d5c09012SAndroid Build Coastguard Worker
94*d5c09012SAndroid Build Coastguard Worker  // Required. The constraints associated with this request.
95*d5c09012SAndroid Build Coastguard Worker  Constraints constraints = 3 [(google.api.field_behavior) = REQUIRED];
96*d5c09012SAndroid Build Coastguard Worker}
97*d5c09012SAndroid Build Coastguard Worker
98*d5c09012SAndroid Build Coastguard Workermessage ComputeThreatListDiffResponse {
99*d5c09012SAndroid Build Coastguard Worker  // The expected state of a client's local database.
100*d5c09012SAndroid Build Coastguard Worker  message Checksum {
101*d5c09012SAndroid Build Coastguard Worker    // The SHA256 hash of the client state; that is, of the sorted list of all
102*d5c09012SAndroid Build Coastguard Worker    // hashes present in the database.
103*d5c09012SAndroid Build Coastguard Worker    bytes sha256 = 1;
104*d5c09012SAndroid Build Coastguard Worker  }
105*d5c09012SAndroid Build Coastguard Worker
106*d5c09012SAndroid Build Coastguard Worker  // The type of response sent to the client.
107*d5c09012SAndroid Build Coastguard Worker  enum ResponseType {
108*d5c09012SAndroid Build Coastguard Worker    // Unknown.
109*d5c09012SAndroid Build Coastguard Worker    RESPONSE_TYPE_UNSPECIFIED = 0;
110*d5c09012SAndroid Build Coastguard Worker
111*d5c09012SAndroid Build Coastguard Worker    // Partial updates are applied to the client's existing local database.
112*d5c09012SAndroid Build Coastguard Worker    DIFF = 1;
113*d5c09012SAndroid Build Coastguard Worker
114*d5c09012SAndroid Build Coastguard Worker    // Full updates resets the client's entire local database. This means
115*d5c09012SAndroid Build Coastguard Worker    // that either the client had no state, was seriously out-of-date,
116*d5c09012SAndroid Build Coastguard Worker    // or the client is believed to be corrupt.
117*d5c09012SAndroid Build Coastguard Worker    RESET = 2;
118*d5c09012SAndroid Build Coastguard Worker  }
119*d5c09012SAndroid Build Coastguard Worker
120*d5c09012SAndroid Build Coastguard Worker  // The type of response. This may indicate that an action must be taken by the
121*d5c09012SAndroid Build Coastguard Worker  // client when the response is received.
122*d5c09012SAndroid Build Coastguard Worker  ResponseType response_type = 4;
123*d5c09012SAndroid Build Coastguard Worker
124*d5c09012SAndroid Build Coastguard Worker  // A set of entries to add to a local threat type's list.
125*d5c09012SAndroid Build Coastguard Worker  ThreatEntryAdditions additions = 5;
126*d5c09012SAndroid Build Coastguard Worker
127*d5c09012SAndroid Build Coastguard Worker  // A set of entries to remove from a local threat type's list.
128*d5c09012SAndroid Build Coastguard Worker  // This field may be empty.
129*d5c09012SAndroid Build Coastguard Worker  ThreatEntryRemovals removals = 6;
130*d5c09012SAndroid Build Coastguard Worker
131*d5c09012SAndroid Build Coastguard Worker  // The new opaque client version token.
132*d5c09012SAndroid Build Coastguard Worker  bytes new_version_token = 7;
133*d5c09012SAndroid Build Coastguard Worker
134*d5c09012SAndroid Build Coastguard Worker  // The expected SHA256 hash of the client state; that is, of the sorted list
135*d5c09012SAndroid Build Coastguard Worker  // of all hashes present in the database after applying the provided diff.
136*d5c09012SAndroid Build Coastguard Worker  // If the client state doesn't match the expected state, the client must
137*d5c09012SAndroid Build Coastguard Worker  // disregard this diff and retry later.
138*d5c09012SAndroid Build Coastguard Worker  Checksum checksum = 8;
139*d5c09012SAndroid Build Coastguard Worker
140*d5c09012SAndroid Build Coastguard Worker  // The soonest the client should wait before issuing any diff
141*d5c09012SAndroid Build Coastguard Worker  // request. Querying sooner is unlikely to produce a meaningful diff.
142*d5c09012SAndroid Build Coastguard Worker  // Waiting longer is acceptable considering the use case.
143*d5c09012SAndroid Build Coastguard Worker  // If this field is not set clients may update as soon as they want.
144*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp recommended_next_diff = 2;
145*d5c09012SAndroid Build Coastguard Worker}
146*d5c09012SAndroid Build Coastguard Worker
147*d5c09012SAndroid Build Coastguard Worker// Request to check URI entries against threatLists.
148*d5c09012SAndroid Build Coastguard Workermessage SearchUrisRequest {
149*d5c09012SAndroid Build Coastguard Worker  // Required. The URI to be checked for matches.
150*d5c09012SAndroid Build Coastguard Worker  string uri = 1 [(google.api.field_behavior) = REQUIRED];
151*d5c09012SAndroid Build Coastguard Worker
152*d5c09012SAndroid Build Coastguard Worker  // Required. The ThreatLists to search in.
153*d5c09012SAndroid Build Coastguard Worker  repeated ThreatType threat_types = 2 [(google.api.field_behavior) = REQUIRED];
154*d5c09012SAndroid Build Coastguard Worker}
155*d5c09012SAndroid Build Coastguard Worker
156*d5c09012SAndroid Build Coastguard Workermessage SearchUrisResponse {
157*d5c09012SAndroid Build Coastguard Worker  // Contains threat information on a matching uri.
158*d5c09012SAndroid Build Coastguard Worker  message ThreatUri {
159*d5c09012SAndroid Build Coastguard Worker    // The ThreatList this threat belongs to.
160*d5c09012SAndroid Build Coastguard Worker    repeated ThreatType threat_types = 1;
161*d5c09012SAndroid Build Coastguard Worker
162*d5c09012SAndroid Build Coastguard Worker    // The cache lifetime for the returned match. Clients must not cache this
163*d5c09012SAndroid Build Coastguard Worker    // response past this timestamp to avoid false positives.
164*d5c09012SAndroid Build Coastguard Worker    google.protobuf.Timestamp expire_time = 2;
165*d5c09012SAndroid Build Coastguard Worker  }
166*d5c09012SAndroid Build Coastguard Worker
167*d5c09012SAndroid Build Coastguard Worker  // The threat list matches. This may be empty if the URI is on no list.
168*d5c09012SAndroid Build Coastguard Worker  ThreatUri threat = 1;
169*d5c09012SAndroid Build Coastguard Worker}
170*d5c09012SAndroid Build Coastguard Worker
171*d5c09012SAndroid Build Coastguard Worker// Request to return full hashes matched by the provided hash prefixes.
172*d5c09012SAndroid Build Coastguard Workermessage SearchHashesRequest {
173*d5c09012SAndroid Build Coastguard Worker  // A hash prefix, consisting of the most significant 4-32 bytes of a SHA256
174*d5c09012SAndroid Build Coastguard Worker  // hash. For JSON requests, this field is base64-encoded.
175*d5c09012SAndroid Build Coastguard Worker  bytes hash_prefix = 1;
176*d5c09012SAndroid Build Coastguard Worker
177*d5c09012SAndroid Build Coastguard Worker  // Required. The ThreatLists to search in.
178*d5c09012SAndroid Build Coastguard Worker  repeated ThreatType threat_types = 2 [(google.api.field_behavior) = REQUIRED];
179*d5c09012SAndroid Build Coastguard Worker}
180*d5c09012SAndroid Build Coastguard Worker
181*d5c09012SAndroid Build Coastguard Workermessage SearchHashesResponse {
182*d5c09012SAndroid Build Coastguard Worker  // Contains threat information on a matching hash.
183*d5c09012SAndroid Build Coastguard Worker  message ThreatHash {
184*d5c09012SAndroid Build Coastguard Worker    // The ThreatList this threat belongs to.
185*d5c09012SAndroid Build Coastguard Worker    // This must contain at least one entry.
186*d5c09012SAndroid Build Coastguard Worker    repeated ThreatType threat_types = 1;
187*d5c09012SAndroid Build Coastguard Worker
188*d5c09012SAndroid Build Coastguard Worker    // A 32 byte SHA256 hash. This field is in binary format. For JSON
189*d5c09012SAndroid Build Coastguard Worker    // requests, hashes are base64-encoded.
190*d5c09012SAndroid Build Coastguard Worker    bytes hash = 2;
191*d5c09012SAndroid Build Coastguard Worker
192*d5c09012SAndroid Build Coastguard Worker    // The cache lifetime for the returned match. Clients must not cache this
193*d5c09012SAndroid Build Coastguard Worker    // response past this timestamp to avoid false positives.
194*d5c09012SAndroid Build Coastguard Worker    google.protobuf.Timestamp expire_time = 3;
195*d5c09012SAndroid Build Coastguard Worker  }
196*d5c09012SAndroid Build Coastguard Worker
197*d5c09012SAndroid Build Coastguard Worker  // The full hashes that matched the requested prefixes.
198*d5c09012SAndroid Build Coastguard Worker  // The hash will be populated in the key.
199*d5c09012SAndroid Build Coastguard Worker  repeated ThreatHash threats = 1;
200*d5c09012SAndroid Build Coastguard Worker
201*d5c09012SAndroid Build Coastguard Worker  // For requested entities that did not match the threat list, how long to
202*d5c09012SAndroid Build Coastguard Worker  // cache the response until.
203*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp negative_expire_time = 2;
204*d5c09012SAndroid Build Coastguard Worker}
205*d5c09012SAndroid Build Coastguard Worker
206*d5c09012SAndroid Build Coastguard Worker// Contains the set of entries to add to a local database.
207*d5c09012SAndroid Build Coastguard Worker// May contain a combination of compressed and raw data in a single response.
208*d5c09012SAndroid Build Coastguard Workermessage ThreatEntryAdditions {
209*d5c09012SAndroid Build Coastguard Worker  // The raw SHA256-formatted entries.
210*d5c09012SAndroid Build Coastguard Worker  // Repeated to allow returning sets of hashes with different prefix sizes.
211*d5c09012SAndroid Build Coastguard Worker  repeated RawHashes raw_hashes = 1;
212*d5c09012SAndroid Build Coastguard Worker
213*d5c09012SAndroid Build Coastguard Worker  // The encoded 4-byte prefixes of SHA256-formatted entries, using a
214*d5c09012SAndroid Build Coastguard Worker  // Golomb-Rice encoding. The hashes are converted to uint32, sorted in
215*d5c09012SAndroid Build Coastguard Worker  // ascending order, then delta encoded and stored as encoded_data.
216*d5c09012SAndroid Build Coastguard Worker  RiceDeltaEncoding rice_hashes = 2;
217*d5c09012SAndroid Build Coastguard Worker}
218*d5c09012SAndroid Build Coastguard Worker
219*d5c09012SAndroid Build Coastguard Worker// Contains the set of entries to remove from a local database.
220*d5c09012SAndroid Build Coastguard Workermessage ThreatEntryRemovals {
221*d5c09012SAndroid Build Coastguard Worker  // The raw removal indices for a local list.
222*d5c09012SAndroid Build Coastguard Worker  RawIndices raw_indices = 1;
223*d5c09012SAndroid Build Coastguard Worker
224*d5c09012SAndroid Build Coastguard Worker  // The encoded local, lexicographically-sorted list indices, using a
225*d5c09012SAndroid Build Coastguard Worker  // Golomb-Rice encoding. Used for sending compressed removal indices. The
226*d5c09012SAndroid Build Coastguard Worker  // removal indices (uint32) are sorted in ascending order, then delta encoded
227*d5c09012SAndroid Build Coastguard Worker  // and stored as encoded_data.
228*d5c09012SAndroid Build Coastguard Worker  RiceDeltaEncoding rice_indices = 2;
229*d5c09012SAndroid Build Coastguard Worker}
230*d5c09012SAndroid Build Coastguard Worker
231*d5c09012SAndroid Build Coastguard Worker// The type of threat. This maps dirrectly to the threat list a threat may
232*d5c09012SAndroid Build Coastguard Worker// belong to.
233*d5c09012SAndroid Build Coastguard Workerenum ThreatType {
234*d5c09012SAndroid Build Coastguard Worker  // Unknown.
235*d5c09012SAndroid Build Coastguard Worker  THREAT_TYPE_UNSPECIFIED = 0;
236*d5c09012SAndroid Build Coastguard Worker
237*d5c09012SAndroid Build Coastguard Worker  // Malware targeting any platform.
238*d5c09012SAndroid Build Coastguard Worker  MALWARE = 1;
239*d5c09012SAndroid Build Coastguard Worker
240*d5c09012SAndroid Build Coastguard Worker  // Social engineering targeting any platform.
241*d5c09012SAndroid Build Coastguard Worker  SOCIAL_ENGINEERING = 2;
242*d5c09012SAndroid Build Coastguard Worker
243*d5c09012SAndroid Build Coastguard Worker  // Unwanted software targeting any platform.
244*d5c09012SAndroid Build Coastguard Worker  UNWANTED_SOFTWARE = 3;
245*d5c09012SAndroid Build Coastguard Worker}
246*d5c09012SAndroid Build Coastguard Worker
247*d5c09012SAndroid Build Coastguard Worker// The ways in which threat entry sets can be compressed.
248*d5c09012SAndroid Build Coastguard Workerenum CompressionType {
249*d5c09012SAndroid Build Coastguard Worker  // Unknown.
250*d5c09012SAndroid Build Coastguard Worker  COMPRESSION_TYPE_UNSPECIFIED = 0;
251*d5c09012SAndroid Build Coastguard Worker
252*d5c09012SAndroid Build Coastguard Worker  // Raw, uncompressed data.
253*d5c09012SAndroid Build Coastguard Worker  RAW = 1;
254*d5c09012SAndroid Build Coastguard Worker
255*d5c09012SAndroid Build Coastguard Worker  // Rice-Golomb encoded data.
256*d5c09012SAndroid Build Coastguard Worker  RICE = 2;
257*d5c09012SAndroid Build Coastguard Worker}
258*d5c09012SAndroid Build Coastguard Worker
259*d5c09012SAndroid Build Coastguard Worker// A set of raw indices to remove from a local list.
260*d5c09012SAndroid Build Coastguard Workermessage RawIndices {
261*d5c09012SAndroid Build Coastguard Worker  // The indices to remove from a lexicographically-sorted local list.
262*d5c09012SAndroid Build Coastguard Worker  repeated int32 indices = 1;
263*d5c09012SAndroid Build Coastguard Worker}
264*d5c09012SAndroid Build Coastguard Worker
265*d5c09012SAndroid Build Coastguard Worker// The uncompressed threat entries in hash format.
266*d5c09012SAndroid Build Coastguard Worker// Hashes can be anywhere from 4 to 32 bytes in size. A large majority are 4
267*d5c09012SAndroid Build Coastguard Worker// bytes, but some hashes are lengthened if they collide with the hash of a
268*d5c09012SAndroid Build Coastguard Worker// popular URI.
269*d5c09012SAndroid Build Coastguard Worker//
270*d5c09012SAndroid Build Coastguard Worker// Used for sending ThreatEntryAdditons to clients that do not support
271*d5c09012SAndroid Build Coastguard Worker// compression, or when sending non-4-byte hashes to clients that do support
272*d5c09012SAndroid Build Coastguard Worker// compression.
273*d5c09012SAndroid Build Coastguard Workermessage RawHashes {
274*d5c09012SAndroid Build Coastguard Worker  // The number of bytes for each prefix encoded below.  This field can be
275*d5c09012SAndroid Build Coastguard Worker  // anywhere from 4 (shortest prefix) to 32 (full SHA256 hash).
276*d5c09012SAndroid Build Coastguard Worker  int32 prefix_size = 1;
277*d5c09012SAndroid Build Coastguard Worker
278*d5c09012SAndroid Build Coastguard Worker  // The hashes, in binary format, concatenated into one long string. Hashes are
279*d5c09012SAndroid Build Coastguard Worker  // sorted in lexicographic order. For JSON API users, hashes are
280*d5c09012SAndroid Build Coastguard Worker  // base64-encoded.
281*d5c09012SAndroid Build Coastguard Worker  bytes raw_hashes = 2;
282*d5c09012SAndroid Build Coastguard Worker}
283*d5c09012SAndroid Build Coastguard Worker
284*d5c09012SAndroid Build Coastguard Worker// The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or
285*d5c09012SAndroid Build Coastguard Worker// compressed removal indices.
286*d5c09012SAndroid Build Coastguard Workermessage RiceDeltaEncoding {
287*d5c09012SAndroid Build Coastguard Worker  // The offset of the first entry in the encoded data, or, if only a single
288*d5c09012SAndroid Build Coastguard Worker  // integer was encoded, that single integer's value. If the field is empty or
289*d5c09012SAndroid Build Coastguard Worker  // missing, assume zero.
290*d5c09012SAndroid Build Coastguard Worker  int64 first_value = 1;
291*d5c09012SAndroid Build Coastguard Worker
292*d5c09012SAndroid Build Coastguard Worker  // The Golomb-Rice parameter, which is a number between 2 and 28. This field
293*d5c09012SAndroid Build Coastguard Worker  // is missing (that is, zero) if `num_entries` is zero.
294*d5c09012SAndroid Build Coastguard Worker  int32 rice_parameter = 2;
295*d5c09012SAndroid Build Coastguard Worker
296*d5c09012SAndroid Build Coastguard Worker  // The number of entries that are delta encoded in the encoded data. If only a
297*d5c09012SAndroid Build Coastguard Worker  // single integer was encoded, this will be zero and the single value will be
298*d5c09012SAndroid Build Coastguard Worker  // stored in `first_value`.
299*d5c09012SAndroid Build Coastguard Worker  int32 entry_count = 3;
300*d5c09012SAndroid Build Coastguard Worker
301*d5c09012SAndroid Build Coastguard Worker  // The encoded deltas that are encoded using the Golomb-Rice coder.
302*d5c09012SAndroid Build Coastguard Worker  bytes encoded_data = 4;
303*d5c09012SAndroid Build Coastguard Worker}
304