DiffieHellmanKeyPair.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2007 by Anton E. Lebedevich                             *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00017     final class DiffieHellmanKeyPair implements KeyPair
00018     {
00019         private $private    = null;
00020         private $public     = null;
00021         private $parameters = null;
00022         
00023         public function __construct(DiffieHellmanParameters $parameters)
00024         {
00025             $this->parameters = $parameters;
00026         }
00027         
00031         public static function create(DiffieHellmanParameters $parameters)
00032         {
00033             return new self($parameters);
00034         }
00035         
00039         public static function generate(
00040             DiffieHellmanParameters $parameters,
00041             RandomSource $randomSource
00042         )
00043         {
00044             $result = new self($parameters);
00045             
00046             $factory = $parameters->getModulus()->getFactory();
00047             
00048             $result->private = $factory->makeRandom(
00049                 $parameters->getModulus(),
00050                 $randomSource
00051             );
00052             
00053             $result->public = $parameters->getGen()->modPow(
00054                 $result->private,
00055                 $parameters->getModulus()
00056             );
00057             
00058             return $result;
00059         }
00060         
00064         public function setPrivate(BigInteger $private)
00065         {
00066             $this->private = $private;
00067             return $this;
00068         }
00069         
00073         public function getPrivate()
00074         {
00075             return $this->private;
00076         }
00077         
00081         public function setPublic(BigInteger $public)
00082         {
00083             $this->public = $public;
00084             return $this;
00085         }
00086         
00090         public function getPublic()
00091         {
00092             return $this->public;
00093         }
00094         
00098         public function makeSharedKey(BigInteger $otherSitePublic)
00099         {
00100             Assert::brothers($this->private, $otherSitePublic);
00101             
00102             return $otherSitePublic->modPow(
00103                 $this->private,
00104                 $this->parameters->getModulus()
00105             );
00106         }
00107     }
00108 ?>