public function build_signature($request, $consumer, $token)
{
$base_string = $request->get_signature_base_string();
$base_string = preg_replace_callback("/(%[A-Za-z0-9]{2})/", array($this, "replace_callback"), $base_string);
//convert base string to lowercase
$request->base_string = $base_string;
$key_parts = array($consumer->secret, $token ? $token->secret : "");
$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
$key = implode('&', $key_parts);
$key = preg_replace_callback("/(%[A-Za-z0-9]{2})/", array($this, "replace_callback"), $key);
//convert to lowercase
return base64_encode(hash_hmac('sha1', $base_string, $key, true));
}