/* * * Copyright 2018 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef GRPC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H #define GRPC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H #include #include #include #include /* Main struct for a crypter counter managed within seal/unseal operations. */ typedef struct alts_counter { size_t size; size_t overflow_size; unsigned char* counter; } alts_counter; /** * This method creates and initializes an alts_counter instance. * * - is_client: a flag indicating if the alts_counter instance will be used * at client (is_client = true) or server (is_client = false) side. * - counter_size: size of buffer holding the counter value. * - overflow_size: overflow size in bytes. The counter instance can be used * to produce at most 2^(overflow_size*8) frames. * - crypter_counter: an alts_counter instance to be returned from the method. * - error_details: a buffer containing an error message if the method does not * function correctly. It is legal to pass nullptr into error_details and * otherwise, the parameter should be freed with gpr_free. * * On success, the method returns GRPC_STATUS_OK. Otherwise, * it returns an error status code along with its details specified in * error_details (if error_details is not nullptr). */ grpc_status_code alts_counter_create(bool is_client, size_t counter_size, size_t overflow_size, alts_counter** crypter_counter, char** error_details); /** * This method increments the internal counter. * * - crypter_counter: an alts_counter instance. * - is_overflow: after incrementing the internal counter, if an overflow * occurs, is_overflow is set to true, and no further calls to * alts_counter_increment() should be made. Otherwise, is_overflow is set to * false. * - error_details: a buffer containing an error message if the method does not * function correctly. It is legal to pass nullptr into error_details and * otherwise, the parameter should be freed with gpr_free. * * On success, the method returns GRPC_STATUS_OK. Otherwise, * it returns an error status code along with its details specified in * error_details (if error_details is not nullptr). */ grpc_status_code alts_counter_increment(alts_counter* crypter_counter, bool* is_overflow, char** error_details); /** * This method returns the size of counter buffer. * * - crypter_counter: an alts_counter instance. */ size_t alts_counter_get_size(alts_counter* crypter_counter); /** * This method returns the counter buffer. * * - crypter_counter: an alts_counter instance. */ unsigned char* alts_counter_get_counter(alts_counter* crypter_counter); /** * This method de-allocates all memory allocated to an alts_coutner instance. * - crypter_counter: an alts_counter instance. */ void alts_counter_destroy(alts_counter* crypter_counter); #endif /* GRPC_CORE_TSI_ALTS_FRAME_PROTECTOR_ALTS_COUNTER_H */