You are here

abstract class OAuthSignatureMethod_RSA_SHA1 in OAuth 1.0 6.3

Same name and namespace in other branches
  1. 6 OAuth.php \OAuthSignatureMethod_RSA_SHA1
  2. 7.3 lib/OAuth.php \OAuthSignatureMethod_RSA_SHA1

The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a verified way to the Service Provider, in a manner which is beyond the scope of this specification.

  • Chapter 9.3 ("RSA-SHA1")

Hierarchy

Expanded class hierarchy of OAuthSignatureMethod_RSA_SHA1

File

lib/OAuth.php, line 188
OAuth 1.0 server and client library.

View source
abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
  public function get_name() {
    return "RSA-SHA1";
  }

  // Up to the SP to implement this lookup of keys. Possible ideas are:
  // (1) do a lookup in a table of trusted certs keyed off of consumer
  // (2) fetch via http using a url provided by the requester
  // (3) some sort of specific discovery code based on request
  //
  // Either way should return a string representation of the certificate
  protected abstract function fetch_public_cert(&$request);

  // Up to the SP to implement this lookup of keys. Possible ideas are:
  // (1) do a lookup in a table of trusted certs keyed off of consumer
  //
  // Either way should return a string representation of the certificate
  protected abstract function fetch_private_cert(&$request);
  public function build_signature($request, $consumer, $token) {
    $base_string = $request
      ->get_signature_base_string();
    $request->base_string = $base_string;

    // Fetch the private key cert based on the request
    $cert = $this
      ->fetch_private_cert($request);

    // Pull the private key ID from the certificate
    $privatekeyid = openssl_get_privatekey($cert);

    // Sign using the key
    $ok = openssl_sign($base_string, $signature, $privatekeyid);

    // Release the key resource
    openssl_free_key($privatekeyid);
    return base64_encode($signature);
  }
  public function check_signature($request, $consumer, $token, $signature) {
    $decoded_sig = base64_decode($signature);
    $base_string = $request
      ->get_signature_base_string();

    // Fetch the public key cert based on the request
    $cert = $this
      ->fetch_public_cert($request);

    // Pull the public key ID from the certificate
    $publickeyid = openssl_get_publickey($cert);

    // Check the computed signature against the one passed in the query
    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);

    // Release the key resource
    openssl_free_key($publickeyid);
    return $ok == 1;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
OAuthSignatureMethod_RSA_SHA1::build_signature public function Build up the signature NOTE: The output of this function MUST NOT be urlencoded. the encoding is handled in OAuthRequest when the final request is serialized Overrides OAuthSignatureMethod::build_signature
OAuthSignatureMethod_RSA_SHA1::check_signature public function Verifies that a given signature is correct Overrides OAuthSignatureMethod::check_signature
OAuthSignatureMethod_RSA_SHA1::fetch_private_cert abstract protected function
OAuthSignatureMethod_RSA_SHA1::fetch_public_cert abstract protected function
OAuthSignatureMethod_RSA_SHA1::get_name public function Needs to return the name of the Signature Method (ie HMAC-SHA1) Overrides OAuthSignatureMethod::get_name