-

@ 867d6183:712df689
2025-02-23 00:16:03
https://blossom.primal.net/1ce1475c87e7f229c50d8caea3f905c5df2c2c954c3f092ee67a4aebe888a42c.png
80k
here is the code im currently using:
//
import hashlib
import matplotlib.pyplot as plt
import plotly.graph_objects as go
#CHECK_INTERVAL = 10000
def sha256_binary(input_bytes):
sha256_hash = hashlib.sha256()
sha256_hash.update(input_bytes)
return sha256_hash.digest()
def calculate_bit_change_probability(results, curr_result):
num_bits = len(curr_result) * 8
bit_change_count = [0] * num_bits
for result in results:
int_list1 = list(result)
int_list2 = list(curr_result)
xor_int_list = [a ^ b for a, b in zip(int_list1, int_list2)]
xor_bytes = bytes(xor_int_list)
xor_result = int.from_bytes(xor_bytes, byteorder='big')
for i in range(num_bits):
if (xor_result >> i) & 1:
bit_change_count[i] += 1
total_comparisons = len(results)
probabilities = [count / total_comparisons for count in bit_change_count]
return probabilities
def main():
results = []
probability_data = []
i = 0
imin = 80000
for j in range(imin+20):
i += 1
input_bytes = i.to_bytes((i.bit_length() + 7) // 8, byteorder='big')
hash_result = sha256_binary(input_bytes)
#if (i + 1) % CHECK_INTERVAL == 0:
if i >= imin and len(results) > 0:
probabilities = calculate_bit_change_probability(results, hash_result)
probability_data.append(probabilities)
print(i)
results.append(hash_result)
plt.plot(probability_data, linestyle="", marker = '.', markersize=10)
plt.title(f'Bit Change Probabilities (iteration {imin}-)')
plt.xlabel('iteration')
plt.ylabel('Probability')
plt.savefig('plot.png', dpi=300)
plt.show()
main()