20 require_once 
'Auth/OpenID/CryptUtil.php';
 
   25 require_once 
'Auth/OpenID/KVForm.php';
 
   30 require_once 
'Auth/OpenID/HMAC.php';
 
   68                        'HMAC-SHA1' => 
'Auth_OpenID_HMACSHA1',
 
   69                        'HMAC-SHA256' => 
'Auth_OpenID_HMACSHA256' 
   97     static function fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
 
  100         $lifetime = $expires_in;
 
  102                                            $issued, $lifetime, $assoc_type);
 
  132         $handle, $secret, $issued, $lifetime, $assoc_type)
 
  134         if (!in_array($assoc_type,
 
  136             $fmt = 
'Unsupported association type (%s)';
 
  137             trigger_error(sprintf($fmt, $assoc_type), E_USER_ERROR);
 
  140         $this->handle = $handle;
 
  141         $this->secret = $secret;
 
  142         $this->issued = $issued;
 
  143         $this->lifetime = $lifetime;
 
  144         $this->assoc_type = $assoc_type;
 
  160         return max(0, $this->issued + $this->lifetime - $now);
 
  172         return ((gettype($this) == gettype($other))
 
  173                 && ($this->handle == $other->handle)
 
  174                 && ($this->secret == $other->secret)
 
  175                 && ($this->issued == $other->issued)
 
  176                 && ($this->lifetime == $other->lifetime)
 
  177                 && ($this->assoc_type == $other->assoc_type));
 
  190                      'handle' => $this->handle,
 
  191                      'secret' => base64_encode($this->secret),
 
  192                      'issued' => strval(intval($this->issued)),
 
  193                      'lifetime' => strval(intval($this->lifetime)),
 
  194                      'assoc_type' => $this->assoc_type
 
  197         assert(array_keys(
$data) == $this->assoc_keys);
 
  214         foreach ($pairs as $key => $value) {
 
  215             if (is_array($value)) {
 
  216                 list($key, $value) = $value;
 
  222         $class_vars = get_class_vars($class_name);
 
  223         $class_assoc_keys = $class_vars[
'assoc_keys'];
 
  226         sort($class_assoc_keys);
 
  228         if ($keys != $class_assoc_keys) {
 
  229             trigger_error(
'Unexpected key values: ' . var_export($keys, 
true),
 
  234         $version = $pairs[
'version'];
 
  235         $handle = $pairs[
'handle'];
 
  236         $secret = $pairs[
'secret'];
 
  237         $issued = $pairs[
'issued'];
 
  238         $lifetime = $pairs[
'lifetime'];
 
  239         $assoc_type = $pairs[
'assoc_type'];
 
  241         if ($version != 
'2') {
 
  242             trigger_error(
'Unknown version: ' . $version, E_USER_WARNING);
 
  246         $issued = intval($issued);
 
  247         $lifetime = intval($lifetime);
 
  248         $secret = base64_decode($secret);
 
  250         return new $class_name(
 
  251             $handle, $secret, $issued, $lifetime, $assoc_type);
 
  268         $callback = $this->_macs[$this->assoc_type];
 
  270         return call_user_func_array($callback, array($this->secret, $kv));
 
  294         if ($extant_handle && ($extant_handle != $this->handle)) {
 
  299         $signed_message = $message;
 
  303         $message_keys = array_keys($signed_message->toPostArgs());
 
  304         $signed_list = array();
 
  305         $signed_prefix = 
'openid.';
 
  307         foreach ($message_keys as $k) {
 
  308             if (strpos($k, $signed_prefix) === 0) {
 
  309                 $signed_list[] = substr($k, strlen($signed_prefix));
 
  313         $signed_list[] = 
'signed';
 
  317                                 implode(
',', $signed_list));
 
  320         return $signed_message;
 
  338         $signed_list = explode(
',', $signed);
 
  340         $data = $message->toPostArgs();
 
  341         foreach ($signed_list as $field) {
 
  358         return base64_encode($this->
sign($pairs));
 
  377         return $calculated_sig == $sig;
 
  383     if ($assoc_type == 
'HMAC-SHA1') {
 
  385     } 
else if ($assoc_type == 
'HMAC-SHA256') {
 
  394     return array(
'HMAC-SHA1', 
'HMAC-SHA256');
 
  399     $a = array(
'HMAC-SHA1');
 
  401     if (Auth_OpenID_HMACSHA256_SUPPORTED) {
 
  402         $a[] = 
'HMAC-SHA256';
 
  410     $assoc_to_session = array(
 
  411        'HMAC-SHA1' => array(
'DH-SHA1', 
'no-encryption'));
 
  413     if (Auth_OpenID_HMACSHA256_SUPPORTED) {
 
  414         $assoc_to_session[
'HMAC-SHA256'] =
 
  415             array(
'DH-SHA256', 
'no-encryption');
 
  423     if (!in_array($session_type,
 
  436         $order[] = array(
'HMAC-SHA1', 
'DH-SHA1');
 
  438         if (Auth_OpenID_HMACSHA256_SUPPORTED) {
 
  439             $order[] = array(
'HMAC-SHA256', 
'DH-SHA256');
 
  443     $order[] = array(
'HMAC-SHA1', 
'no-encryption');
 
  445     if (Auth_OpenID_HMACSHA256_SUPPORTED) {
 
  446         $order[] = array(
'HMAC-SHA256', 
'no-encryption');
 
  457         list($assoc, $session) = $pair;
 
  459         if ($session != 
'no-encryption') {
 
  460             if (Auth_OpenID_HMACSHA256_SUPPORTED &&
 
  461                 ($assoc == 
'HMAC-SHA256')) {
 
  463             } 
else if ($assoc != 
'HMAC-SHA256') {
 
  528         $this->allowed_types = array();
 
  540         foreach ($allowed_types as $pair) {
 
  541             list($assoc_type, $session_type) = $pair;
 
  547         $this->allowed_types = $allowed_types;
 
  560         if ($this->allowed_types === null) {
 
  561             $this->allowed_types = array();
 
  564         if ($session_type === null) {
 
  571             foreach ($available as $session_type) {
 
  576                 $this->allowed_types[] = array($assoc_type, $session_type);
 
  588         $assoc_good = in_array(array($assoc_type, $session_type),
 
  589                                $this->allowed_types);
 
  591         $matches = in_array($session_type,
 
  594         return ($assoc_good && $matches);
 
  603         if (!$this->allowed_types) {
 
  604             return array(null, null);
 
  607         return $this->allowed_types[0];