| 1 | 
           efrain | 
           1 | 
           <?php
  | 
        
        
            | 
            | 
           2 | 
              | 
        
        
            | 
            | 
           3 | 
           namespace IMSGlobal\LTI\OAuth;
  | 
        
        
            | 
            | 
           4 | 
              | 
        
        
            | 
            | 
           5 | 
           /**
  | 
        
        
            | 
            | 
           6 | 
            * Class to represent an %OAuth HMAC_SHA256 signature method
  | 
        
        
            | 
            | 
           7 | 
            *
  | 
        
        
            | 
            | 
           8 | 
            * @author  Stephen P Vickers <svickers@imsglobal.org>
  | 
        
        
            | 
            | 
           9 | 
            * @copyright  IMS Global Learning Consortium Inc
  | 
        
        
            | 
            | 
           10 | 
            * @date  2016
  | 
        
        
            | 
            | 
           11 | 
            * @version 2015-11-30
  | 
        
        
            | 
            | 
           12 | 
            * @license https://opensource.org/licenses/MIT The MIT License
  | 
        
        
            | 
            | 
           13 | 
            */
  | 
        
        
            | 
            | 
           14 | 
           /**
  | 
        
        
            | 
            | 
           15 | 
            * The HMAC-SHA256 signature method uses the HMAC-SHA256 signature algorithm as defined in [RFC6234]
  | 
        
        
            | 
            | 
           16 | 
            * where the Signature Base String is the text and the key is the concatenated values (each first
  | 
        
        
            | 
            | 
           17 | 
            * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
  | 
        
        
            | 
            | 
           18 | 
            * character (ASCII code 38) even if empty.
  | 
        
        
            | 
            | 
           19 | 
            */
  | 
        
        
            | 
            | 
           20 | 
           #[\AllowDynamicProperties]
  | 
        
        
            | 
            | 
           21 | 
           class OAuthSignatureMethod_HMAC_SHA256 extends OAuthSignatureMethod {
  | 
        
        
            | 
            | 
           22 | 
              | 
        
        
            | 
            | 
           23 | 
               function get_name() {
  | 
        
        
            | 
            | 
           24 | 
                   return "HMAC-SHA256";
  | 
        
        
            | 
            | 
           25 | 
               }
  | 
        
        
            | 
            | 
           26 | 
              | 
        
        
            | 
            | 
           27 | 
               public function build_signature($request, $consumer, $token) {
  | 
        
        
            | 
            | 
           28 | 
              | 
        
        
            | 
            | 
           29 | 
                   $base_string = $request->get_signature_base_string();
  | 
        
        
            | 
            | 
           30 | 
                   $request->base_string = $base_string;
  | 
        
        
            | 
            | 
           31 | 
              | 
        
        
            | 
            | 
           32 | 
                   $key_parts = array(
  | 
        
        
            | 
            | 
           33 | 
                     $consumer->secret,
  | 
        
        
            | 
            | 
           34 | 
                     ($token) ? $token->secret : ""
  | 
        
        
            | 
            | 
           35 | 
                   );
  | 
        
        
            | 
            | 
           36 | 
              | 
        
        
            | 
            | 
           37 | 
                   $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
  | 
        
        
            | 
            | 
           38 | 
                   $key = implode('&', $key_parts);
  | 
        
        
            | 
            | 
           39 | 
              | 
        
        
            | 
            | 
           40 | 
                   return base64_encode(hash_hmac('sha256', $base_string, $key, true));
  | 
        
        
            | 
            | 
           41 | 
              | 
        
        
            | 
            | 
           42 | 
               }
  | 
        
        
            | 
            | 
           43 | 
              | 
        
        
            | 
            | 
           44 | 
           }
  |