mirror of
https://github.com/phpseclib/phpseclib.git
synced 2025-02-04 04:48:30 +00:00
PKCS8: add extractEncryptionAlgorithm() method
This commit is contained in:
parent
0f8486cc87
commit
92d0cd837e
@ -332,25 +332,7 @@ abstract class PKCS8 extends PKCS
|
|||||||
*/
|
*/
|
||||||
protected static function load($key, $password = '')
|
protected static function load($key, $password = '')
|
||||||
{
|
{
|
||||||
self::initialize_static_variables();
|
$decoded = self::preParse($key);
|
||||||
|
|
||||||
if (!Strings::is_stringable($key)) {
|
|
||||||
throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self::$format != self::MODE_DER) {
|
|
||||||
$decoded = ASN1::extractBER($key);
|
|
||||||
if ($decoded !== false) {
|
|
||||||
$key = $decoded;
|
|
||||||
} elseif (self::$format == self::MODE_PEM) {
|
|
||||||
throw new \UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$decoded = ASN1::decodeBER($key);
|
|
||||||
if (empty($decoded)) {
|
|
||||||
throw new \RuntimeException('Unable to decode BER');
|
|
||||||
}
|
|
||||||
|
|
||||||
$meta = [];
|
$meta = [];
|
||||||
|
|
||||||
@ -655,4 +637,65 @@ abstract class PKCS8 extends PKCS
|
|||||||
chunk_split(Base64::encode($key), 64) .
|
chunk_split(Base64::encode($key), 64) .
|
||||||
"-----END PUBLIC KEY-----";
|
"-----END PUBLIC KEY-----";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform some preliminary parsing of the key
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private static function preParse(&$key)
|
||||||
|
{
|
||||||
|
self::initialize_static_variables();
|
||||||
|
|
||||||
|
if (!Strings::is_stringable($key)) {
|
||||||
|
throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self::$format != self::MODE_DER) {
|
||||||
|
$decoded = ASN1::extractBER($key);
|
||||||
|
if ($decoded !== false) {
|
||||||
|
$key = $decoded;
|
||||||
|
} elseif (self::$format == self::MODE_PEM) {
|
||||||
|
throw new \UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$decoded = ASN1::decodeBER($key);
|
||||||
|
if (empty($decoded)) {
|
||||||
|
throw new \RuntimeException('Unable to decode BER');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $decoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the encryption parameters used by the key
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function extractEncryptionAlgorithm($key)
|
||||||
|
{
|
||||||
|
$decoded = self::preParse($key);
|
||||||
|
|
||||||
|
$r = ASN1::asn1map($decoded[0], ASN1\Maps\EncryptedPrivateKeyInfo::MAP);
|
||||||
|
if (!is_array($r)) {
|
||||||
|
throw new \RuntimeException('Unable to parse using EncryptedPrivateKeyInfo map');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($r['encryptionAlgorithm']['algorithm'] == 'id-PBES2') {
|
||||||
|
$decoded = ASN1::decodeBER($r['encryptionAlgorithm']['parameters']->element);
|
||||||
|
$r['encryptionAlgorithm']['parameters'] = ASN1::asn1map($decoded[0], ASN1\Maps\PBES2params::MAP);
|
||||||
|
|
||||||
|
$kdf = &$r['encryptionAlgorithm']['parameters']['keyDerivationFunc'];
|
||||||
|
switch ($kdf['algorithm']) {
|
||||||
|
case 'id-PBKDF2':
|
||||||
|
$decoded = ASN1::decodeBER($kdf['parameters']->element);
|
||||||
|
$kdf['parameters'] = ASN1::asn1map($decoded[0], Maps\PBKDF2params::MAP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $r['encryptionAlgorithm'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user