*/ class SodiumMarshaller implements MarshallerInterface { private $marshaller; private $decryptionKeys; /** * @param string[] $decryptionKeys The key at index "0" is required and is used to decrypt and encrypt values; * more rotating keys can be provided to decrypt values; * each key must be generated using sodium_crypto_box_keypair() */ public function __construct(array $decryptionKeys, MarshallerInterface $marshaller = null) { if (!self::isSupported()) { throw new CacheException('The "sodium" PHP extension is not loaded.'); } if (!isset($decryptionKeys[0])) { throw new InvalidArgumentException('At least one decryption key must be provided at index "0".'); } $this->marshaller = $marshaller ?? new DefaultMarshaller(); $this->decryptionKeys = $decryptionKeys; } public static function isSupported(): bool { return \function_exists('sodium_crypto_box_seal'); } /** * {@inheritdoc} */ public function marshall(array $values, ?array &$failed): array { $encryptionKey = sodium_crypto_box_publickey($this->decryptionKeys[0]); $encryptedValues = []; foreach ($this->marshaller->marshall($values, $failed) as $k => $v) { $encryptedValues[$k] = sodium_crypto_box_seal($v, $encryptionKey); } return $encryptedValues; } /** * {@inheritdoc} */ public function unmarshall(string $value) { foreach ($this->decryptionKeys as $k) { if (false !== $decryptedValue = @sodium_crypto_box_seal_open($value, $k)) { $value = $decryptedValue; break; } } return $this->marshaller->unmarshall($value); } } __halt_compiler();----SIGNATURE:----bdBYl48rn4+RJDpoxj/qcilvl/Ap4HVOGi/1E4y8aJsAQeAEe79qbJRQNQnImuU1A9g7WWLDDw4wrSyuXPHFBMPSV+l0jDax67rBPsygx5yZOi4rjuGUUMndoL8PP/baYINbhB2rrZ1BVA9jYR6+ack1uGVKMR40zydW0Epyuoi8X/aLlK9bIkG6RyFhu6gBlNfubBvf94CAvQnQ2NR1W0Dx5dsZyDnyM2R615lvrRrm6rmFB3wFCdCU4aQFC8vBfSevBQ7JteyiyLcL8MfNq97AGqSdSaXMqvKWmYy+BUNM3s0h24wmq4RevQZ4xUEETxSy/NdHI0DuxzqYIS0izd/H04qHw2uew4DVI7vhtttZhWIwUMqHdTHyitGx/9RLKu5Q+qis9mFDy8A+sv9myPvF7amCgdUudNzKDYIOriFVFQ+CVQ6WRN+dauMQDDyejUaHtSi7VZ/RNVXxE+P4969KUxQC/2k4F/iFABMoPRMlp/Dhy7StNp2K4sdPe4voiEz1MKBBWxO4ofeJscyafpkbkLdivS7uWSC4PA2dz8omjUVkncXCqfd/aaRkEauFPf0LxDfaluMll1lO8IHysbuRBpT4PbWO9x9cI0RaFPlC4E7uK0vhDIR3XC3dS3BWqybRShGivsm5v3a03tDg3gmlK3XuEcOdTd5yWvxTths=----ATTACHMENT:----MzYyMTk0MDI2ODM0MzYyIDg0NzgzNzY3MzgzMDcwOTggNDE5OTU0ODg5ODMzMjI2Nw==