in source/sigv4.c [1505:1550]
static SigV4Status_t appendSignedHeaders( size_t headerCount,
uint32_t flags,
CanonicalContext_t * pCanonicalRequest,
char ** pSignedHeaders,
size_t * pSignedHeadersLen )
{
size_t headerIndex = 0, keyLen = 0;
SigV4Status_t sigV4Status = SigV4Success;
const char * headerKey;
size_t uxSignedHeaderIndex;
assert( pCanonicalRequest != NULL );
assert( headerCount > 0 );
/* Store the starting location of the Signed Headers in the Canonical Request buffer. */
*pSignedHeaders = ( char * ) &( pCanonicalRequest->pBufProcessing[ pCanonicalRequest->uxCursorIndex ] );
uxSignedHeaderIndex = pCanonicalRequest->uxCursorIndex;
for( headerIndex = 0; headerIndex < headerCount; headerIndex++ )
{
assert( ( pCanonicalRequest->pHeadersLoc[ headerIndex ].key.pData ) != NULL );
keyLen = pCanonicalRequest->pHeadersLoc[ headerIndex ].key.dataLen;
headerKey = pCanonicalRequest->pHeadersLoc[ headerIndex ].key.pData;
/* ';' is used to separate signed multiple headers in the canonical request. */
sigV4Status = copyHeaderStringToCanonicalBuffer( headerKey, keyLen, flags, ';', pCanonicalRequest );
if( sigV4Status != SigV4Success )
{
LogError( ( "Unable to write Signed Headers for Canonical Request: Insufficient memory configured in \"SIGV4_PROCESSING_BUFFER_LENGTH\"" ) );
break;
}
}
/* Store the length of the "Signed Headers" data appended to the Canonical Request. */
*pSignedHeadersLen = pCanonicalRequest->uxCursorIndex - uxSignedHeaderIndex - 1U;
if( sigV4Status == SigV4Success )
{
/* Replacing the last ';' with '\n' as last header should not have ';'. */
( ( char * ) ( pCanonicalRequest->pBufProcessing ) )[ pCanonicalRequest->uxCursorIndex - 1U ] = '\n';
}
return sigV4Status;
}