1 /* 2 * 3 * Copyright 2018 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 #ifndef GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_TSI_HANDSHAKER_H 20 #define GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_TSI_HANDSHAKER_H 21 22 #include <grpc/support/port_platform.h> 23 24 #include <grpc/grpc.h> 25 26 #include "src/core/lib/iomgr/pollset_set.h" 27 #include "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h" 28 #include "src/core/tsi/alts/handshaker/alts_handshaker_client.h" 29 #include "src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h" 30 #include "src/core/tsi/transport_security.h" 31 #include "src/core/tsi/transport_security_interface.h" 32 33 #define TSI_ALTS_SERVICE_ACCOUNT_PEER_PROPERTY "service_accont" 34 #define TSI_ALTS_CERTIFICATE_TYPE "ALTS" 35 #define TSI_ALTS_RPC_VERSIONS "rpc_versions" 36 37 const size_t kTsiAltsNumOfPeerProperties = 3; 38 39 typedef struct alts_tsi_handshaker alts_tsi_handshaker; 40 41 /** 42 * This method creates a ALTS TSI handshaker instance. 43 * 44 * - options: ALTS credentials options containing information passed from TSI 45 * caller (e.g., rpc protocol versions). 46 * - target_name: the name of the endpoint that the channel is connecting to, 47 * and will be used for secure naming check. 48 * - handshaker_service_url: address of ALTS handshaker service in the format of 49 * "host:port". 50 * - is_client: boolean value indicating if the handshaker is used at the client 51 * (is_client = true) or server (is_client = false) side. 52 * - interested_parties: set of pollsets interested in this connection. 53 * - self: address of ALTS TSI handshaker instance to be returned from the 54 * method. 55 * 56 * It returns TSI_OK on success and an error status code on failure. Note that 57 * if interested_parties is nullptr, a dedicated TSI thread will be created and 58 * used. 59 */ 60 tsi_result alts_tsi_handshaker_create( 61 const grpc_alts_credentials_options* options, const char* target_name, 62 const char* handshaker_service_url, bool is_client, 63 grpc_pollset_set* interested_parties, tsi_handshaker** self); 64 65 /** 66 * This method creates an ALTS TSI handshaker result instance. 67 * 68 * - resp: data received from the handshaker service. 69 * - is_client: a boolean value indicating if the result belongs to a 70 * client or not. 71 * - result: address of ALTS TSI handshaker result instance. 72 */ 73 tsi_result alts_tsi_handshaker_result_create(grpc_gcp_handshaker_resp* resp, 74 bool is_client, 75 tsi_handshaker_result** result); 76 77 /** 78 * This method sets unused bytes of ALTS TSI handshaker result instance. 79 * 80 * - result: an ALTS TSI handshaker result instance. 81 * - recv_bytes: data received from the handshaker service. 82 * - bytes_consumed: size of data consumed by the handshaker service. 83 */ 84 void alts_tsi_handshaker_result_set_unused_bytes(tsi_handshaker_result* result, 85 grpc_slice* recv_bytes, 86 size_t bytes_consumed); 87 88 /** 89 * This method returns a boolean value indicating if an ALTS TSI handshaker 90 * has been shutdown or not. 91 */ 92 bool alts_tsi_handshaker_has_shutdown(alts_tsi_handshaker* handshaker); 93 94 #endif /* GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_TSI_HANDSHAKER_H */ 95