# media-cloud-sync/1.2.5/includes/sdk/s3/Aws/Signature/SignatureTrait.php

Media Cloud Sync, version 1.2.5. 35 lines.

- Page: https://pluginprobe.com/plugins/media-cloud-sync/1.2.5/code/includes/sdk/s3/Aws/Signature/SignatureTrait.php
- Raw: https://pluginprobe.com/plugins/media-cloud-sync/1.2.5/raw/includes/sdk/s3/Aws/Signature/SignatureTrait.php
- Modified: 2024-10-27T10:40:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/media-cloud-sync/1.2.5/code/includes/sdk/s3/Aws/Signature/SignatureTrait.php#L10-L20`.

```php
<?php

namespace Dudlewebs\WPMCS\s3\Aws\Signature;

/**
 * Provides signature calculation for SignatureV4.
 */
trait SignatureTrait
{
    /** @var array Cache of previously signed values */
    private $cache = [];
    /** @var int Size of the hash cache */
    private $cacheSize = 0;
    private function createScope($shortDate, $region, $service)
    {
        return "{$shortDate}/{$region}/{$service}/aws4_request";
    }
    private function getSigningKey($shortDate, $region, $service, $secretKey)
    {
        $k = $shortDate . '_' . $region . '_' . $service . '_' . $secretKey;
        if (!isset($this->cache[$k])) {
            // Clear the cache when it reaches 50 entries
            if (++$this->cacheSize > 50) {
                $this->cache = [];
                $this->cacheSize = 0;
            }
            $dateKey = \hash_hmac('sha256', $shortDate, "AWS4{$secretKey}", \true);
            $regionKey = \hash_hmac('sha256', $region, $dateKey, \true);
            $serviceKey = \hash_hmac('sha256', $service, $regionKey, \true);
            $this->cache[$k] = \hash_hmac('sha256', 'aws4_request', $serviceKey, \true);
        }
        return $this->cache[$k];
    }
}

```
