1 // 2 // 3 // Copyright 2017 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_SRC_CORE_TSI_TRANSPORT_SECURITY_GRPC_H 20 #define GRPC_SRC_CORE_TSI_TRANSPORT_SECURITY_GRPC_H 21 22 #include <grpc/support/port_platform.h> 23 24 #include <grpc/slice_buffer.h> 25 26 #include "src/core/tsi/transport_security.h" 27 28 // This method creates a tsi_zero_copy_grpc_protector object. It return TSI_OK 29 // assuming there is no fatal error. 30 // The caller is responsible for destroying the protector. 31 tsi_result tsi_handshaker_result_create_zero_copy_grpc_protector( 32 const tsi_handshaker_result* self, size_t* max_output_protected_frame_size, 33 tsi_zero_copy_grpc_protector** protector); 34 35 // -- tsi_zero_copy_grpc_protector object -- 36 37 // Outputs protected frames. 38 // - unprotected_slices is the unprotected data to be protected. 39 // - protected_slices is the protected output frames. One or more frames 40 // may be produced in this protect function. 41 // - This method returns TSI_OK in case of success or a specific error code in 42 // case of failure. 43 tsi_result tsi_zero_copy_grpc_protector_protect( 44 tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* unprotected_slices, 45 grpc_slice_buffer* protected_slices); 46 47 // Outputs unprotected bytes. 48 // - protected_slices is the bytes of protected frames. 49 // - unprotected_slices is the unprotected output data. 50 // - if min_progress_size is not null, it returns the size of the last 51 // incomplete frame which could not be fully unprotected. 52 // - This method returns TSI_OK in case of success. Success includes cases where 53 // there is not enough data to output in which case unprotected_slices has 0 54 // bytes. 55 tsi_result tsi_zero_copy_grpc_protector_unprotect( 56 tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices, 57 grpc_slice_buffer* unprotected_slices, int* min_progress_size); 58 59 // Destroys the tsi_zero_copy_grpc_protector object. 60 void tsi_zero_copy_grpc_protector_destroy(tsi_zero_copy_grpc_protector* self); 61 62 // Returns value of max protected frame size. Useful for testing. 63 tsi_result tsi_zero_copy_grpc_protector_max_frame_size( 64 tsi_zero_copy_grpc_protector* self, size_t* max_frame_size); 65 66 // Base for tsi_zero_copy_grpc_protector implementations. 67 struct tsi_zero_copy_grpc_protector_vtable { 68 tsi_result (*protect)(tsi_zero_copy_grpc_protector* self, 69 grpc_slice_buffer* unprotected_slices, 70 grpc_slice_buffer* protected_slices); 71 tsi_result (*unprotect)(tsi_zero_copy_grpc_protector* self, 72 grpc_slice_buffer* protected_slices, 73 grpc_slice_buffer* unprotected_slices, 74 int* min_progress_size); 75 void (*destroy)(tsi_zero_copy_grpc_protector* self); 76 tsi_result (*max_frame_size)(tsi_zero_copy_grpc_protector* self, 77 size_t* max_frame_size); 78 }; 79 struct tsi_zero_copy_grpc_protector { 80 const tsi_zero_copy_grpc_protector_vtable* vtable; 81 }; 82 83 #endif // GRPC_SRC_CORE_TSI_TRANSPORT_SECURITY_GRPC_H 84