syntax = "proto2"; message TemporaryExposureKeyExport { // Time window of keys in this batch based on arrival to server, in UTC seconds optional fixed64 start_timestamp = 1; optional fixed64 end_timestamp = 2; // Region for which these keys came from (e.g., country) optional string region = 3; // E.g., File 2 in batch size of 10. Ordinal, 1-based numbering. optional int32 batch_num = 4; optional int32 batch_size = 5; // Information about associated signatures repeated SignatureInfo signature_infos = 6; // The TemporaryExposureKeys themselves repeated TemporaryExposureKey keys = 7; } message SignatureInfo { // Apple App Store Application Bundle ID optional string app_bundle_id = 1; // Android App package name optional string android_package = 2; // Key version for rollovers optional string verification_key_version = 3; // Additional identifying information // E.g., backend might serve app in different countries with different keys optional string verification_key_id = 4; // E.g. ECDSA using a p-256 curve and SHA-256 as a hash function optional string signature_algorithm = 5; } message SubmissionPayload { repeated TemporaryExposureKey keys = 1; } message TemporaryExposureKey { // Key of infected user optional bytes key_data = 1; // Varying risk associated with a key depending on diagnosis method optional int32 transmission_risk_level = 2; // The interval number since epoch for which a key starts optional int32 rolling_start_interval_number = 3; // Increments of 10 minutes describing how long a key is valid optional int32 rolling_period = 4 [default = 144]; // defaults to 24 hours } message TEKSignatureList { repeated TEKSignature signatures = 1; } message TEKSignature { // Info about the signing key, version, algorithm, etc optional SignatureInfo signature_info = 1; // E.g., File 2 in batch size of 10. Ordinal, 1-based numbering. // E.g., Batch 2 of 10 optional int32 batch_num = 2; optional int32 batch_size = 3; // Signature in X9.62 format (ASN.1 SEQUENCE of two INTEGER fields) optional bytes signature = 4; }