/* Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ syntax = "proto2"; package securegcm; option java_package = "com.google.security.cryptauth.lib.securegcm"; option java_outer_classname = "DeviceToDeviceMessagesProto"; option objc_class_prefix = "SGCM"; import "securemessage.proto"; // Used by protocols between devices message DeviceToDeviceMessage { // the payload of the message optional bytes message = 1; // the sequence number of the message - must be increasing. optional int32 sequence_number = 2; } // sent as the first message from initiator to responder // in an unauthenticated Diffie-Hellman Key Exchange message InitiatorHello { // The session public key to send to the responder optional securemessage.GenericPublicKey public_dh_key = 1; // The protocol version optional int32 protocol_version = 2 [default = 0]; } // sent inside the header of the first message from the responder to the // initiator in an unauthenticated Diffie-Hellman Key Exchange message ResponderHello { // The session public key to send to the initiator optional securemessage.GenericPublicKey public_dh_key = 1; // The protocol version optional int32 protocol_version = 2 [default = 0]; } // Type of curve enum Curve { ED_25519 = 1; } // A convenience proto for encoding curve points in affine representation message EcPoint { required Curve curve = 1; // x and y are encoded in big-endian two's complement // client MUST verify (x,y) is a valid point on the specified curve required bytes x = 2; required bytes y = 3; } message SpakeHandshakeMessage { // Each flow in the protocol bumps this counter optional int32 flow_number = 1; // Some (but not all) SPAKE flows send a point on an elliptic curve optional EcPoint ec_point = 2; // Some (but not all) SPAKE flows send a hash value optional bytes hash_value = 3; // The last flow of a SPAKE protocol can send an optional payload, // since the key exchange is already complete on the sender's side. optional bytes payload = 4; }