def METHOD_NAME(method, canonical_uri, body, epoch_t, host, signed_headers, request_params):
    canonical_query_string = "";
    canonical_headers="";
    for header in signed_headers.split(';'):
        value=""
        # Use current datetime for signature calculation
        if header == "x-amz-date":
           canonical_headers = canonical_headers + header.lower()+':'+get_timestamp(epoch_t)+'\n'
           continue;
        # Fetch Content-MD5 value from request parameters
        if header == "content-md5":
           canonical_headers = canonical_headers + header.lower()+':'+request_params['Content-MD5']+'\n'
           continue;
        # Fetch header value
        if header in request_params:
           value = request_params[header]
        elif header.title() in request_params:
           value = request_params[header.title()]
        # Handle parsing integer value for 'Content-Length'
        if isinstance(value, int):
           canonical_headers = canonical_headers + header.lower()+':'+str(value)+'\n'
        else:
           canonical_headers = canonical_headers + header.lower()+':'+value+'\n'
    if "x-amz-content-sha256" in request_params:
       payload_hash = request_params['x-amz-content-sha256']
    else :
       payload_hash = hashlib.sha256(body.encode('utf-8')).hexdigest()
    canonical_request = method + '\n' + canonical_uri + '\n' + canonical_query_string + '\n' + \
        canonical_headers + '\n' + signed_headers + '\n' + payload_hash
    return canonical_request