* @copyright 2015 Jim Wigginton * @license http://www.opensource.org/licenses/mit-license.html MIT License * @link http://phpseclib.sourceforge.net */ declare(strict_types=1); namespace phpseclib3\Crypt\DSA\Formats\Keys; use phpseclib3\Math\BigInteger; /** * Raw DSA Key Handler * * @author Jim Wigginton */ abstract class Raw { /** * Break a public or private key down into its constituent components * * @param string|array $key * @param string|false $password */ public static function load($key, $password = ''): array { if (!is_array($key)) { throw new \UnexpectedValueException('Key should be a array - not a ' . gettype($key)); } switch (true) { case !isset($key['p']) || !isset($key['q']) || !isset($key['g']): case !$key['p'] instanceof BigInteger: case !$key['q'] instanceof BigInteger: case !$key['g'] instanceof BigInteger: case !isset($key['x']) && !isset($key['y']): case isset($key['x']) && !$key['x'] instanceof BigInteger: case isset($key['y']) && !$key['y'] instanceof BigInteger: throw new \UnexpectedValueException('Key appears to be malformed'); } $options = ['p' => 1, 'q' => 1, 'g' => 1, 'x' => 1, 'y' => 1]; return array_intersect_key($key, $options); } /** * Convert a private key to the appropriate format. * * @param string $password optional */ public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, string $password = ''): string { return compact('p', 'q', 'g', 'y', 'x'); } /** * Convert a public key to the appropriate format */ public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y): string { return compact('p', 'q', 'g', 'y'); } }