blob: d705638fa8c3e5272cf9f32b63397eb24fed185d [file] [log] [blame]
/*
*
* 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 <grpc/support/port_platform.h>
#include <stdbool.h>
#include <stdlib.h>
#include <grpc/grpc.h>
/* 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 */