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