/var/www/hkosl.com/littleark/webadmin/libraies/twilio/sdk/Services/Twilio/RequestValidator.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php

class Services_Twilio_RequestValidator
{

    protected 
$AuthToken;

    function 
__construct($token)
    {
        
$this->AuthToken $token;
    }
    
    public function 
computeSignature($url$data = array())
    {
        
// sort the array by keys
        
ksort($data);

        
// append them to the data string in order
        // with no delimiters
        
foreach($data as $key => $value)
            
$url .= "$key$value";
            
        
// This function calculates the HMAC hash of the data with the key
        // passed in
        // Note: hash_hmac requires PHP 5 >= 5.1.2 or PECL hash:1.1-1.5
        // Or http://pear.php.net/package/Crypt_HMAC/
        
return base64_encode(hash_hmac("sha1"$url$this->AuthTokentrue));
    }

    public function 
validate($expectedSignature$url$data = array())
    {
        return 
self::compare(
            
$this->computeSignature($url$data),
            
$expectedSignature
        
);
    }

    
/**
     * Time insensitive compare, function's runtime is governed by the length
     * of the first argument, not the difference between the arguments.
     * @param $a string First part of the comparison pair
     * @param $b string Second part of the comparison pair
     * @return bool True if $a == $b, false otherwise.
     */
    
public static function compare($a$b) {
        
$result true;

        if (
strlen($a) != strlen($b)) {
            return 
false;
        }

        if (!
$a && !$b) {
            return 
true;
        }

        
$limit strlen($a);

        for (
$i 0$i $limit; ++$i) {
            if (
$a[$i] != $b[$i]) {
                
$result false;
            }
        }

        return 
$result;
    }

}