PluginProbe ʕ •ᴥ•ʔ
Transferito: WP Migration / trunk
Transferito: WP Migration vtrunk
trunk 11.4.0 12.0.0 13.1.0 14.0.0 14.0.11 14.0.7 14.1.0 14.1.1 14.1.2 14.1.3 14.1.4
transferito / vendor / aws / aws-sdk-php / src / Crypto / Polyfill / Key.php
transferito / vendor / aws / aws-sdk-php / src / Crypto / Polyfill Last commit date
AesGcm.php 11 months ago ByteArray.php 11 months ago Gmac.php 11 months ago Key.php 11 months ago NeedsTrait.php 11 months ago
Key.php
78 lines
1 <?php
2 namespace Aws\Crypto\Polyfill;
3
4 /**
5 * Class Key
6 *
7 * Wraps a string to keep it hidden from stack traces.
8 *
9 * @package Aws\Crypto\Polyfill
10 */
11 class Key
12 {
13 /**
14 * @var string $internalString
15 */
16 private $internalString;
17
18 /**
19 * Hide contents of
20 *
21 * @return array
22 */
23 public function __debugInfo()
24 {
25 return [];
26 }
27
28 /**
29 * Key constructor.
30 * @param string $str
31 */
32 public function __construct($str)
33 {
34 $this->internalString = $str;
35 }
36
37 /**
38 * Defense in depth:
39 *
40 * PHP 7.2 includes the Sodium cryptography library, which (among other things)
41 * exposes a function called sodium_memzero() that we can use to zero-fill strings
42 * to minimize the risk of sensitive cryptographic materials persisting in memory.
43 *
44 * If this function is not available, we XOR the string in-place with itself as a
45 * best-effort attempt.
46 */
47 public function __destruct()
48 {
49 if (extension_loaded('sodium') && function_exists('sodium_memzero')) {
50 try {
51 \sodium_memzero($this->internalString);
52 } catch (\SodiumException $ex) {
53 // This is a best effort, but does not provide the same guarantees as sodium_memzero():
54 $this->internalString ^= $this->internalString;
55 }
56 }
57 }
58
59 /**
60 * @return string
61 */
62 public function get()
63 {
64 return $this->internalString;
65 }
66
67 /**
68 * @return int
69 */
70 public function length()
71 {
72 if (\is_callable('\\mb_strlen')) {
73 return (int) \mb_strlen($this->internalString, '8bit');
74 }
75 return (int) \strlen($this->internalString);
76 }
77 }
78