Raw.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Raw DSA Key Handler
  4. *
  5. * PHP version 5
  6. *
  7. * Reads and creates arrays as DSA keys
  8. *
  9. * @category Crypt
  10. * @package DSA
  11. * @author Jim Wigginton <terrafrost@php.net>
  12. * @copyright 2015 Jim Wigginton
  13. * @license http://www.opensource.org/licenses/mit-license.html MIT License
  14. * @link http://phpseclib.sourceforge.net
  15. */
  16. namespace phpseclib\Crypt\DSA\Keys;
  17. use phpseclib\Math\BigInteger;
  18. /**
  19. * Raw DSA Key Handler
  20. *
  21. * @package DSA
  22. * @author Jim Wigginton <terrafrost@php.net>
  23. * @access public
  24. */
  25. abstract class Raw
  26. {
  27. /**
  28. * Break a public or private key down into its constituent components
  29. *
  30. * @access public
  31. * @param array $key
  32. * @param string $password optional
  33. * @return array
  34. */
  35. public static function load($key, $password = '')
  36. {
  37. if (!is_array($key)) {
  38. return false;
  39. }
  40. switch (true) {
  41. case !isset($key['p']) || !isset($key['q']) || !isset($key['g']):
  42. case !$key['p'] instanceof BigInteger:
  43. case !$key['q'] instanceof BigInteger:
  44. case !$key['g'] instanceof BigInteger:
  45. case !isset($key['x']) && !isset($key['y']):
  46. case isset($key['x']) && !$key['x'] instanceof BigInteger:
  47. case isset($key['y']) && !$key['y'] instanceof BigInteger:
  48. return false;
  49. }
  50. $options = ['p' => 1, 'q' => 1, 'g' => 1, 'x' => 1, 'y' => 1];
  51. return array_intersect_key($key, $options);
  52. }
  53. /**
  54. * Convert a private key to the appropriate format.
  55. *
  56. * @access public
  57. * @param \phpseclib\Math\BigInteger $p
  58. * @param \phpseclib\Math\BigInteger $q
  59. * @param \phpseclib\Math\BigInteger $g
  60. * @param \phpseclib\Math\BigInteger $y
  61. * @param \phpseclib\Math\BigInteger $x
  62. * @param array $primes
  63. * @param array $exponents
  64. * @param array $coefficients
  65. * @param string $password optional
  66. * @return string
  67. */
  68. public static function savePrivateKey($p, $q, $g, $y, $x, $password = '')
  69. {
  70. return compact('p', 'q', 'g', 'y', 'x');
  71. }
  72. /**
  73. * Convert a public key to the appropriate format
  74. *
  75. * @access public
  76. * @param \phpseclib\Math\BigInteger $p
  77. * @param \phpseclib\Math\BigInteger $q
  78. * @param \phpseclib\Math\BigInteger $g
  79. * @param \phpseclib\Math\BigInteger $y
  80. * @return string
  81. */
  82. public static function savePublicKey($p, $q, $g, $y)
  83. {
  84. return compact('p', 'q', 'g', 'y');
  85. }
  86. }