phpseclib\Crypt\RSA\XML::load PHP Метод

load() статический публичный Метод

Break a public or private key down into its constituent components
static public load ( string $key, string $password = '' ) : array
$key string
$password string optional
Результат array
    static function load($key, $password = '')
    {
        if (!is_string($key)) {
            return false;
        }
        $components = array('isPublicKey' => false, 'primes' => array(), 'exponents' => array(), 'coefficients' => array());
        $use_errors = libxml_use_internal_errors(true);
        $dom = new \DOMDocument();
        if (!$dom->loadXML('<xml>' . $key . '</xml>')) {
            return false;
        }
        $xpath = new \DOMXPath($dom);
        $keys = array('modulus', 'exponent', 'p', 'q', 'dp', 'dq', 'inverseq', 'd');
        foreach ($keys as $key) {
            // $dom->getElementsByTagName($key) is case-sensitive
            $temp = $xpath->query("//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='{$key}']");
            if (!$temp->length) {
                continue;
            }
            $value = new BigInteger(Base64::decode($temp->item(0)->nodeValue), 256);
            switch ($key) {
                case 'modulus':
                    $components['modulus'] = $value;
                    break;
                case 'exponent':
                    $components['publicExponent'] = $value;
                    break;
                case 'p':
                    $components['primes'][1] = $value;
                    break;
                case 'q':
                    $components['primes'][2] = $value;
                    break;
                case 'dp':
                    $components['exponents'][1] = $value;
                    break;
                case 'dq':
                    $components['exponents'][2] = $value;
                    break;
                case 'inverseq':
                    $components['coefficients'][2] = $value;
                    break;
                case 'd':
                    $components['privateExponent'] = $value;
            }
        }
        libxml_use_internal_errors($use_errors);
        return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false;
    }