Mercurial > nebulaweb3
view default/assets/vendors/theme-widgets/vendor/abraham/twitteroauth/src/SignatureMethod.php @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
line wrap: on
line source
<?php /** * The MIT License * Copyright (c) 2007 Andy Smith */ namespace Abraham\TwitterOAuth; /** * A class for implementing a Signature Method * See section 9 ("Signing Requests") in the spec */ abstract class SignatureMethod { /** * Needs to return the name of the Signature Method (ie HMAC-SHA1) * * @return string */ abstract public function getName(); /** * 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 * * @param Request $request * @param Consumer $consumer * @param Token $token * * @return string */ abstract public function buildSignature(Request $request, Consumer $consumer, Token $token = null); /** * Verifies that a given signature is correct * * @param Request $request * @param Consumer $consumer * @param Token $token * @param string $signature * * @return bool */ public function checkSignature(Request $request, Consumer $consumer, Token $token, $signature) { $built = $this->buildSignature($request, $consumer, $token); // Check for zero length, although unlikely here if (strlen($built) == 0 || strlen($signature) == 0) { return false; } if (strlen($built) != strlen($signature)) { return false; } // Avoid a timing leak with a (hopefully) time insensitive compare $result = 0; for ($i = 0; $i < strlen($signature); $i++) { $result |= ord($built{$i}) ^ ord($signature{$i}); } return $result == 0; } }