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