Skip to content

Commit 9979ead

Browse files
authored
Update main.py
1 parent d9cab68 commit 9979ead

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

main.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,49 @@
11
import struct
2+
import threading
23

34
class HashX:
45
def __init__(self, seed=0xABCDEF):
5-
"""Initialize the hash state with a seed."""
6+
"""Initialize hash state with a seed."""
67
self.seed = seed
78
self.state = [seed, seed ^ 0x12345678, seed ^ 0x87654321, seed ^ 0xFEDCBA98]
89

910
def _mix(self, v):
10-
"""Mixing function to ensure diffusion."""
11+
"""Improved mixing function for better diffusion and security."""
1112
v ^= v >> 13
1213
v *= 0x85EBCA6B
1314
v ^= v >> 16
15+
v *= 0xC2B2AE35
16+
v ^= v >> 16
1417
return v & 0xFFFFFFFFFFFFFFFF # 64-bit mask
1518

1619
def _rotate_left(self, x, r):
17-
"""Bitwise rotation (left)."""
20+
"""Bitwise left rotation for fast scrambling."""
1821
return ((x << r) | (x >> (64 - r))) & 0xFFFFFFFFFFFFFFFF
1922

23+
def _process_chunk(self, chunk, index):
24+
"""Multi-threaded processing of input chunks."""
25+
v = struct.unpack('<Q', chunk)[0] # Convert to 64-bit integer
26+
v = self._mix(v)
27+
self.state[index % 4] ^= v
28+
self.state[index % 4] = self._rotate_left(self.state[index % 4], (index * 7) % 64)
29+
2030
def update(self, data):
21-
"""Process input data in 64-byte chunks."""
31+
"""Process input data in 64-byte chunks with multi-threading."""
2232
if isinstance(data, str):
2333
data = data.encode('utf-8') # Convert string to bytes
24-
34+
2535
length = len(data)
2636
padded_data = data + b'\x00' * (64 - (length % 64)) # Padding
2737
blocks = [padded_data[i:i+8] for i in range(0, len(padded_data), 8)]
2838

39+
threads = []
2940
for i, block in enumerate(blocks):
30-
v = struct.unpack('<Q', block)[0] # Convert to 64-bit integer
31-
v = self._mix(v)
32-
self.state[i % 4] ^= v
33-
self.state[i % 4] = self._rotate_left(self.state[i % 4], (i * 7) % 64)
41+
thread = threading.Thread(target=self._process_chunk, args=(block, i))
42+
threads.append(thread)
43+
thread.start()
44+
45+
for thread in threads:
46+
thread.join()
3447

3548
def digest(self):
3649
"""Generate final 256-bit hash."""

0 commit comments

Comments
 (0)