// Copyright 2018-2022 Cargill Incorporated // // 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 // // http://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 = "proto3"; // The enumerated types of authorization messages. enum AuthorizationMessageType { UNSET_AUTHORIZATION_MESSAGE_TYPE = 0; // Begin a Connection. CONNECT_REQUEST = 1; CONNECT_RESPONSE = 2; // Authorize a peer. AUTHORIZE = 3; // Authorization failure. AUTHORIZATION_ERROR = 4; // Trust. TRUST_REQUEST = 10; // Start of v1 messages AUTH_COMPLETE = 100; AUTH_PROTOCOL_REQUEST = 101; AUTH_PROTOCOL_RESPONSE = 102; // v1 Trust authorization AUTH_TRUST_REQUEST = 110; AUTH_TRUST_RESPONSE = 111; // Challenge Authorization AUTH_CHALLENGE_NONCE_REQUEST = 120; AUTH_CHALLENGE_NONCE_RESPONSE = 121; AUTH_CHALLENGE_SUBMIT_REQUEST = 122; AUTH_CHALLENGE_SUBMIT_RESPONSE = 123; } // The authorization message envelope. message AuthorizationMessage { // The type of message. AuthorizationMessageType message_type = 1; // the payload. bytes payload = 2; } // A connection request message. // // This message provides information from the incoming connection. message ConnectRequest { enum HandshakeMode { UNSET_HANDSHAKE_MODE = 0; UNIDIRECTIONAL = 1; BIDIRECTIONAL = 2; } HandshakeMode handshake_mode = 1; } // A connection response message. // // This message provides information for the incoming peer regarding the types // of authorization accepted. message ConnectResponse { enum AuthorizationType { UNSET_AUTHORIZATION_TYPE = 0; TRUST = 1; } // A list of available authorization types accepted by the sending node. repeated AuthorizationType accepted_authorization_types = 1; } // A trust request. // // A trust request is sent in response to a Connect Message, if the node is using trust // authentication as its means of allowing a node to connect. message TrustRequest { // The requesting node's identity. string identity = 1; } // A successful authorization message. // // This message is returned after either a TrustResponse or a ChallengeResponse has been returned // by the connecting node. message AuthorizedMessage { } // A message indicating an error in authorization. // // This includes failed authorizations, or invalid messages during the authorization // handshake conversation. message AuthorizationError { enum AuthorizationErrorType { UNSET_AUTHORIZATION_ERROR_TYPE = 0; AUTHORIZATION_REJECTED = 1; } // The type of error. AuthorizationErrorType error_type = 1; // The error details. string error_message = 2; } // ------------- v1 Messages ------------------ // Authorization protocol agreement request message // // This message will allow for the two connecting nodes to agree on what // authorization protocol version will be used message AuthProtocolRequest { uint32 auth_protocol_min = 1; uint32 auth_protocol_max = 2; } // Authorization protocol agreement response message // // Contains the agreed upon protocol version and the list of supported // authorization types message AuthProtocolResponse { enum PeerAuthorizationType { UNSET_AUTHORIZATION_TYPE = 0; TRUST = 1; CHALLENGE = 2; } uint32 auth_protocol = 1; repeated PeerAuthorizationType accepted_authorization_type = 2; } // v1 Trust request // // Contains the identity of the connecting node message AuthTrustRequest { string identity = 1; } // v1 Trust response // // Returned if the identity was accepted message AuthTrustResponse{} // Challenge nonce requests // // Sent to a node to request a nonce that can be used for challenge // authorization message AuthChallengeNonceRequest{} // Challenge nonce response // // Returns the nonce that must be signed by the requesting node to prove // their identity message AuthChallengeNonceResponse { bytes nonce = 1; } message SubmitRequest { bytes public_key = 1; bytes signature = 2; } // Challenge submit requests // // The connecting nodes public keys and the signatures created by signing the // nonce received from the nonce response message AuthChallengeSubmitRequest { repeated SubmitRequest submit_requests = 1; } // v1 challenge response // // Returned if the signature and public key are valid message AuthChallengeSubmitResponse { bytes public_key = 1; } // Returned if authorization is complete message AuthComplete {}