DiffieHellman.php

Go to the documentation of this file.
00001 <?php
00002 
00017 require_once 'Auth/OpenID.php';
00018 require_once 'Auth/OpenID/BigMath.php';
00019 
00020 function Auth_OpenID_getDefaultMod()
00021 {
00022     return '155172898181473697471232257763715539915724801'.
00023         '966915404479707795314057629378541917580651227423'.
00024         '698188993727816152646631438561595825688188889951'.
00025         '272158842675419950341258706556549803580104870537'.
00026         '681476726513255747040765857479291291572334510643'.
00027         '245094715007229621094194349783925984760375594985'.
00028         '848253359305585439638443';
00029 }
00030 
00031 function Auth_OpenID_getDefaultGen()
00032 {
00033     return '2';
00034 }
00035 
00043 class Auth_OpenID_DiffieHellman {
00044 
00045     var $mod;
00046     var $gen;
00047     var $private;
00048     var $lib = null;
00049 
00050     function Auth_OpenID_DiffieHellman($mod = null, $gen = null,
00051                                        $private = null, $lib = null)
00052     {
00053         if ($lib === null) {
00054             $this->lib =& Auth_OpenID_getMathLib();
00055         } else {
00056             $this->lib =& $lib;
00057         }
00058 
00059         if ($mod === null) {
00060             $this->mod = $this->lib->init(Auth_OpenID_getDefaultMod());
00061         } else {
00062             $this->mod = $mod;
00063         }
00064 
00065         if ($gen === null) {
00066             $this->gen = $this->lib->init(Auth_OpenID_getDefaultGen());
00067         } else {
00068             $this->gen = $gen;
00069         }
00070 
00071         if ($private === null) {
00072             $r = $this->lib->rand($this->mod);
00073             $this->private = $this->lib->add($r, 1);
00074         } else {
00075             $this->private = $private;
00076         }
00077 
00078         $this->public = $this->lib->powmod($this->gen, $this->private,
00079                                            $this->mod);
00080     }
00081 
00082     function getSharedSecret($composite)
00083     {
00084         return $this->lib->powmod($composite, $this->private, $this->mod);
00085     }
00086 
00087     function getPublicKey()
00088     {
00089         return $this->public;
00090     }
00091 
00092     function usingDefaultValues()
00093     {
00094         return ($this->mod == Auth_OpenID_getDefaultMod() &&
00095                 $this->gen == Auth_OpenID_getDefaultGen());
00096     }
00097 
00098     function xorSecret($composite, $secret, $hash_func)
00099     {
00100         $dh_shared = $this->getSharedSecret($composite);
00101         $dh_shared_str = $this->lib->longToBinary($dh_shared);
00102         $hash_dh_shared = $hash_func($dh_shared_str);
00103 
00104         $xsecret = "";
00105         for ($i = 0; $i < Auth_OpenID::bytes($secret); $i++) {
00106             $xsecret .= chr(ord($secret[$i]) ^ ord($hash_dh_shared[$i]));
00107         }
00108 
00109         return $xsecret;
00110     }
00111 }
00112 
00113 ?>

Generated on Thu Feb 19 15:02:21 2009 for OXID eShop CE by  doxygen 1.5.5