static void generateCredentialScope()

in source/sigv4.c [1080:1128]


static void generateCredentialScope( const SigV4Parameters_t * pSigV4Params,
                                     SigV4String_t * pCredScope )
{
    char * pBufWrite = NULL;
    size_t credScopeLen = sizeNeededForCredentialScope( pSigV4Params );
    size_t copyStringResult;

    assert( pSigV4Params != NULL );
    assert( pSigV4Params->pCredentials != NULL );
    assert( pSigV4Params->pRegion != NULL );
    assert( pSigV4Params->pService != NULL );
    assert( pCredScope != NULL );
    assert( pCredScope->pData != NULL );
    assert( pCredScope->dataLen >= credScopeLen );

    pBufWrite = pCredScope->pData;

    /* Each concatenated component is separated by a '/' character. */
    /* Concatenate first 8 characters from the provided ISO 8601 string (YYYYMMDD). */
    ( void ) memcpy( pBufWrite, pSigV4Params->pDateIso8601, ISO_DATE_SCOPE_LEN );
    pBufWrite = &( pBufWrite[ ISO_DATE_SCOPE_LEN ] );

    *pBufWrite = CREDENTIAL_SCOPE_SEPARATOR;
    pBufWrite = &( pBufWrite[ CREDENTIAL_SCOPE_SEPARATOR_LEN ] );

    /* Concatenate AWS region. */
    ( void ) memcpy( pBufWrite, pSigV4Params->pRegion, pSigV4Params->regionLen );
    pBufWrite = &( pBufWrite[ pSigV4Params->regionLen ] );

    *pBufWrite = CREDENTIAL_SCOPE_SEPARATOR;
    pBufWrite = &( pBufWrite[ CREDENTIAL_SCOPE_SEPARATOR_LEN ] );

    /* Concatenate AWS service. */
    ( void ) memcpy( pBufWrite, pSigV4Params->pService, pSigV4Params->serviceLen );
    pBufWrite = &( pBufWrite[ pSigV4Params->serviceLen ] );

    *pBufWrite = CREDENTIAL_SCOPE_SEPARATOR;
    pBufWrite = &( pBufWrite[ CREDENTIAL_SCOPE_SEPARATOR_LEN ] );

    /* Concatenate terminator. */
    copyStringResult = copyString( pBufWrite, CREDENTIAL_SCOPE_TERMINATOR, CREDENTIAL_SCOPE_TERMINATOR_LEN );
    pBufWrite = &( pBufWrite[ copyStringResult ] );

    /* Verify that the number of bytes written match the sizeNeededForCredentialScope()
     * utility function for calculating size of credential scope. */
    assert( ( size_t ) ( pBufWrite - pCredScope->pData ) == credScopeLen );

    pCredScope->dataLen = credScopeLen;
}