-
Notifications
You must be signed in to change notification settings - Fork 6
/
verify.php
128 lines (90 loc) · 3.46 KB
/
verify.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
function binFlipByteOrder($string) {
return implode('', array_reverse(str_split($string, 1)));
}
function merkleroot($txids) {
// Check for when the result is ready, otherwise recursion
if (count($txids) === 1) {
return $txids[0];
}
// Calculate the next row of hashes
$pairhashes = [];
while (count($txids) > 0) {
if (count($txids) >= 2) {
// Get first two
$pair_first = $txids[0];
$pair_second = $txids[1];
// Hash them
$pair = $pair_first.$pair_second;
$pairhashes[] = hash('sha256', hash('sha256', $pair, true), true);
// Remove those two from the array
unset($txids[0]);
unset($txids[1]);
// Re-set the indexes (the above just nullifies the values) and make a new array without the original first two slots.
$txids = array_values($txids);
}
if (count($txids) == 1) {
// Get the first one twice
$pair_first = $txids[0];
$pair_second = $txids[0];
// Hash it with itself
$pair = $pair_first.$pair_second;
$pairhashes[] = hash('sha256', hash('sha256', $pair, true), true);
// Remove it from the array
unset($txids[0]);
// Re-set the indexes (the above just nullifies the values) and make a new array without the original first two slots.
$txids = array_values($txids);
}
}
return merkleroot($pairhashes);
}
$html = file_get_contents('pepe_directory/pepelist.json');
$json = json_decode($html, true);
$img_hash_array = [];
$asset_list = [];
$i=0;
$missing = false;
//get hash of each img file
foreach($json as $key => $value) {
$ogfile = basename($value);
$filecount = false;
foreach (glob("pepe_images/".$key.".*") as $filename) {
$filehash = hash_file('sha256', $filename);
$filecount = true;
}
if($filecount == false){
$missing = true;
}
$asset_name_hash_array[$i] = hash('sha256', $key);
$img_hash_array[$i] = $filehash;
$i++;
}
if($missing == true){
echo "you are missing pepe images!".PHP_EOL;
} else {
if(isset($argv[1])){
$height = $argv[1];
} else {
$height = count($img_hash_array);
}
$img_hash_array = array_slice($img_hash_array, 0, $height);
$asset_name_hash_array = array_slice($asset_name_hash_array, 0, $height);
$img_hash_arrayBEbinary = [];
foreach ($img_hash_array as $img_hashBE) {
// covert to binary, then flip
$img_hash_arrayBEbinary[] = binFlipByteOrder(hex2bin($img_hashBE));
}
$img_hash_root = merkleroot($img_hash_arrayBEbinary);
$asset_name_hash_arrayBEbinary = [];
foreach ($asset_name_hash_array as $asset_name_hashBE) {
// covert to binary, then flip
$asset_name_hash_arrayBEbinary[] = binFlipByteOrder(hex2bin($asset_name_hashBE));
}
$asset_name_hash_root = merkleroot($asset_name_hash_arrayBEbinary);
echo "Count: ".count($img_hash_array).PHP_EOL;
echo "Asset Hash Merkle Root: ".bin2hex(binFlipByteOrder($asset_name_hash_root)).PHP_EOL;
echo "Image Hash Merkle Root: ".bin2hex(binFlipByteOrder($img_hash_root)).PHP_EOL;
//echo "A:".base64_encode(pack('H*',bin2hex(binFlipByteOrder($asset_name_hash_root))));
//echo "I:".base64_encode(pack('H*',bin2hex(binFlipByteOrder($img_hash_root))));
}
?>