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_SRC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H
20 #define GRPC_SRC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H
21 
22 #include <grpc/support/port_platform.h>
23 
24 #include <stdbool.h>
25 #include <stdlib.h>
26 
27 #include <grpc/grpc.h>
28 
29 // Main struct for a crypter counter managed within seal/unseal operations.
30 typedef struct alts_counter {
31   size_t size;
32   size_t overflow_size;
33   unsigned char* counter;
34 } alts_counter;
35 
36 ///
37 /// This method creates and initializes an alts_counter instance.
38 ///
39 ///- is_client: a flag indicating if the alts_counter instance will be used
40 ///  at client (is_client = true) or server (is_client = false) side.
41 ///- counter_size: size of buffer holding the counter value.
42 ///- overflow_size: overflow size in bytes. The counter instance can be used
43 ///  to produce at most 2^(overflow_size*8) frames.
44 ///- crypter_counter: an alts_counter instance to be returned from the method.
45 ///- error_details: a buffer containing an error message if the method does not
46 ///  function correctly. It is legal to pass nullptr into error_details and
47 ///  otherwise, the parameter should be freed with gpr_free.
48 ///
49 /// On success, the method returns GRPC_STATUS_OK. Otherwise,
50 /// it returns an error status code along with its details specified in
51 /// error_details (if error_details is not nullptr).
52 ///
53 grpc_status_code alts_counter_create(bool is_client, size_t counter_size,
54                                      size_t overflow_size,
55                                      alts_counter** crypter_counter,
56                                      char** error_details);
57 
58 ///
59 /// This method increments the internal counter.
60 ///
61 ///- crypter_counter: an alts_counter instance.
62 ///- is_overflow: after incrementing the internal counter, if an overflow
63 ///  occurs, is_overflow is set to true, and no further calls to
64 ///  alts_counter_increment() should be made. Otherwise, is_overflow is set to
65 ///  false.
66 ///- error_details: a buffer containing an error message if the method does not
67 ///  function correctly. It is legal to pass nullptr into error_details and
68 ///  otherwise, the parameter should be freed with gpr_free.
69 ///
70 /// On success, the method returns GRPC_STATUS_OK. Otherwise,
71 /// it returns an error status code along with its details specified in
72 /// error_details (if error_details is not nullptr).
73 ///
74 grpc_status_code alts_counter_increment(alts_counter* crypter_counter,
75                                         bool* is_overflow,
76                                         char** error_details);
77 
78 ///
79 /// This method returns the size of counter buffer.
80 ///
81 ///- crypter_counter: an alts_counter instance.
82 ///
83 size_t alts_counter_get_size(alts_counter* crypter_counter);
84 
85 ///
86 /// This method returns the counter buffer.
87 ///
88 ///- crypter_counter: an alts_counter instance.
89 ///
90 unsigned char* alts_counter_get_counter(alts_counter* crypter_counter);
91 
92 ///
93 /// This method de-allocates all memory allocated to an alts_coutner instance.
94 ///- crypter_counter: an alts_counter instance.
95 ///
96 void alts_counter_destroy(alts_counter* crypter_counter);
97 
98 #endif  // GRPC_SRC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H
99