[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Class ParagonIE_Sodium_Core_SecretStream_State 5 */ 6 class ParagonIE_Sodium_Core_SecretStream_State 7 { 8 /** @var string $key */ 9 protected $key; 10 11 /** @var int $counter */ 12 protected $counter; 13 14 /** @var string $nonce */ 15 protected $nonce; 16 17 /** @var string $_pad */ 18 protected $_pad; 19 20 /** 21 * ParagonIE_Sodium_Core_SecretStream_State constructor. 22 * @param string $key 23 * @param string|null $nonce 24 */ 25 public function __construct($key, $nonce = null) 26 { 27 $this->key = $key; 28 $this->counter = 1; 29 if (is_null($nonce)) { 30 $nonce = str_repeat("\0", 12); 31 } 32 $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);; 33 $this->_pad = str_repeat("\0", 4); 34 } 35 36 /** 37 * @return self 38 */ 39 public function counterReset() 40 { 41 $this->counter = 1; 42 $this->_pad = str_repeat("\0", 4); 43 return $this; 44 } 45 46 /** 47 * @return string 48 */ 49 public function getKey() 50 { 51 return $this->key; 52 } 53 54 /** 55 * @return string 56 */ 57 public function getCounter() 58 { 59 return ParagonIE_Sodium_Core_Util::store32_le($this->counter); 60 } 61 62 /** 63 * @return string 64 */ 65 public function getNonce() 66 { 67 if (!is_string($this->nonce)) { 68 $this->nonce = str_repeat("\0", 12); 69 } 70 if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) { 71 $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT); 72 } 73 return $this->nonce; 74 } 75 76 /** 77 * @return string 78 */ 79 public function getCombinedNonce() 80 { 81 return $this->getCounter() . 82 ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8); 83 } 84 85 /** 86 * @return self 87 */ 88 public function incrementCounter() 89 { 90 ++$this->counter; 91 return $this; 92 } 93 94 /** 95 * @return bool 96 */ 97 public function needsRekey() 98 { 99 return ($this->counter & 0xffff) === 0; 100 } 101 102 /** 103 * @param string $newKeyAndNonce 104 * @return self 105 */ 106 public function rekey($newKeyAndNonce) 107 { 108 $this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32); 109 $this->nonce = str_pad( 110 ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32), 111 12, 112 "\0", 113 STR_PAD_RIGHT 114 ); 115 return $this; 116 } 117 118 /** 119 * @param string $str 120 * @return self 121 */ 122 public function xorNonce($str) 123 { 124 $this->nonce = ParagonIE_Sodium_Core_Util::xorStrings( 125 $this->getNonce(), 126 str_pad( 127 ParagonIE_Sodium_Core_Util::substr($str, 0, 8), 128 12, 129 "\0", 130 STR_PAD_RIGHT 131 ) 132 ); 133 return $this; 134 } 135 136 /** 137 * @param string $string 138 * @return self 139 */ 140 public static function fromString($string) 141 { 142 $state = new ParagonIE_Sodium_Core_SecretStream_State( 143 ParagonIE_Sodium_Core_Util::substr($string, 0, 32) 144 ); 145 $state->counter = ParagonIE_Sodium_Core_Util::load_4( 146 ParagonIE_Sodium_Core_Util::substr($string, 32, 4) 147 ); 148 $state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12); 149 $state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8); 150 return $state; 151 } 152 153 /** 154 * @return string 155 */ 156 public function toString() 157 { 158 return $this->key . 159 $this->getCounter() . 160 $this->nonce . 161 $this->_pad; 162 } 163 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sat Dec 7 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |