/**
@mainpage Overview
@anchor sigv4
@brief AWS SigV4 Library

The AWS SigV4 Library is a standalone library for generating signatures
and authorization headers according to the specifications of the AWS Signature
Version 4 signing process. This library aids applications in sending direct
HTTP requests to AWS services requiring SigV4 authentication. The library is
written in C and designed to be compliant with ISO C90 and MISRA C and has no
dependencies on any additional libraries other than the standard C library.

@section sigv4_memory_requirements Memory Requirements
@brief Memory requirements of the SigV4 Library.

@include{doc} size_table.md

@section sigv4_design Design
@brief SigV4 Library Design

<h3>Memory Usage</h3>
<p>
All functions in the SigV4 library operate only on the buffers provided and use only
local variables on the stack.
</p>

<h3>Compliance & Coverage</h3>

<p>
The SIGV4 library is designed to be compliant with ISO C90 and MISRA C:2012.
All functions are written to have low complexity scores. Unit tests and CBMC
proofs are written to cover every path of execution and achieve 100% branch
coverage.
</p>

The diagram below demonstrates the happy path an application can take to use
the SigV4 library to interact with AWS Services that support SigV4 authentication via HTTP requests.

@image html sigv4_design.png "SigV4 Library Usage diagram" width=90%

*/

/**
@page sigv4_config Configurations
@brief Configurations of the AWS SigV4 Library.
<!-- @par configpagestyle allows the @section titles to be styled according to
     style.css -->
@par configpagestyle

Configuration settings are C pre-processor constants. They can be set with a
`\#define` in the config file (`sigv4_config.h`) or by using a
compiler option such as -D in gcc.

@section SIGV4_DO_NOT_USE_CUSTOM_CONFIG
@copydoc SIGV4_DO_NOT_USE_CUSTOM_CONFIG

@section sigv4_logerror LogError
@copydoc LogError

@section sigv4_logwarn LogWarn
@copydoc LogWarn

@section sigv4_loginfo LogInfo
@copydoc LogInfo

@section sigv4_logdebug LogDebug
@copydoc LogDebug
*/

/**
@page sigv4_functions Functions
@brief Primary functions of the AWS SigV4 library:<br><br>
@subpage sigV4_generateHTTPAuthorization_function <br>
@subpage sigV4_awsIotDateToIso8601_function <br>
@subpage sigV4_encodeURI_function <br>

@page sigV4_generateHTTPAuthorization_function SigV4_GenerateHTTPAuthorization
@snippet sigv4.h declare_sigV4_generateHTTPAuthorization_function
@copydoc SigV4_GenerateHTTPAuthorization

@page sigV4_awsIotDateToIso8601_function SigV4_AwsIotDateToIso8601
@snippet sigv4.h declare_sigV4_awsIotDateToIso8601_function
@copydoc SigV4_AwsIotDateToIso8601

@page sigV4_encodeURI_function SigV4_EncodeURI
@snippet sigv4.h declare_sigV4_encodeURI_function
@copydoc SigV4_EncodeURI
*/

<!-- We do not use doxygen ALIASes here because there have been issues in the past versions with "^^" newlines within the alias definition. -->
/**
@defgroup sigv4_enum_types Enumerated Types
@brief Enumerated types of the SigV4 library

@defgroup sigv4_struct_types Struct Types
@brief Struct types of the SigV4 library
*/
