diff options
author | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
commit | 0c8af4992cb0f7589dcafaad65ada12753c64594 (patch) | |
tree | 18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/PhpHash.php |
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/PhpHash.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/PhpHash.php | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/PhpHash.php b/vendor/aws/aws-sdk-php/src/PhpHash.php new file mode 100644 index 0000000..7a82815 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/PhpHash.php @@ -0,0 +1,81 @@ +<?php +namespace Aws; + +/** + * Incremental hashing using PHP's hash functions. + */ +class PhpHash implements HashInterface +{ + /** @var resource|\HashContext */ + private $context; + + /** @var string */ + private $algo; + + /** @var array */ + private $options; + + /** @var string */ + private $hash; + + /** + * @param string $algo Hashing algorithm. One of PHP's hash_algos() + * return values (e.g. md5, sha1, etc...). + * @param array $options Associative array of hashing options: + * - key: Secret key used with the hashing algorithm. + * - base64: Set to true to base64 encode the value when complete. + */ + public function __construct($algo, array $options = []) + { + $this->algo = $algo; + $this->options = $options; + } + + public function update($data) + { + if ($this->hash !== null) { + $this->reset(); + } + + hash_update($this->getContext(), $data); + } + + public function complete() + { + if ($this->hash) { + return $this->hash; + } + + $this->hash = hash_final($this->getContext(), true); + + if (isset($this->options['base64']) && $this->options['base64']) { + $this->hash = base64_encode($this->hash); + } + + return $this->hash; + } + + public function reset() + { + $this->context = $this->hash = null; + } + + /** + * Get a hash context or create one if needed + * + * @return resource|\HashContext + */ + private function getContext() + { + if (!$this->context) { + $key = isset($this->options['key']) ? $this->options['key'] : ''; + $this->context = hash_init( + $this->algo, + $key ? HASH_HMAC : 0, + $key + ); + } + + return $this->context; + } +} |