PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.9.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.9.7
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Reader / Xls / MD5.php

MD5.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.9.7, at vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/MD5.php

185 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PhpOffice\PhpSpreadsheet\Reader\Xls;
4
5 class MD5
6 {
7 // Context
8 private $a;
9
10 private $b;
11
12 private $c;
13
14 private $d;
15
16 /**
17 * MD5 stream constructor.
18 */
19 public function __construct()
20 {
21 $this->reset();
22 }
23
24 /**
25 * Reset the MD5 stream context.
26 */
27 public function reset()
28 {
29 $this->a = 0x67452301;
30 $this->b = 0xEFCDAB89;
31 $this->c = 0x98BADCFE;
32 $this->d = 0x10325476;
33 }
34
35 /**
36 * Get MD5 stream context.
37 *
38 * @return string
39 */
40 public function getContext()
41 {
42 $s = '';
43 foreach (['a', 'b', 'c', 'd'] as $i) {
44 $v = $this->{$i};
45 $s .= chr($v & 0xff);
46 $s .= chr(($v >> 8) & 0xff);
47 $s .= chr(($v >> 16) & 0xff);
48 $s .= chr(($v >> 24) & 0xff);
49 }
50
51 return $s;
52 }
53
54 /**
55 * Add data to context.
56 *
57 * @param string $data Data to add
58 */
59 public function add($data)
60 {
61 $words = array_values(unpack('V16', $data));
62
63 $A = $this->a;
64 $B = $this->b;
65 $C = $this->c;
66 $D = $this->d;
67
68 $F = ['self', 'f'];
69 $G = ['self', 'g'];
70 $H = ['self', 'h'];
71 $I = ['self', 'i'];
72
73 // ROUND 1
74 self::step($F, $A, $B, $C, $D, $words[0], 7, 0xd76aa478);
75 self::step($F, $D, $A, $B, $C, $words[1], 12, 0xe8c7b756);
76 self::step($F, $C, $D, $A, $B, $words[2], 17, 0x242070db);
77 self::step($F, $B, $C, $D, $A, $words[3], 22, 0xc1bdceee);
78 self::step($F, $A, $B, $C, $D, $words[4], 7, 0xf57c0faf);
79 self::step($F, $D, $A, $B, $C, $words[5], 12, 0x4787c62a);
80 self::step($F, $C, $D, $A, $B, $words[6], 17, 0xa8304613);
81 self::step($F, $B, $C, $D, $A, $words[7], 22, 0xfd469501);
82 self::step($F, $A, $B, $C, $D, $words[8], 7, 0x698098d8);
83 self::step($F, $D, $A, $B, $C, $words[9], 12, 0x8b44f7af);
84 self::step($F, $C, $D, $A, $B, $words[10], 17, 0xffff5bb1);
85 self::step($F, $B, $C, $D, $A, $words[11], 22, 0x895cd7be);
86 self::step($F, $A, $B, $C, $D, $words[12], 7, 0x6b901122);
87 self::step($F, $D, $A, $B, $C, $words[13], 12, 0xfd987193);
88 self::step($F, $C, $D, $A, $B, $words[14], 17, 0xa679438e);
89 self::step($F, $B, $C, $D, $A, $words[15], 22, 0x49b40821);
90
91 // ROUND 2
92 self::step($G, $A, $B, $C, $D, $words[1], 5, 0xf61e2562);
93 self::step($G, $D, $A, $B, $C, $words[6], 9, 0xc040b340);
94 self::step($G, $C, $D, $A, $B, $words[11], 14, 0x265e5a51);
95 self::step($G, $B, $C, $D, $A, $words[0], 20, 0xe9b6c7aa);
96 self::step($G, $A, $B, $C, $D, $words[5], 5, 0xd62f105d);
97 self::step($G, $D, $A, $B, $C, $words[10], 9, 0x02441453);
98 self::step($G, $C, $D, $A, $B, $words[15], 14, 0xd8a1e681);
99 self::step($G, $B, $C, $D, $A, $words[4], 20, 0xe7d3fbc8);
100 self::step($G, $A, $B, $C, $D, $words[9], 5, 0x21e1cde6);
101 self::step($G, $D, $A, $B, $C, $words[14], 9, 0xc33707d6);
102 self::step($G, $C, $D, $A, $B, $words[3], 14, 0xf4d50d87);
103 self::step($G, $B, $C, $D, $A, $words[8], 20, 0x455a14ed);
104 self::step($G, $A, $B, $C, $D, $words[13], 5, 0xa9e3e905);
105 self::step($G, $D, $A, $B, $C, $words[2], 9, 0xfcefa3f8);
106 self::step($G, $C, $D, $A, $B, $words[7], 14, 0x676f02d9);
107 self::step($G, $B, $C, $D, $A, $words[12], 20, 0x8d2a4c8a);
108
109 // ROUND 3
110 self::step($H, $A, $B, $C, $D, $words[5], 4, 0xfffa3942);
111 self::step($H, $D, $A, $B, $C, $words[8], 11, 0x8771f681);
112 self::step($H, $C, $D, $A, $B, $words[11], 16, 0x6d9d6122);
113 self::step($H, $B, $C, $D, $A, $words[14], 23, 0xfde5380c);
114 self::step($H, $A, $B, $C, $D, $words[1], 4, 0xa4beea44);
115 self::step($H, $D, $A, $B, $C, $words[4], 11, 0x4bdecfa9);
116 self::step($H, $C, $D, $A, $B, $words[7], 16, 0xf6bb4b60);
117 self::step($H, $B, $C, $D, $A, $words[10], 23, 0xbebfbc70);
118 self::step($H, $A, $B, $C, $D, $words[13], 4, 0x289b7ec6);
119 self::step($H, $D, $A, $B, $C, $words[0], 11, 0xeaa127fa);
120 self::step($H, $C, $D, $A, $B, $words[3], 16, 0xd4ef3085);
121 self::step($H, $B, $C, $D, $A, $words[6], 23, 0x04881d05);
122 self::step($H, $A, $B, $C, $D, $words[9], 4, 0xd9d4d039);
123 self::step($H, $D, $A, $B, $C, $words[12], 11, 0xe6db99e5);
124 self::step($H, $C, $D, $A, $B, $words[15], 16, 0x1fa27cf8);
125 self::step($H, $B, $C, $D, $A, $words[2], 23, 0xc4ac5665);
126
127 // ROUND 4
128 self::step($I, $A, $B, $C, $D, $words[0], 6, 0xf4292244);
129 self::step($I, $D, $A, $B, $C, $words[7], 10, 0x432aff97);
130 self::step($I, $C, $D, $A, $B, $words[14], 15, 0xab9423a7);
131 self::step($I, $B, $C, $D, $A, $words[5], 21, 0xfc93a039);
132 self::step($I, $A, $B, $C, $D, $words[12], 6, 0x655b59c3);
133 self::step($I, $D, $A, $B, $C, $words[3], 10, 0x8f0ccc92);
134 self::step($I, $C, $D, $A, $B, $words[10], 15, 0xffeff47d);
135 self::step($I, $B, $C, $D, $A, $words[1], 21, 0x85845dd1);
136 self::step($I, $A, $B, $C, $D, $words[8], 6, 0x6fa87e4f);
137 self::step($I, $D, $A, $B, $C, $words[15], 10, 0xfe2ce6e0);
138 self::step($I, $C, $D, $A, $B, $words[6], 15, 0xa3014314);
139 self::step($I, $B, $C, $D, $A, $words[13], 21, 0x4e0811a1);
140 self::step($I, $A, $B, $C, $D, $words[4], 6, 0xf7537e82);
141 self::step($I, $D, $A, $B, $C, $words[11], 10, 0xbd3af235);
142 self::step($I, $C, $D, $A, $B, $words[2], 15, 0x2ad7d2bb);
143 self::step($I, $B, $C, $D, $A, $words[9], 21, 0xeb86d391);
144
145 $this->a = ($this->a + $A) & 0xffffffff;
146 $this->b = ($this->b + $B) & 0xffffffff;
147 $this->c = ($this->c + $C) & 0xffffffff;
148 $this->d = ($this->d + $D) & 0xffffffff;
149 }
150
151 private static function f($X, $Y, $Z)
152 {
153 return ($X & $Y) | ((~$X) & $Z); // X AND Y OR NOT X AND Z
154 }
155
156 private static function g($X, $Y, $Z)
157 {
158 return ($X & $Z) | ($Y & (~$Z)); // X AND Z OR Y AND NOT Z
159 }
160
161 private static function h($X, $Y, $Z)
162 {
163 return $X ^ $Y ^ $Z; // X XOR Y XOR Z
164 }
165
166 private static function i($X, $Y, $Z)
167 {
168 return $Y ^ ($X | (~$Z)); // Y XOR (X OR NOT Z)
169 }
170
171 private static function step($func, &$A, $B, $C, $D, $M, $s, $t)
172 {
173 $A = ($A + call_user_func($func, $B, $C, $D) + $M + $t) & 0xffffffff;
174 $A = self::rotate($A, $s);
175 $A = ($B + $A) & 0xffffffff;
176 }
177
178 private static function rotate($decimal, $bits)
179 {
180 $binary = str_pad(decbin($decimal), 32, '0', STR_PAD_LEFT);
181
182 return bindec(substr($binary, $bits) . substr($binary, 0, $bits));
183 }
184 }
185