• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_CORE_TSI_TRANSPORT_SECURITY_GRPC_H
20 #define GRPC_CORE_TSI_TRANSPORT_SECURITY_GRPC_H
21 
22 #include <grpc/support/port_platform.h>
23 
24 #include <grpc/slice_buffer.h>
25 #include "src/core/tsi/transport_security.h"
26 
27 /* This method creates a tsi_zero_copy_grpc_protector object. It return TSI_OK
28    assuming there is no fatal error.
29    The caller is responsible for destroying the protector.  */
30 tsi_result tsi_handshaker_result_create_zero_copy_grpc_protector(
31     const tsi_handshaker_result* self, size_t* max_output_protected_frame_size,
32     tsi_zero_copy_grpc_protector** protector);
33 
34 /* -- tsi_zero_copy_grpc_protector object --  */
35 
36 /* Outputs protected frames.
37    - unprotected_slices is the unprotected data to be protected.
38    - protected_slices is the protected output frames. One or more frames
39      may be produced in this protect function.
40    - This method returns TSI_OK in case of success or a specific error code in
41      case of failure.  */
42 tsi_result tsi_zero_copy_grpc_protector_protect(
43     tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* unprotected_slices,
44     grpc_slice_buffer* protected_slices);
45 
46 /* Outputs unprotected bytes.
47    - protected_slices is the bytes of protected frames.
48    - unprotected_slices is the unprotected output data.
49    - This method returns TSI_OK in case of success. Success includes cases where
50      there is not enough data to output in which case unprotected_slices has 0
51      bytes.  */
52 tsi_result tsi_zero_copy_grpc_protector_unprotect(
53     tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
54     grpc_slice_buffer* unprotected_slices);
55 
56 /* Destroys the tsi_zero_copy_grpc_protector object.  */
57 void tsi_zero_copy_grpc_protector_destroy(tsi_zero_copy_grpc_protector* self);
58 
59 /* Base for tsi_zero_copy_grpc_protector implementations.  */
60 typedef struct {
61   tsi_result (*protect)(tsi_zero_copy_grpc_protector* self,
62                         grpc_slice_buffer* unprotected_slices,
63                         grpc_slice_buffer* protected_slices);
64   tsi_result (*unprotect)(tsi_zero_copy_grpc_protector* self,
65                           grpc_slice_buffer* protected_slices,
66                           grpc_slice_buffer* unprotected_slices);
67   void (*destroy)(tsi_zero_copy_grpc_protector* self);
68 } tsi_zero_copy_grpc_protector_vtable;
69 
70 struct tsi_zero_copy_grpc_protector {
71   const tsi_zero_copy_grpc_protector_vtable* vtable;
72 };
73 
74 #endif /* GRPC_CORE_TSI_TRANSPORT_SECURITY_GRPC_H */
75