mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-27 19:54:57 +00:00
RSA: make RSA objects clonable
This commit is contained in:
parent
22502c24cd
commit
1e3ff81e7d
@ -82,6 +82,15 @@ define('CRYPT_HASH_MODE_HASH', 3);
|
||||
* @package Crypt_Hash
|
||||
*/
|
||||
class Crypt_Hash {
|
||||
/**
|
||||
* Hash Parameter
|
||||
*
|
||||
* @see Crypt_Hash::setHash()
|
||||
* @var Integer
|
||||
* @access private
|
||||
*/
|
||||
var $hashParam;
|
||||
|
||||
/**
|
||||
* Byte-length of compression blocks / key (Internal HMAC)
|
||||
*
|
||||
@ -174,6 +183,19 @@ class Crypt_Hash {
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the hash function.
|
||||
*
|
||||
* As set by the constructor or by the setHash() method.
|
||||
*
|
||||
* @access public
|
||||
* @return String
|
||||
*/
|
||||
function getHash()
|
||||
{
|
||||
return $this->hashParam;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the hash function.
|
||||
*
|
||||
@ -182,7 +204,7 @@ class Crypt_Hash {
|
||||
*/
|
||||
function setHash($hash)
|
||||
{
|
||||
$hash = strtolower($hash);
|
||||
$this->hashParam = $hash = strtolower($hash);
|
||||
switch ($hash) {
|
||||
case 'md5-96':
|
||||
case 'sha1-96':
|
||||
|
@ -1393,6 +1393,53 @@ class Crypt_RSA {
|
||||
*/
|
||||
function loadKey($key, $type = false)
|
||||
{
|
||||
if (is_object($key) && strtolower(get_class($key)) == 'crypt_rsa') {
|
||||
$this->privateKeyFormat = $key->privateKeyFormat;
|
||||
$this->publicKeyFormat = $key->publicKeyFormat;
|
||||
$this->k = $key->k;
|
||||
$this->hLen = $key->hLen;
|
||||
$this->sLen = $key->sLen;
|
||||
$this->mgfHLen = $key->mgfHLen;
|
||||
$this->encryptionMode = $key->encryptionMode;
|
||||
$this->signatureMode = $key->signatureMode;
|
||||
$this->password = $key->password;
|
||||
$this->configFile = $key->configFile;
|
||||
$this->comment = $key->comment;
|
||||
|
||||
if (is_object($key->hash)) {
|
||||
$this->hash = new Crypt_Hash($key->hash->getHash());
|
||||
}
|
||||
if (is_object($key->mgfHash)) {
|
||||
$this->mgfHash = new Crypt_Hash($key->mgfHash->getHash());
|
||||
}
|
||||
|
||||
if (is_object($key->modulus)) {
|
||||
$this->modulus = $key->modulus->copy();
|
||||
}
|
||||
if (is_object($key->exponent)) {
|
||||
$this->exponent = $key->exponent->copy();
|
||||
}
|
||||
if (is_object($key->publicExponent)) {
|
||||
$this->publicExponent = $key->publicExponent->copy();
|
||||
}
|
||||
|
||||
$this->primes = array();
|
||||
$this->exponents = array();
|
||||
$this->coefficients = array();
|
||||
|
||||
foreach ($this->primes as $prime) {
|
||||
$this->primes[] = $prime->copy();
|
||||
}
|
||||
foreach ($this->exponents as $exponent) {
|
||||
$this->exponents[] = $exponent->copy();
|
||||
}
|
||||
foreach ($this->coefficients as $coefficient) {
|
||||
$this->coefficients[] = $coefficient->copy();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($type === false) {
|
||||
$types = array(
|
||||
CRYPT_RSA_PUBLIC_FORMAT_RAW,
|
||||
@ -1603,6 +1650,18 @@ class Crypt_RSA {
|
||||
return $key !== false ? $key : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* __clone() magic method
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function __clone()
|
||||
{
|
||||
$key = new Crypt_RSA();
|
||||
$key->loadKey($this);
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the smallest and largest numbers requiring $bits bits
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user