mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-29 04:23:34 +00:00
RSA: use public / private / protected
This commit is contained in:
parent
813b85b5b2
commit
1dfd315725
@ -61,7 +61,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @return int
|
* @return int
|
||||||
* @throws \UnexpectedValueException if the block cipher mode is unsupported
|
* @throws \UnexpectedValueException if the block cipher mode is unsupported
|
||||||
*/
|
*/
|
||||||
public static function getEncryptionMode($mode)
|
private static function getEncryptionMode($mode)
|
||||||
{
|
{
|
||||||
switch ($mode) {
|
switch ($mode) {
|
||||||
case 'CBC':
|
case 'CBC':
|
||||||
@ -86,7 +86,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @return string
|
* @return string
|
||||||
* @throws \UnexpectedValueException if the encryption algorithm is unsupported
|
* @throws \UnexpectedValueException if the encryption algorithm is unsupported
|
||||||
*/
|
*/
|
||||||
public static function getEncryptionObject($algo)
|
private static function getEncryptionObject($algo)
|
||||||
{
|
{
|
||||||
$modes = '(CBC|ECB|CFB|OFB|CTR)';
|
$modes = '(CBC|ECB|CFB|OFB|CTR)';
|
||||||
switch (true) {
|
switch (true) {
|
||||||
@ -112,7 +112,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @param int $length
|
* @param int $length
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function generateSymmetricKey($password, $iv, $length)
|
private static function generateSymmetricKey($password, $iv, $length)
|
||||||
{
|
{
|
||||||
$symkey = '';
|
$symkey = '';
|
||||||
$iv = substr($iv, 0, 8);
|
$iv = substr($iv, 0, 8);
|
||||||
@ -130,7 +130,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function load($key, $password)
|
protected static function load($key, $password)
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -186,7 +186,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @param string $password
|
* @param string $password
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function wrapPrivateKey($key, $type, $password)
|
protected static function wrapPrivateKey($key, $type, $password)
|
||||||
{
|
{
|
||||||
if (empty($password) || !is_string($password)) {
|
if (empty($password) || !is_string($password)) {
|
||||||
return "-----BEGIN $type PRIVATE KEY-----\r\n" .
|
return "-----BEGIN $type PRIVATE KEY-----\r\n" .
|
||||||
@ -215,7 +215,7 @@ abstract class PKCS1 extends PKCS
|
|||||||
* @param string $type
|
* @param string $type
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function wrapPublicKey($key, $type)
|
protected static function wrapPublicKey($key, $type)
|
||||||
{
|
{
|
||||||
return "-----BEGIN $type PUBLIC KEY-----\r\n" .
|
return "-----BEGIN $type PUBLIC KEY-----\r\n" .
|
||||||
chunk_split(Base64::encode($key), 64) .
|
chunk_split(Base64::encode($key), 64) .
|
||||||
|
@ -47,7 +47,7 @@ use phpseclib\Exception\UnsupportedAlgorithmException;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class PKCS8 extends PKCS
|
abstract class PKCS8 extends PKCS
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Default encryption algorithm
|
* Default encryption algorithm
|
||||||
@ -143,7 +143,7 @@ class PKCS8 extends PKCS
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $algo
|
* @param string $algo
|
||||||
*/
|
*/
|
||||||
public static function getPBES1EncryptionObject($algo)
|
private static function getPBES1EncryptionObject($algo)
|
||||||
{
|
{
|
||||||
$algo = preg_match('#^pbeWith(?:MD2|MD5|SHA1|SHA)And(.*?)-CBC$#', $algo, $matches) ?
|
$algo = preg_match('#^pbeWith(?:MD2|MD5|SHA1|SHA)And(.*?)-CBC$#', $algo, $matches) ?
|
||||||
$matches[1] :
|
$matches[1] :
|
||||||
@ -192,7 +192,7 @@ class PKCS8 extends PKCS
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $algo
|
* @param string $algo
|
||||||
*/
|
*/
|
||||||
public static function getPBES1Hash($algo)
|
private static function getPBES1Hash($algo)
|
||||||
{
|
{
|
||||||
if (preg_match('#^pbeWith(MD2|MD5|SHA1|SHA)And.*?-CBC$#', $algo, $matches)) {
|
if (preg_match('#^pbeWith(MD2|MD5|SHA1|SHA)And.*?-CBC$#', $algo, $matches)) {
|
||||||
return $matches[1] == 'SHA' ? 'sha1' : $matches[1];
|
return $matches[1] == 'SHA' ? 'sha1' : $matches[1];
|
||||||
@ -207,7 +207,7 @@ class PKCS8 extends PKCS
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $algo
|
* @param string $algo
|
||||||
*/
|
*/
|
||||||
public static function getPBES1KDF($algo)
|
private static function getPBES1KDF($algo)
|
||||||
{
|
{
|
||||||
switch ($algo) {
|
switch ($algo) {
|
||||||
case 'pbeWithMD2AndDES-CBC':
|
case 'pbeWithMD2AndDES-CBC':
|
||||||
@ -228,7 +228,7 @@ class PKCS8 extends PKCS
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $algo
|
* @param string $algo
|
||||||
*/
|
*/
|
||||||
public static function getPBES2EncryptionObject($algo)
|
private static function getPBES2EncryptionObject($algo)
|
||||||
{
|
{
|
||||||
switch ($algo) {
|
switch ($algo) {
|
||||||
case 'desCBC':
|
case 'desCBC':
|
||||||
@ -262,7 +262,7 @@ class PKCS8 extends PKCS
|
|||||||
*
|
*
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
public static function _initialize_static_variables()
|
private static function initialize_static_variables()
|
||||||
{
|
{
|
||||||
if (!self::$oidsLoaded) {
|
if (!self::$oidsLoaded) {
|
||||||
// from https://tools.ietf.org/html/rfc2898
|
// from https://tools.ietf.org/html/rfc2898
|
||||||
@ -318,9 +318,9 @@ class PKCS8 extends PKCS
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function load($key, $password = '')
|
protected static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -482,9 +482,9 @@ class PKCS8 extends PKCS
|
|||||||
* @param string $password
|
* @param string $password
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function wrapPrivateKey($key, $algorithm, $attr, $password)
|
protected static function wrapPrivateKey($key, $algorithm, $attr, $password)
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
$key = [
|
$key = [
|
||||||
'version' => 'v1',
|
'version' => 'v1',
|
||||||
@ -577,9 +577,9 @@ class PKCS8 extends PKCS
|
|||||||
* @param string $key
|
* @param string $key
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function wrapPublicKey($key, $algorithm)
|
protected static function wrapPublicKey($key, $algorithm)
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
$key = [
|
$key = [
|
||||||
'publicKeyAlgorithm' => [
|
'publicKeyAlgorithm' => [
|
||||||
|
@ -141,7 +141,7 @@ class RSA
|
|||||||
* @var \phpseclib\Math\BigInteger
|
* @var \phpseclib\Math\BigInteger
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $zero;
|
private static $zero;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Precomputed One
|
* Precomputed One
|
||||||
@ -149,7 +149,7 @@ class RSA
|
|||||||
* @var \phpseclib\Math\BigInteger
|
* @var \phpseclib\Math\BigInteger
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $one;
|
private static $one;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private Key Format
|
* Private Key Format
|
||||||
@ -157,7 +157,7 @@ class RSA
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $privateKeyFormat = 'PKCS8';
|
private $privateKeyFormat = 'PKCS8';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public Key Format
|
* Public Key Format
|
||||||
@ -165,7 +165,7 @@ class RSA
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $publicKeyFormat = 'PKCS8';
|
private $publicKeyFormat = 'PKCS8';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modulus (ie. n)
|
* Modulus (ie. n)
|
||||||
@ -173,7 +173,7 @@ class RSA
|
|||||||
* @var \phpseclib\Math\BigInteger
|
* @var \phpseclib\Math\BigInteger
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $modulus;
|
private $modulus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modulus length
|
* Modulus length
|
||||||
@ -181,7 +181,7 @@ class RSA
|
|||||||
* @var \phpseclib\Math\BigInteger
|
* @var \phpseclib\Math\BigInteger
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $k;
|
private $k;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exponent (ie. e or d)
|
* Exponent (ie. e or d)
|
||||||
@ -189,7 +189,7 @@ class RSA
|
|||||||
* @var \phpseclib\Math\BigInteger
|
* @var \phpseclib\Math\BigInteger
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $exponent;
|
private $exponent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Primes for Chinese Remainder Theorem (ie. p and q)
|
* Primes for Chinese Remainder Theorem (ie. p and q)
|
||||||
@ -197,7 +197,7 @@ class RSA
|
|||||||
* @var array
|
* @var array
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $primes;
|
private $primes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exponents for Chinese Remainder Theorem (ie. dP and dQ)
|
* Exponents for Chinese Remainder Theorem (ie. dP and dQ)
|
||||||
@ -205,7 +205,7 @@ class RSA
|
|||||||
* @var array
|
* @var array
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $exponents;
|
private $exponents;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coefficients for Chinese Remainder Theorem (ie. qInv)
|
* Coefficients for Chinese Remainder Theorem (ie. qInv)
|
||||||
@ -213,7 +213,7 @@ class RSA
|
|||||||
* @var array
|
* @var array
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $coefficients;
|
private $coefficients;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hash name
|
* Hash name
|
||||||
@ -221,7 +221,7 @@ class RSA
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $hashName;
|
private $hashName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hash function
|
* Hash function
|
||||||
@ -229,7 +229,7 @@ class RSA
|
|||||||
* @var \phpseclib\Crypt\Hash
|
* @var \phpseclib\Crypt\Hash
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $hash;
|
private $hash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Length of hash function output
|
* Length of hash function output
|
||||||
@ -237,7 +237,7 @@ class RSA
|
|||||||
* @var int
|
* @var int
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $hLen;
|
private $hLen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Length of salt
|
* Length of salt
|
||||||
@ -245,7 +245,7 @@ class RSA
|
|||||||
* @var int
|
* @var int
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $sLen;
|
private $sLen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hash function for the Mask Generation Function
|
* Hash function for the Mask Generation Function
|
||||||
@ -253,7 +253,7 @@ class RSA
|
|||||||
* @var \phpseclib\Crypt\Hash
|
* @var \phpseclib\Crypt\Hash
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $mgfHash;
|
private $mgfHash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Length of MGF hash function output
|
* Length of MGF hash function output
|
||||||
@ -261,7 +261,7 @@ class RSA
|
|||||||
* @var int
|
* @var int
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $mgfHLen;
|
private $mgfHLen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public Exponent
|
* Public Exponent
|
||||||
@ -269,7 +269,7 @@ class RSA
|
|||||||
* @var mixed
|
* @var mixed
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $publicExponent = false;
|
private $publicExponent = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Password
|
* Password
|
||||||
@ -277,7 +277,7 @@ class RSA
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $password = false;
|
private $password = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loaded File Format
|
* Loaded File Format
|
||||||
@ -285,7 +285,7 @@ class RSA
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
var $format = false;
|
private $format = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OpenSSL configuration file name.
|
* OpenSSL configuration file name.
|
||||||
@ -296,25 +296,25 @@ class RSA
|
|||||||
* @var mixed
|
* @var mixed
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
static $configFile;
|
private static $configFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Supported file formats (lower case)
|
* Supported file formats (lower case)
|
||||||
*
|
*
|
||||||
* @see self::_initialize_static_variables()
|
* @see self::initialize_static_variables()
|
||||||
* @var array
|
* @var array
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $fileFormats = false;
|
private static $fileFormats = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Supported file formats (original case)
|
* Supported file formats (original case)
|
||||||
*
|
*
|
||||||
* @see self::_initialize_static_variables()
|
* @see self::initialize_static_variables()
|
||||||
* @var array
|
* @var array
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $origFileFormats = false;
|
private static $origFileFormats = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public exponent
|
* Public exponent
|
||||||
@ -323,7 +323,7 @@ class RSA
|
|||||||
* @link http://en.wikipedia.org/wiki/65537_%28number%29
|
* @link http://en.wikipedia.org/wiki/65537_%28number%29
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $defaultExponent = 65537;
|
private static $defaultExponent = 65537;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Smallest Prime
|
* Smallest Prime
|
||||||
@ -338,7 +338,7 @@ class RSA
|
|||||||
* @var int
|
* @var int
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $smallestPrime = 4096;
|
private static $smallestPrime = 4096;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Engine
|
* Engine
|
||||||
@ -348,14 +348,14 @@ class RSA
|
|||||||
* @var int
|
* @var int
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $engine = NULL;
|
private static $engine = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize static variables
|
* Initialize static variables
|
||||||
*
|
*
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static function _initialize_static_variables()
|
private static function initialize_static_variables()
|
||||||
{
|
{
|
||||||
if (!isset(self::$zero)) {
|
if (!isset(self::$zero)) {
|
||||||
self::$zero= new BigInteger(0);
|
self::$zero= new BigInteger(0);
|
||||||
@ -367,15 +367,12 @@ class RSA
|
|||||||
foreach (glob(__DIR__ . '/RSA/*.php') as $file) {
|
foreach (glob(__DIR__ . '/RSA/*.php') as $file) {
|
||||||
$name = pathinfo($file, PATHINFO_FILENAME);
|
$name = pathinfo($file, PATHINFO_FILENAME);
|
||||||
$type = 'phpseclib\Crypt\RSA\\' . $name;
|
$type = 'phpseclib\Crypt\RSA\\' . $name;
|
||||||
$meta = new \ReflectionClass($type);
|
|
||||||
if (!$meta->isAbstract()) {
|
|
||||||
self::$fileFormats[strtolower($name)] = $type;
|
self::$fileFormats[strtolower($name)] = $type;
|
||||||
self::$origFileFormats[] = $name;
|
self::$origFileFormats[] = $name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor
|
* The constructor
|
||||||
@ -387,9 +384,9 @@ class RSA
|
|||||||
* @return \phpseclib\Crypt\RSA
|
* @return \phpseclib\Crypt\RSA
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
$this->hash = new Hash('sha256');
|
$this->hash = new Hash('sha256');
|
||||||
$this->hLen = $this->hash->getLengthInBytes();
|
$this->hLen = $this->hash->getLengthInBytes();
|
||||||
@ -406,7 +403,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param int $val
|
* @param int $val
|
||||||
*/
|
*/
|
||||||
static function setExponent($val)
|
public static function setExponent($val)
|
||||||
{
|
{
|
||||||
self::$defaultExponent = $val;
|
self::$defaultExponent = $val;
|
||||||
}
|
}
|
||||||
@ -419,7 +416,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param int $val
|
* @param int $val
|
||||||
*/
|
*/
|
||||||
static function setSmallestPrime($val)
|
public static function setSmallestPrime($val)
|
||||||
{
|
{
|
||||||
self::$smallestPrime = $val;
|
self::$smallestPrime = $val;
|
||||||
}
|
}
|
||||||
@ -432,7 +429,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param int $val
|
* @param int $val
|
||||||
*/
|
*/
|
||||||
static function setEngine($val)
|
public static function setEngine($val)
|
||||||
{
|
{
|
||||||
self::$engine = $val;
|
self::$engine = $val;
|
||||||
}
|
}
|
||||||
@ -451,9 +448,9 @@ class RSA
|
|||||||
* @param int $timeout
|
* @param int $timeout
|
||||||
* @param array $p
|
* @param array $p
|
||||||
*/
|
*/
|
||||||
static function createKey($bits = 2048)
|
public static function createKey($bits = 2048)
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
if (!isset(self::$engine)) {
|
if (!isset(self::$engine)) {
|
||||||
switch (true) {
|
switch (true) {
|
||||||
@ -605,9 +602,9 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
static function addFileFormat($fullname)
|
public static function addFileFormat($fullname)
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
if (class_exists($fullname)) {
|
if (class_exists($fullname)) {
|
||||||
$meta = new \ReflectionClass($path);
|
$meta = new \ReflectionClass($path);
|
||||||
@ -623,9 +620,9 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function getSupportedFormats()
|
public static function getSupportedFormats()
|
||||||
{
|
{
|
||||||
self::_initialize_static_variables();
|
self::initialize_static_variables();
|
||||||
|
|
||||||
return self::$origFileFormats;
|
return self::$origFileFormats;
|
||||||
}
|
}
|
||||||
@ -639,7 +636,7 @@ class RSA
|
|||||||
* @param string $key
|
* @param string $key
|
||||||
* @param int $type optional
|
* @param int $type optional
|
||||||
*/
|
*/
|
||||||
function load($key, $type = false)
|
public function load($key, $type = false)
|
||||||
{
|
{
|
||||||
if ($key instanceof RSA) {
|
if ($key instanceof RSA) {
|
||||||
$this->privateKeyFormat = $key->privateKeyFormat;
|
$this->privateKeyFormat = $key->privateKeyFormat;
|
||||||
@ -743,7 +740,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function getLoadedFormat()
|
public function getLoadedFormat()
|
||||||
{
|
{
|
||||||
if ($this->format === false) {
|
if ($this->format === false) {
|
||||||
return false;
|
return false;
|
||||||
@ -763,7 +760,7 @@ class RSA
|
|||||||
* @param string $type optional
|
* @param string $type optional
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function getPrivateKey($type = 'PKCS1')
|
public function getPrivateKey($type = 'PKCS1')
|
||||||
{
|
{
|
||||||
$type = strtolower($type);
|
$type = strtolower($type);
|
||||||
if (!isset(self::$fileFormats[$type])) {
|
if (!isset(self::$fileFormats[$type])) {
|
||||||
@ -817,7 +814,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
function getLength()
|
public function getLength()
|
||||||
{
|
{
|
||||||
return !isset($this->modulus) ? 0 : $this->modulus->getLength();
|
return !isset($this->modulus) ? 0 : $this->modulus->getLength();
|
||||||
}
|
}
|
||||||
@ -833,7 +830,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $password
|
* @param string $password
|
||||||
*/
|
*/
|
||||||
function setPassword($password = false)
|
public function setPassword($password = false)
|
||||||
{
|
{
|
||||||
$this->password = $password;
|
$this->password = $password;
|
||||||
}
|
}
|
||||||
@ -859,7 +856,7 @@ class RSA
|
|||||||
* @param int $type optional
|
* @param int $type optional
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function setPublicKey($key = false, $type = false)
|
public function setPublicKey($key = false, $type = false)
|
||||||
{
|
{
|
||||||
// if a public key has already been loaded return false
|
// if a public key has already been loaded return false
|
||||||
if (!empty($this->publicExponent)) {
|
if (!empty($this->publicExponent)) {
|
||||||
@ -932,7 +929,7 @@ class RSA
|
|||||||
* @param int $type optional
|
* @param int $type optional
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function setPrivateKey($key = false, $type = false)
|
public function setPrivateKey($key = false, $type = false)
|
||||||
{
|
{
|
||||||
if ($key === false && !empty($this->publicExponent)) {
|
if ($key === false && !empty($this->publicExponent)) {
|
||||||
$this->publicExponent = false;
|
$this->publicExponent = false;
|
||||||
@ -962,7 +959,7 @@ class RSA
|
|||||||
* @param string $type optional
|
* @param string $type optional
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function getPublicKey($type = 'PKCS8')
|
public function getPublicKey($type = 'PKCS8')
|
||||||
{
|
{
|
||||||
$type = strtolower($type);
|
$type = strtolower($type);
|
||||||
if (!isset(self::$fileFormats[$type])) {
|
if (!isset(self::$fileFormats[$type])) {
|
||||||
@ -992,7 +989,7 @@ class RSA
|
|||||||
* for invalid values.
|
* for invalid values.
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function getPublicKeyFingerprint($algorithm = 'md5')
|
public function getPublicKeyFingerprint($algorithm = 'md5')
|
||||||
{
|
{
|
||||||
if (empty($this->modulus) || empty($this->publicExponent)) {
|
if (empty($this->modulus) || empty($this->publicExponent)) {
|
||||||
return false;
|
return false;
|
||||||
@ -1026,7 +1023,7 @@ class RSA
|
|||||||
* @param string $type optional
|
* @param string $type optional
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function _getPrivatePublicKey($type = 'PKCS8')
|
private function getPrivatePublicKey($type = 'PKCS8')
|
||||||
{
|
{
|
||||||
$type = strtolower($type);
|
$type = strtolower($type);
|
||||||
if (!isset(self::$fileFormats[$type])) {
|
if (!isset(self::$fileFormats[$type])) {
|
||||||
@ -1055,14 +1052,14 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$key = $this->getPrivateKey($this->privateKeyFormat);
|
$key = $this->getPrivateKey($this->privateKeyFormat);
|
||||||
if (is_string($key)) {
|
if (is_string($key)) {
|
||||||
return $key;
|
return $key;
|
||||||
}
|
}
|
||||||
$key = $this->_getPrivatePublicKey($this->publicKeyFormat);
|
$key = $this->getPrivatePublicKey($this->publicKeyFormat);
|
||||||
return is_string($key) ? $key : '';
|
return is_string($key) ? $key : '';
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return '';
|
return '';
|
||||||
@ -1075,7 +1072,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @return \phpseclib\Crypt\RSA
|
* @return \phpseclib\Crypt\RSA
|
||||||
*/
|
*/
|
||||||
function __clone()
|
public function __clone()
|
||||||
{
|
{
|
||||||
$key = new RSA();
|
$key = new RSA();
|
||||||
$key->load($this);
|
$key->load($this);
|
||||||
@ -1089,7 +1086,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $format
|
* @param string $format
|
||||||
*/
|
*/
|
||||||
function setPrivateKeyFormat($format)
|
public function setPrivateKeyFormat($format)
|
||||||
{
|
{
|
||||||
$this->privateKeyFormat = $format;
|
$this->privateKeyFormat = $format;
|
||||||
}
|
}
|
||||||
@ -1101,7 +1098,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $format
|
* @param string $format
|
||||||
*/
|
*/
|
||||||
function setPublicKeyFormat($format)
|
public function setPublicKeyFormat($format)
|
||||||
{
|
{
|
||||||
$this->publicKeyFormat = $format;
|
$this->publicKeyFormat = $format;
|
||||||
}
|
}
|
||||||
@ -1115,7 +1112,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $hash
|
* @param string $hash
|
||||||
*/
|
*/
|
||||||
function setHash($hash)
|
public function setHash($hash)
|
||||||
{
|
{
|
||||||
// \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
|
// \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
|
||||||
switch ($hash) {
|
switch ($hash) {
|
||||||
@ -1147,7 +1144,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $hash
|
* @param string $hash
|
||||||
*/
|
*/
|
||||||
function setMGFHash($hash)
|
public function setMGFHash($hash)
|
||||||
{
|
{
|
||||||
// \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
|
// \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
|
||||||
switch ($hash) {
|
switch ($hash) {
|
||||||
@ -1179,7 +1176,7 @@ class RSA
|
|||||||
* @access public
|
* @access public
|
||||||
* @param int $format
|
* @param int $format
|
||||||
*/
|
*/
|
||||||
function setSaltLength($sLen)
|
public function setSaltLength($sLen)
|
||||||
{
|
{
|
||||||
$this->sLen = $sLen;
|
$this->sLen = $sLen;
|
||||||
}
|
}
|
||||||
@ -1194,7 +1191,7 @@ class RSA
|
|||||||
* @param int $xLen
|
* @param int $xLen
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _i2osp($x, $xLen)
|
private function i2osp($x, $xLen)
|
||||||
{
|
{
|
||||||
if ($x === false) {
|
if ($x === false) {
|
||||||
return false;
|
return false;
|
||||||
@ -1215,7 +1212,7 @@ class RSA
|
|||||||
* @param string $x
|
* @param string $x
|
||||||
* @return \phpseclib\Math\BigInteger
|
* @return \phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _os2ip($x)
|
private function os2ip($x)
|
||||||
{
|
{
|
||||||
return new BigInteger($x, 256);
|
return new BigInteger($x, 256);
|
||||||
}
|
}
|
||||||
@ -1229,7 +1226,7 @@ class RSA
|
|||||||
* @param \phpseclib\Math\BigInteger $x
|
* @param \phpseclib\Math\BigInteger $x
|
||||||
* @return \phpseclib\Math\BigInteger
|
* @return \phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _exponentiate($x)
|
private function exponentiate($x)
|
||||||
{
|
{
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case empty($this->primes):
|
case empty($this->primes):
|
||||||
@ -1276,8 +1273,8 @@ class RSA
|
|||||||
$r = BigInteger::randomRange(self::$one, $smallest->subtract(self::$one));
|
$r = BigInteger::randomRange(self::$one, $smallest->subtract(self::$one));
|
||||||
|
|
||||||
$m_i = [
|
$m_i = [
|
||||||
1 => $this->_blind($x, $r, 1),
|
1 => $this->blind($x, $r, 1),
|
||||||
2 => $this->_blind($x, $r, 2)
|
2 => $this->blind($x, $r, 2)
|
||||||
];
|
];
|
||||||
$h = $m_i[1]->subtract($m_i[2]);
|
$h = $m_i[1]->subtract($m_i[2]);
|
||||||
$h = $h->multiply($this->coefficients[2]);
|
$h = $h->multiply($this->coefficients[2]);
|
||||||
@ -1286,7 +1283,7 @@ class RSA
|
|||||||
|
|
||||||
$r = $this->primes[1];
|
$r = $this->primes[1];
|
||||||
for ($i = 3; $i <= $num_primes; $i++) {
|
for ($i = 3; $i <= $num_primes; $i++) {
|
||||||
$m_i = $this->_blind($x, $r, $i);
|
$m_i = $this->blind($x, $r, $i);
|
||||||
|
|
||||||
$r = $r->multiply($this->primes[$i - 1]);
|
$r = $r->multiply($this->primes[$i - 1]);
|
||||||
|
|
||||||
@ -1313,7 +1310,7 @@ class RSA
|
|||||||
* @param int $i
|
* @param int $i
|
||||||
* @return \phpseclib\Math\BigInteger
|
* @return \phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _blind($x, $r, $i)
|
private function blind($x, $r, $i)
|
||||||
{
|
{
|
||||||
$x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
|
$x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
|
||||||
$x = $x->modPow($this->exponents[$i], $this->primes[$i]);
|
$x = $x->modPow($this->exponents[$i], $this->primes[$i]);
|
||||||
@ -1339,7 +1336,7 @@ class RSA
|
|||||||
* @param string $y
|
* @param string $y
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
static function _equals($x, $y)
|
private static function equals($x, $y)
|
||||||
{
|
{
|
||||||
if (strlen($x) != strlen($y)) {
|
if (strlen($x) != strlen($y)) {
|
||||||
return false;
|
return false;
|
||||||
@ -1362,12 +1359,12 @@ class RSA
|
|||||||
* @param \phpseclib\Math\BigInteger $m
|
* @param \phpseclib\Math\BigInteger $m
|
||||||
* @return bool|\phpseclib\Math\BigInteger
|
* @return bool|\phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _rsaep($m)
|
private function rsaep($m)
|
||||||
{
|
{
|
||||||
if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
|
if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return $this->_exponentiate($m);
|
return $this->exponentiate($m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1379,12 +1376,12 @@ class RSA
|
|||||||
* @param \phpseclib\Math\BigInteger $c
|
* @param \phpseclib\Math\BigInteger $c
|
||||||
* @return bool|\phpseclib\Math\BigInteger
|
* @return bool|\phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _rsadp($c)
|
private function rsadp($c)
|
||||||
{
|
{
|
||||||
if ($c->compare(self::$zero) < 0 || $c->compare($this->modulus) > 0) {
|
if ($c->compare(self::$zero) < 0 || $c->compare($this->modulus) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return $this->_exponentiate($c);
|
return $this->exponentiate($c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1396,12 +1393,12 @@ class RSA
|
|||||||
* @param \phpseclib\Math\BigInteger $m
|
* @param \phpseclib\Math\BigInteger $m
|
||||||
* @return bool|\phpseclib\Math\BigInteger
|
* @return bool|\phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _rsasp1($m)
|
private function rsasp1($m)
|
||||||
{
|
{
|
||||||
if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
|
if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return $this->_exponentiate($m);
|
return $this->exponentiate($m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1413,12 +1410,12 @@ class RSA
|
|||||||
* @param \phpseclib\Math\BigInteger $s
|
* @param \phpseclib\Math\BigInteger $s
|
||||||
* @return bool|\phpseclib\Math\BigInteger
|
* @return bool|\phpseclib\Math\BigInteger
|
||||||
*/
|
*/
|
||||||
function _rsavp1($s)
|
private function rsavp1($s)
|
||||||
{
|
{
|
||||||
if ($s->compare(self::$zero) < 0 || $s->compare($this->modulus) > 0) {
|
if ($s->compare(self::$zero) < 0 || $s->compare($this->modulus) > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return $this->_exponentiate($s);
|
return $this->exponentiate($s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1431,7 +1428,7 @@ class RSA
|
|||||||
* @param int $mgfLen
|
* @param int $mgfLen
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function _mgf1($mgfSeed, $maskLen)
|
private function mgf1($mgfSeed, $maskLen)
|
||||||
{
|
{
|
||||||
// if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.
|
// if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.
|
||||||
|
|
||||||
@ -1457,7 +1454,7 @@ class RSA
|
|||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k - 2 * $this->hLen - 2
|
* @throws \OutOfBoundsException if strlen($m) > $this->k - 2 * $this->hLen - 2
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function _rsaes_oaep_encrypt($m, $l = '')
|
private function rsaes_oaep_encrypt($m, $l = '')
|
||||||
{
|
{
|
||||||
$mLen = strlen($m);
|
$mLen = strlen($m);
|
||||||
|
|
||||||
@ -1476,17 +1473,17 @@ class RSA
|
|||||||
$ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
|
$ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
|
||||||
$db = $lHash . $ps . chr(1) . $m;
|
$db = $lHash . $ps . chr(1) . $m;
|
||||||
$seed = Random::string($this->hLen);
|
$seed = Random::string($this->hLen);
|
||||||
$dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
|
$dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);
|
||||||
$maskedDB = $db ^ $dbMask;
|
$maskedDB = $db ^ $dbMask;
|
||||||
$seedMask = $this->_mgf1($maskedDB, $this->hLen);
|
$seedMask = $this->mgf1($maskedDB, $this->hLen);
|
||||||
$maskedSeed = $seed ^ $seedMask;
|
$maskedSeed = $seed ^ $seedMask;
|
||||||
$em = chr(0) . $maskedSeed . $maskedDB;
|
$em = chr(0) . $maskedSeed . $maskedDB;
|
||||||
|
|
||||||
// RSA encryption
|
// RSA encryption
|
||||||
|
|
||||||
$m = $this->_os2ip($em);
|
$m = $this->os2ip($em);
|
||||||
$c = $this->_rsaep($m);
|
$c = $this->rsaep($m);
|
||||||
$c = $this->_i2osp($c, $this->k);
|
$c = $this->i2osp($c, $this->k);
|
||||||
|
|
||||||
// Output the ciphertext C
|
// Output the ciphertext C
|
||||||
|
|
||||||
@ -1519,7 +1516,7 @@ class RSA
|
|||||||
* @param string $l
|
* @param string $l
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsaes_oaep_decrypt($c, $l = '')
|
private function rsaes_oaep_decrypt($c, $l = '')
|
||||||
{
|
{
|
||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
@ -1532,9 +1529,9 @@ class RSA
|
|||||||
|
|
||||||
// RSA decryption
|
// RSA decryption
|
||||||
|
|
||||||
$c = $this->_os2ip($c);
|
$c = $this->os2ip($c);
|
||||||
$m = $this->_rsadp($c);
|
$m = $this->rsadp($c);
|
||||||
$em = $this->_i2osp($m, $this->k);
|
$em = $this->i2osp($m, $this->k);
|
||||||
if ($em === false) {
|
if ($em === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1545,13 +1542,13 @@ class RSA
|
|||||||
$y = ord($em[0]);
|
$y = ord($em[0]);
|
||||||
$maskedSeed = substr($em, 1, $this->hLen);
|
$maskedSeed = substr($em, 1, $this->hLen);
|
||||||
$maskedDB = substr($em, $this->hLen + 1);
|
$maskedDB = substr($em, $this->hLen + 1);
|
||||||
$seedMask = $this->_mgf1($maskedDB, $this->hLen);
|
$seedMask = $this->mgf1($maskedDB, $this->hLen);
|
||||||
$seed = $maskedSeed ^ $seedMask;
|
$seed = $maskedSeed ^ $seedMask;
|
||||||
$dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
|
$dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);
|
||||||
$db = $maskedDB ^ $dbMask;
|
$db = $maskedDB ^ $dbMask;
|
||||||
$lHash2 = substr($db, 0, $this->hLen);
|
$lHash2 = substr($db, 0, $this->hLen);
|
||||||
$m = substr($db, $this->hLen);
|
$m = substr($db, $this->hLen);
|
||||||
if (!self::_equals($lHash, $lHash2)) {
|
if (!self::equals($lHash, $lHash2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$m = ltrim($m, chr(0));
|
$m = ltrim($m, chr(0));
|
||||||
@ -1574,15 +1571,15 @@ class RSA
|
|||||||
* @return bool|string
|
* @return bool|string
|
||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k
|
* @throws \OutOfBoundsException if strlen($m) > $this->k
|
||||||
*/
|
*/
|
||||||
function _raw_encrypt($m)
|
private function raw_encrypt($m)
|
||||||
{
|
{
|
||||||
if (strlen($m) > $this->k) {
|
if (strlen($m) > $this->k) {
|
||||||
throw new \OutOfBoundsException('Message too long');
|
throw new \OutOfBoundsException('Message too long');
|
||||||
}
|
}
|
||||||
|
|
||||||
$temp = $this->_os2ip($m);
|
$temp = $this->os2ip($m);
|
||||||
$temp = $this->_rsaep($temp);
|
$temp = $this->rsaep($temp);
|
||||||
return $this->_i2osp($temp, $this->k);
|
return $this->i2osp($temp, $this->k);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1596,7 +1593,7 @@ class RSA
|
|||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k - 11
|
* @throws \OutOfBoundsException if strlen($m) > $this->k - 11
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)
|
private function rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)
|
||||||
{
|
{
|
||||||
$mLen = strlen($m);
|
$mLen = strlen($m);
|
||||||
|
|
||||||
@ -1625,9 +1622,9 @@ class RSA
|
|||||||
$em = chr(0) . chr($type) . $ps . chr(0) . $m;
|
$em = chr(0) . chr($type) . $ps . chr(0) . $m;
|
||||||
|
|
||||||
// RSA encryption
|
// RSA encryption
|
||||||
$m = $this->_os2ip($em);
|
$m = $this->os2ip($em);
|
||||||
$c = $this->_rsaep($m);
|
$c = $this->rsaep($m);
|
||||||
$c = $this->_i2osp($c, $this->k);
|
$c = $this->i2osp($c, $this->k);
|
||||||
|
|
||||||
// Output the ciphertext C
|
// Output the ciphertext C
|
||||||
|
|
||||||
@ -1654,7 +1651,7 @@ class RSA
|
|||||||
* @param string $c
|
* @param string $c
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsaes_pkcs1_v1_5_decrypt($c)
|
private function rsaes_pkcs1_v1_5_decrypt($c)
|
||||||
{
|
{
|
||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
@ -1664,9 +1661,9 @@ class RSA
|
|||||||
|
|
||||||
// RSA decryption
|
// RSA decryption
|
||||||
|
|
||||||
$c = $this->_os2ip($c);
|
$c = $this->os2ip($c);
|
||||||
$m = $this->_rsadp($c);
|
$m = $this->rsadp($c);
|
||||||
$em = $this->_i2osp($m, $this->k);
|
$em = $this->i2osp($m, $this->k);
|
||||||
if ($em === false) {
|
if ($em === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1699,7 +1696,7 @@ class RSA
|
|||||||
* @throws \RuntimeException on encoding error
|
* @throws \RuntimeException on encoding error
|
||||||
* @param int $emBits
|
* @param int $emBits
|
||||||
*/
|
*/
|
||||||
function _emsa_pss_encode($m, $emBits)
|
private function emsa_pss_encode($m, $emBits)
|
||||||
{
|
{
|
||||||
// if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
|
// if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
|
||||||
// be output.
|
// be output.
|
||||||
@ -1717,7 +1714,7 @@ class RSA
|
|||||||
$h = $this->hash->hash($m2);
|
$h = $this->hash->hash($m2);
|
||||||
$ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
|
$ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
|
||||||
$db = $ps . chr(1) . $salt;
|
$db = $ps . chr(1) . $salt;
|
||||||
$dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
|
$dbMask = $this->mgf1($h, $emLen - $this->hLen - 1);
|
||||||
$maskedDB = $db ^ $dbMask;
|
$maskedDB = $db ^ $dbMask;
|
||||||
$maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
|
$maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
|
||||||
$em = $maskedDB . $h . chr(0xBC);
|
$em = $maskedDB . $h . chr(0xBC);
|
||||||
@ -1736,7 +1733,7 @@ class RSA
|
|||||||
* @param int $emBits
|
* @param int $emBits
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function _emsa_pss_verify($m, $em, $emBits)
|
private function emsa_pss_verify($m, $em, $emBits)
|
||||||
{
|
{
|
||||||
// if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
|
// if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
|
||||||
// be output.
|
// be output.
|
||||||
@ -1759,7 +1756,7 @@ class RSA
|
|||||||
if ((~$maskedDB[0] & $temp) != $temp) {
|
if ((~$maskedDB[0] & $temp) != $temp) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
|
$dbMask = $this->mgf1($h, $emLen - $this->hLen - 1);
|
||||||
$db = $maskedDB ^ $dbMask;
|
$db = $maskedDB ^ $dbMask;
|
||||||
$db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
|
$db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
|
||||||
$temp = $emLen - $this->hLen - $sLen - 2;
|
$temp = $emLen - $this->hLen - $sLen - 2;
|
||||||
@ -1769,7 +1766,7 @@ class RSA
|
|||||||
$salt = substr($db, $temp + 1); // should be $sLen long
|
$salt = substr($db, $temp + 1); // should be $sLen long
|
||||||
$m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
|
$m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
|
||||||
$h2 = $this->hash->hash($m2);
|
$h2 = $this->hash->hash($m2);
|
||||||
return self::_equals($h, $h2);
|
return self::equals($h, $h2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1781,17 +1778,17 @@ class RSA
|
|||||||
* @param string $m
|
* @param string $m
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsassa_pss_sign($m)
|
private function rsassa_pss_sign($m)
|
||||||
{
|
{
|
||||||
// EMSA-PSS encoding
|
// EMSA-PSS encoding
|
||||||
|
|
||||||
$em = $this->_emsa_pss_encode($m, 8 * $this->k - 1);
|
$em = $this->emsa_pss_encode($m, 8 * $this->k - 1);
|
||||||
|
|
||||||
// RSA signature
|
// RSA signature
|
||||||
|
|
||||||
$m = $this->_os2ip($em);
|
$m = $this->os2ip($em);
|
||||||
$s = $this->_rsasp1($m);
|
$s = $this->rsasp1($m);
|
||||||
$s = $this->_i2osp($s, $this->k);
|
$s = $this->i2osp($s, $this->k);
|
||||||
|
|
||||||
// Output the signature S
|
// Output the signature S
|
||||||
|
|
||||||
@ -1808,7 +1805,7 @@ class RSA
|
|||||||
* @param string $s
|
* @param string $s
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsassa_pss_verify($m, $s)
|
private function rsassa_pss_verify($m, $s)
|
||||||
{
|
{
|
||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
@ -1820,16 +1817,16 @@ class RSA
|
|||||||
|
|
||||||
$modBits = 8 * $this->k;
|
$modBits = 8 * $this->k;
|
||||||
|
|
||||||
$s2 = $this->_os2ip($s);
|
$s2 = $this->os2ip($s);
|
||||||
$m2 = $this->_rsavp1($s2);
|
$m2 = $this->rsavp1($s2);
|
||||||
$em = $this->_i2osp($m2, $modBits >> 3);
|
$em = $this->i2osp($m2, $modBits >> 3);
|
||||||
if ($em === false) {
|
if ($em === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMSA-PSS verification
|
// EMSA-PSS verification
|
||||||
|
|
||||||
return $this->_emsa_pss_verify($m, $em, $modBits - 1);
|
return $this->emsa_pss_verify($m, $em, $modBits - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1843,7 +1840,7 @@ class RSA
|
|||||||
* @throws \LengthException if the intended encoded message length is too short
|
* @throws \LengthException if the intended encoded message length is too short
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function _emsa_pkcs1_v1_5_encode($m, $emLen)
|
private function emsa_pkcs1_v1_5_encode($m, $emLen)
|
||||||
{
|
{
|
||||||
$h = $this->hash->hash($m);
|
$h = $this->hash->hash($m);
|
||||||
|
|
||||||
@ -1901,23 +1898,23 @@ class RSA
|
|||||||
* @throws \LengthException if the RSA modulus is too short
|
* @throws \LengthException if the RSA modulus is too short
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function _rsassa_pkcs1_v1_5_sign($m)
|
private function rsassa_pkcs1_v1_5_sign($m)
|
||||||
{
|
{
|
||||||
// EMSA-PKCS1-v1_5 encoding
|
// EMSA-PKCS1-v1_5 encoding
|
||||||
|
|
||||||
// If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
|
// If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
|
||||||
// too short" and stop.
|
// too short" and stop.
|
||||||
try {
|
try {
|
||||||
$em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
|
$em = $this->emsa_pkcs1_v1_5_encode($m, $this->k);
|
||||||
} catch (\LengthException $e) {
|
} catch (\LengthException $e) {
|
||||||
throw new \LengthException('RSA modulus too short');
|
throw new \LengthException('RSA modulus too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
// RSA signature
|
// RSA signature
|
||||||
|
|
||||||
$m = $this->_os2ip($em);
|
$m = $this->os2ip($em);
|
||||||
$s = $this->_rsasp1($m);
|
$s = $this->rsasp1($m);
|
||||||
$s = $this->_i2osp($s, $this->k);
|
$s = $this->i2osp($s, $this->k);
|
||||||
|
|
||||||
// Output the signature S
|
// Output the signature S
|
||||||
|
|
||||||
@ -1935,7 +1932,7 @@ class RSA
|
|||||||
* @throws \LengthException if the RSA modulus is too short
|
* @throws \LengthException if the RSA modulus is too short
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function _rsassa_pkcs1_v1_5_verify($m, $s)
|
private function rsassa_pkcs1_v1_5_verify($m, $s)
|
||||||
{
|
{
|
||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
@ -1945,9 +1942,9 @@ class RSA
|
|||||||
|
|
||||||
// RSA verification
|
// RSA verification
|
||||||
|
|
||||||
$s = $this->_os2ip($s);
|
$s = $this->os2ip($s);
|
||||||
$m2 = $this->_rsavp1($s);
|
$m2 = $this->rsavp1($s);
|
||||||
$em = $this->_i2osp($m2, $this->k);
|
$em = $this->i2osp($m2, $this->k);
|
||||||
if ($em === false) {
|
if ($em === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1957,13 +1954,13 @@ class RSA
|
|||||||
// If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
|
// If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
|
||||||
// too short" and stop.
|
// too short" and stop.
|
||||||
try {
|
try {
|
||||||
$em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
|
$em2 = $this->emsa_pkcs1_v1_5_encode($m, $this->k);
|
||||||
} catch (\LengthException $e) {
|
} catch (\LengthException $e) {
|
||||||
throw new \LengthException('RSA modulus too short');
|
throw new \LengthException('RSA modulus too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare
|
// Compare
|
||||||
return self::_equals($em, $em2);
|
return self::equals($em, $em2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1984,7 +1981,7 @@ class RSA
|
|||||||
* @param string $s
|
* @param string $s
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function _rsassa_pkcs1_v1_5_relaxed_verify($m, $s)
|
private function rsassa_pkcs1_v1_5_relaxed_verify($m, $s)
|
||||||
{
|
{
|
||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
@ -1994,12 +1991,12 @@ class RSA
|
|||||||
|
|
||||||
// RSA verification
|
// RSA verification
|
||||||
|
|
||||||
$s = $this->_os2ip($s);
|
$s = $this->os2ip($s);
|
||||||
$m2 = $this->_rsavp1($s);
|
$m2 = $this->rsavp1($s);
|
||||||
if ($m2 === false) {
|
if ($m2 === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$em = $this->_i2osp($m2, $this->k);
|
$em = $this->i2osp($m2, $this->k);
|
||||||
if ($em === false) {
|
if ($em === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2053,7 +2050,7 @@ class RSA
|
|||||||
$em = $hash->hash($m);
|
$em = $hash->hash($m);
|
||||||
$em2 = $decoded['digest'];
|
$em2 = $decoded['digest'];
|
||||||
|
|
||||||
return self::_equals($em, $em2);
|
return self::equals($em, $em2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2070,17 +2067,17 @@ class RSA
|
|||||||
* @return bool|string
|
* @return bool|string
|
||||||
* @throws \LengthException if the RSA modulus is too short
|
* @throws \LengthException if the RSA modulus is too short
|
||||||
*/
|
*/
|
||||||
function encrypt($plaintext, $padding = self::PADDING_OAEP)
|
public function encrypt($plaintext, $padding = self::PADDING_OAEP)
|
||||||
{
|
{
|
||||||
switch ($padding) {
|
switch ($padding) {
|
||||||
case self::PADDING_NONE:
|
case self::PADDING_NONE:
|
||||||
return $this->_raw_encrypt($plaintext);
|
return $this->raw_encrypt($plaintext);
|
||||||
case self::PADDING_PKCS15_COMPAT:
|
case self::PADDING_PKCS15_COMPAT:
|
||||||
case self::PADDING_PKCS1:
|
case self::PADDING_PKCS1:
|
||||||
return $this->_rsaes_pkcs1_v1_5_encrypt($plaintext, $padding == self::PADDING_PKCS15_COMPAT);
|
return $this->rsaes_pkcs1_v1_5_encrypt($plaintext, $padding == self::PADDING_PKCS15_COMPAT);
|
||||||
//case self::PADDING_OAEP:
|
//case self::PADDING_OAEP:
|
||||||
default:
|
default:
|
||||||
return $this->_rsaes_oaep_encrypt($plaintext);
|
return $this->rsaes_oaep_encrypt($plaintext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2093,16 +2090,16 @@ class RSA
|
|||||||
* @param int $padding optional
|
* @param int $padding optional
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
function decrypt($ciphertext, $padding = self::PADDING_OAEP)
|
public function decrypt($ciphertext, $padding = self::PADDING_OAEP)
|
||||||
{
|
{
|
||||||
switch ($padding) {
|
switch ($padding) {
|
||||||
case self::PADDING_NONE:
|
case self::PADDING_NONE:
|
||||||
return $this->_raw_encrypt($ciphertext);
|
return $this->raw_encrypt($ciphertext);
|
||||||
case self::PADDING_PKCS1:
|
case self::PADDING_PKCS1:
|
||||||
return $this->_rsaes_pkcs1_v1_5_decrypt($ciphertext);
|
return $this->rsaes_pkcs1_v1_5_decrypt($ciphertext);
|
||||||
//case self::PADDING_OAEP:
|
//case self::PADDING_OAEP:
|
||||||
default:
|
default:
|
||||||
return $this->_rsaes_oaep_decrypt($ciphertext);
|
return $this->rsaes_oaep_decrypt($ciphertext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2115,7 +2112,7 @@ class RSA
|
|||||||
* @param int $padding optional
|
* @param int $padding optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function sign($message, $padding = self::PADDING_PSS)
|
public function sign($message, $padding = self::PADDING_PSS)
|
||||||
{
|
{
|
||||||
if (empty($this->modulus) || empty($this->exponent)) {
|
if (empty($this->modulus) || empty($this->exponent)) {
|
||||||
return false;
|
return false;
|
||||||
@ -2124,10 +2121,10 @@ class RSA
|
|||||||
switch ($padding) {
|
switch ($padding) {
|
||||||
case self::PADDING_PKCS1:
|
case self::PADDING_PKCS1:
|
||||||
case self::PADDING_RELAXED_PKCS1:
|
case self::PADDING_RELAXED_PKCS1:
|
||||||
return $this->_rsassa_pkcs1_v1_5_sign($message);
|
return $this->rsassa_pkcs1_v1_5_sign($message);
|
||||||
//case self::PADDING_PSS:
|
//case self::PADDING_PSS:
|
||||||
default:
|
default:
|
||||||
return $this->_rsassa_pss_sign($message);
|
return $this->rsassa_pss_sign($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2141,7 +2138,7 @@ class RSA
|
|||||||
* @param int $padding optional
|
* @param int $padding optional
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function verify($message, $signature, $padding = self::PADDING_PSS)
|
public function verify($message, $signature, $padding = self::PADDING_PSS)
|
||||||
{
|
{
|
||||||
if (empty($this->modulus) || empty($this->exponent)) {
|
if (empty($this->modulus) || empty($this->exponent)) {
|
||||||
return false;
|
return false;
|
||||||
@ -2149,12 +2146,12 @@ class RSA
|
|||||||
|
|
||||||
switch ($padding) {
|
switch ($padding) {
|
||||||
case self::PADDING_RELAXED_PKCS1:
|
case self::PADDING_RELAXED_PKCS1:
|
||||||
return $this->_rsassa_pkcs1_v1_5_relaxed_verify($message, $signature);
|
return $this->rsassa_pkcs1_v1_5_relaxed_verify($message, $signature);
|
||||||
case self::PADDING_PKCS1:
|
case self::PADDING_PKCS1:
|
||||||
return $this->_rsassa_pkcs1_v1_5_verify($message, $signature);
|
return $this->rsassa_pkcs1_v1_5_verify($message, $signature);
|
||||||
//case self::PADDING_PSS:
|
//case self::PADDING_PSS:
|
||||||
default:
|
default:
|
||||||
return $this->_rsassa_pss_verify($message, $signature);
|
return $this->rsassa_pss_verify($message, $signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ use phpseclib\Common\Functions\Strings;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class MSBLOB
|
abstract class MSBLOB
|
||||||
{
|
{
|
||||||
/**#@+
|
/**#@+
|
||||||
* @access private
|
* @access private
|
||||||
@ -73,7 +73,7 @@ class MSBLOB
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -171,7 +171,7 @@ class MSBLOB
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
||||||
{
|
{
|
||||||
$n = strrev($n->toBytes());
|
$n = strrev($n->toBytes());
|
||||||
$e = str_pad(strrev($e->toBytes()), 4, "\0");
|
$e = str_pad(strrev($e->toBytes()), 4, "\0");
|
||||||
@ -196,7 +196,7 @@ class MSBLOB
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
$n = strrev($n->toBytes());
|
$n = strrev($n->toBytes());
|
||||||
$e = str_pad(strrev($e->toBytes()), 4, "\0");
|
$e = str_pad(strrev($e->toBytes()), 4, "\0");
|
||||||
|
@ -28,7 +28,7 @@ use phpseclib\Common\Functions\Strings;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class OpenSSH
|
abstract class OpenSSH
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Default comment
|
* Default comment
|
||||||
@ -36,7 +36,7 @@ class OpenSSH
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $comment = 'phpseclib-generated-key';
|
private static $comment = 'phpseclib-generated-key';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the default comment
|
* Sets the default comment
|
||||||
@ -44,7 +44,7 @@ class OpenSSH
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $comment
|
* @param string $comment
|
||||||
*/
|
*/
|
||||||
static function setComment($comment)
|
public static function setComment($comment)
|
||||||
{
|
{
|
||||||
self::$comment = str_replace(["\r", "\n"], '', $comment);
|
self::$comment = str_replace(["\r", "\n"], '', $comment);
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ class OpenSSH
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -109,7 +109,7 @@ class OpenSSH
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
$publicExponent = $e->toBytes(true);
|
$publicExponent = $e->toBytes(true);
|
||||||
$modulus = $n->toBytes(true);
|
$modulus = $n->toBytes(true);
|
||||||
|
@ -36,7 +36,7 @@ use phpseclib\File\ASN1\Maps;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class PKCS1 extends Progenitor
|
abstract class PKCS1 extends Progenitor
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Break a public or private key down into its constituent components
|
* Break a public or private key down into its constituent components
|
||||||
@ -46,7 +46,7 @@ class PKCS1 extends Progenitor
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -102,7 +102,7 @@ class PKCS1 extends Progenitor
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
||||||
{
|
{
|
||||||
$num_primes = count($primes);
|
$num_primes = count($primes);
|
||||||
$key = [
|
$key = [
|
||||||
@ -137,7 +137,7 @@ class PKCS1 extends Progenitor
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
$key = [
|
$key = [
|
||||||
'modulus' => $n,
|
'modulus' => $n,
|
||||||
|
@ -38,7 +38,7 @@ use phpseclib\File\ASN1;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class PKCS8 extends Progenitor
|
abstract class PKCS8 extends Progenitor
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Break a public or private key down into its constituent components
|
* Break a public or private key down into its constituent components
|
||||||
@ -48,7 +48,7 @@ class PKCS8 extends Progenitor
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
$components = ['isPublicKey' => strpos($key, 'PUBLIC') !== false];
|
$components = ['isPublicKey' => strpos($key, 'PUBLIC') !== false];
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ class PKCS8 extends Progenitor
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
||||||
{
|
{
|
||||||
$key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);
|
$key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);
|
||||||
$key = ASN1::extractBER($key);
|
$key = ASN1::extractBER($key);
|
||||||
@ -100,7 +100,7 @@ class PKCS8 extends Progenitor
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
$key = PKCS1::savePublicKey($n, $e);
|
$key = PKCS1::savePublicKey($n, $e);
|
||||||
$key = ASN1::extractBER($key);
|
$key = ASN1::extractBER($key);
|
||||||
|
@ -29,7 +29,7 @@ use phpseclib\Common\Functions\Strings;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class PuTTY
|
abstract class PuTTY
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Default comment
|
* Default comment
|
||||||
@ -37,7 +37,7 @@ class PuTTY
|
|||||||
* @var string
|
* @var string
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
static $comment = 'phpseclib-generated-key';
|
private static $comment = 'phpseclib-generated-key';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the default comment
|
* Sets the default comment
|
||||||
@ -45,7 +45,7 @@ class PuTTY
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $comment
|
* @param string $comment
|
||||||
*/
|
*/
|
||||||
static function setComment($comment)
|
public static function setComment($comment)
|
||||||
{
|
{
|
||||||
self::$comment = str_replace(["\r", "\n"], '', $comment);
|
self::$comment = str_replace(["\r", "\n"], '', $comment);
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@ class PuTTY
|
|||||||
* @param int $length
|
* @param int $length
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function generateSymmetricKey($password, $length)
|
public static function generateSymmetricKey($password, $length)
|
||||||
{
|
{
|
||||||
$symkey = '';
|
$symkey = '';
|
||||||
$sequence = 0;
|
$sequence = 0;
|
||||||
@ -78,7 +78,7 @@ class PuTTY
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -183,7 +183,7 @@ class PuTTY
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
||||||
{
|
{
|
||||||
if (count($primes) != 2) {
|
if (count($primes) != 2) {
|
||||||
return false;
|
return false;
|
||||||
@ -271,7 +271,7 @@ class PuTTY
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
$n = $n->toBytes(true);
|
$n = $n->toBytes(true);
|
||||||
$e = $e->toBytes(true);
|
$e = $e->toBytes(true);
|
||||||
|
@ -34,7 +34,7 @@ use phpseclib\Math\BigInteger;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class Raw
|
abstract class Raw
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Break a public or private key down into its constituent components
|
* Break a public or private key down into its constituent components
|
||||||
@ -44,7 +44,7 @@ class Raw
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_array($key)) {
|
if (!is_array($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -97,7 +97,7 @@ class Raw
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
return ['e' => clone $e, 'n' => clone $n];
|
return ['e' => clone $e, 'n' => clone $n];
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ use phpseclib\Math\BigInteger;
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
class XML
|
abstract class XML
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Break a public or private key down into its constituent components
|
* Break a public or private key down into its constituent components
|
||||||
@ -40,7 +40,7 @@ class XML
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function load($key, $password = '')
|
public static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
if (!is_string($key)) {
|
if (!is_string($key)) {
|
||||||
return false;
|
return false;
|
||||||
@ -113,7 +113,7 @@ class XML
|
|||||||
* @param string $password optional
|
* @param string $password optional
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, $primes, $exponents, $coefficients, $password = '')
|
||||||
{
|
{
|
||||||
if (count($primes) != 2) {
|
if (count($primes) != 2) {
|
||||||
return false;
|
return false;
|
||||||
@ -138,7 +138,7 @@ class XML
|
|||||||
* @param \phpseclib\Math\BigInteger $e
|
* @param \phpseclib\Math\BigInteger $e
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function savePublicKey(BigInteger $n, BigInteger $e)
|
public static function savePublicKey(BigInteger $n, BigInteger $e)
|
||||||
{
|
{
|
||||||
return "<RSAKeyValue>\r\n" .
|
return "<RSAKeyValue>\r\n" .
|
||||||
' <Modulus>' . Base64::encode($n->toBytes()) . "</Modulus>\r\n" .
|
' <Modulus>' . Base64::encode($n->toBytes()) . "</Modulus>\r\n" .
|
||||||
|
Loading…
Reference in New Issue
Block a user