summaryrefslogtreecommitdiffstats
path: root/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2022-01-11 12:35:47 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2022-01-11 12:35:47 +0100
commit19985dbb8c0aa66dc4bf7905abc1148de909097d (patch)
tree2cd5a5d20d7e80fc2a51adf60d838d8a2c40999e /vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php
download1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.gz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.bz2
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.lz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.xz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.zst
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.zip
Diffstat (limited to 'vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php')
-rw-r--r--vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php163
1 files changed, 163 insertions, 0 deletions
diff --git a/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php b/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php
new file mode 100644
index 0000000..6f20486
--- /dev/null
+++ b/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php
@@ -0,0 +1,163 @@
+<?php
+
+/**
+ * Class ParagonIE_Sodium_Core32_SecretStream_State
+ */
+class ParagonIE_Sodium_Core32_SecretStream_State
+{
+ /** @var string $key */
+ protected $key;
+
+ /** @var int $counter */
+ protected $counter;
+
+ /** @var string $nonce */
+ protected $nonce;
+
+ /** @var string $_pad */
+ protected $_pad;
+
+ /**
+ * ParagonIE_Sodium_Core32_SecretStream_State constructor.
+ * @param string $key
+ * @param string|null $nonce
+ */
+ public function __construct($key, $nonce = null)
+ {
+ $this->key = $key;
+ $this->counter = 1;
+ if (is_null($nonce)) {
+ $nonce = str_repeat("\0", 12);
+ }
+ $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
+ $this->_pad = str_repeat("\0", 4);
+ }
+
+ /**
+ * @return self
+ */
+ public function counterReset()
+ {
+ $this->counter = 1;
+ $this->_pad = str_repeat("\0", 4);
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCounter()
+ {
+ return ParagonIE_Sodium_Core32_Util::store32_le($this->counter);
+ }
+
+ /**
+ * @return string
+ */
+ public function getNonce()
+ {
+ if (!is_string($this->nonce)) {
+ $this->nonce = str_repeat("\0", 12);
+ }
+ if (ParagonIE_Sodium_Core32_Util::strlen($this->nonce) !== 12) {
+ $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
+ }
+ return $this->nonce;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCombinedNonce()
+ {
+ return $this->getCounter() .
+ ParagonIE_Sodium_Core32_Util::substr($this->getNonce(), 0, 8);
+ }
+
+ /**
+ * @return self
+ */
+ public function incrementCounter()
+ {
+ ++$this->counter;
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function needsRekey()
+ {
+ return ($this->counter & 0xffff) === 0;
+ }
+
+ /**
+ * @param string $newKeyAndNonce
+ * @return self
+ */
+ public function rekey($newKeyAndNonce)
+ {
+ $this->key = ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 0, 32);
+ $this->nonce = str_pad(
+ ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 32),
+ 12,
+ "\0",
+ STR_PAD_RIGHT
+ );
+ return $this;
+ }
+
+ /**
+ * @param string $str
+ * @return self
+ */
+ public function xorNonce($str)
+ {
+ $this->nonce = ParagonIE_Sodium_Core32_Util::xorStrings(
+ $this->getNonce(),
+ str_pad(
+ ParagonIE_Sodium_Core32_Util::substr($str, 0, 8),
+ 12,
+ "\0",
+ STR_PAD_RIGHT
+ )
+ );
+ return $this;
+ }
+
+ /**
+ * @param string $string
+ * @return self
+ */
+ public static function fromString($string)
+ {
+ $state = new ParagonIE_Sodium_Core32_SecretStream_State(
+ ParagonIE_Sodium_Core32_Util::substr($string, 0, 32)
+ );
+ $state->counter = ParagonIE_Sodium_Core32_Util::load_4(
+ ParagonIE_Sodium_Core32_Util::substr($string, 32, 4)
+ );
+ $state->nonce = ParagonIE_Sodium_Core32_Util::substr($string, 36, 12);
+ $state->_pad = ParagonIE_Sodium_Core32_Util::substr($string, 48, 8);
+ return $state;
+ }
+
+ /**
+ * @return string
+ */
+ public function toString()
+ {
+ return $this->key .
+ $this->getCounter() .
+ $this->nonce .
+ $this->_pad;
+ }
+}