/**
  * Build signature
  *
  * @param String $baseString - base string
  * @param OAuthConsumer $consumer - consumer
  * @param OAuthToken $token - token
  * @return String
  */
 public function build($baseString, $consumer, $token)
 {
     $keyParts = array($consumer->getSecret(), $token ? $token->getSecret() : '');
     $keyParts = OAuthUtils::urlEncodeRfc3986($keyParts);
     $key = implode('&', $keyParts);
     return base64_encode(hash_hmac('sha1', $baseString, $key, true));
 }
 /**
  * Build normalized HTTP query
  *
  * @param array $input - HTTP query parameters
  * @return String - normalized query string
  */
 public static function buildHTTPQuery($input)
 {
     if (!$input) {
         return '';
     }
     $keys = OAuthUtils::urlEncodeRfc3986(array_keys($input));
     $values = OAuthUtils::urlEncodeRfc3986(array_values($input));
     $params = array_combine($keys, $values);
     // Parameters are sorted by name, using lexicographical byte value ordering.
     // Ref: Spec: 9.1.1 (1)
     uksort($params, 'strcmp');
     $pairs = array();
     foreach ($params as $parameter => $value) {
         if (is_array($value)) {
             // If two or more parameters share the same name, they are sorted by their value
             // Ref: Spec: 9.1.1 (1)
             natsort($value);
             foreach ($value as $duplicateValue) {
                 $pairs[] = $parameter . '=' . $duplicateValue;
             }
         } else {
             $pairs[] = $parameter . '=' . $value;
         }
     }
     return implode('&', $pairs);
 }
 /**
  * Convert token to string
  *
  * @return string - string equivalent of OAuthToken
  */
 public function toString()
 {
     return 'oauth_token=' . OAuthUtils::urlEncodeRfc3986($this->key) . '&oauth_token_secret=' . OAuthUtils::urlEncodeRfc3986($this->secret);
 }
 /**
  * Return signature base string
  *
  * @return String - signature base string
  */
 public function getSignatureBaseString()
 {
     $parts = array($this->getNormalizedHTTPMethod(), $this->getNormalizedURL(), $this->getNormalizedParameters());
     $parts = OAuthUtils::urlEncodeRfc3986($parts);
     return implode('&', $parts);
 }