SHA-256 Merkle tree: Difference between revisions
Content added Content deleted
(→{{header|Wren}}: Now uses Wren-crypto module.) |
|||
Line 734: | Line 734: | ||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
{{libheader|Wren-crypto}} |
|||
{{libheader|Wren-seq}} |
{{libheader|Wren-seq}} |
||
{{libheader|Wren-str}} |
{{libheader|Wren-str}} |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
||
This script uses the implementation from the [[SHA-256#Wren]] task to process the example file. To import the former copy it (without the examples) to a file called 'sha256.wren' in the same directory as this script. |
|||
<lang ecmascript>import "io" for File |
<lang ecmascript>import "io" for File |
||
⚫ | |||
import "/seq" for Lst |
import "/seq" for Lst |
||
import "/str" for Str |
import "/str" for Str |
||
import "/ |
import "/fmt" for Conv |
||
⚫ | |||
var bytes = File.read("title.png").bytes.toList |
var bytes = File.read("title.png").bytes.toList |
||
var chunks = Lst.chunks(bytes, 1024) |
var chunks = Lst.chunks(bytes, 1024) |
||
Line 749: | Line 749: | ||
var i = 0 |
var i = 0 |
||
for (chunk in chunks) { |
for (chunk in chunks) { |
||
var h = |
var h = Sha256.digest(chunk.map { |b| String.fromByte(b) }.join()) |
||
hashes[i] = Str.chunks(h, 2).map { |x| Conv.atoi(x, 16) }.toList |
hashes[i] = Str.chunks(h, 2).map { |x| Conv.atoi(x, 16) }.toList |
||
i = i + 1 |
i = i + 1 |
||
} |
} |
||
var buffer = List.filled(64, 0) |
var buffer = List.filled(64, 0) |
||
while (hashes.count > 1) { |
while (hashes.count > 1) { |
||
Line 762: | Line 762: | ||
for (j in 0..31) buffer[j] = hashes[i][j] |
for (j in 0..31) buffer[j] = hashes[i][j] |
||
for (j in 0..31) buffer[j+32] = hashes[i+1][j] |
for (j in 0..31) buffer[j+32] = hashes[i+1][j] |
||
var h = |
var h = Sha256.digest(buffer.map { |b| String.fromByte(b) }.join()) |
||
var hb = Str.chunks(h, 2).map { |x| Conv.atoi(x, 16) }.toList |
var hb = Str.chunks(h, 2).map { |x| Conv.atoi(x, 16) }.toList |
||
hashes2.add(hb) |
hashes2.add(hb) |
||
Line 772: | Line 772: | ||
hashes = hashes2 |
hashes = hashes2 |
||
} |
} |
||
System.print( |
System.print(Bytes.toHexString(hashes[0]))</lang> |
||
{{out}} |
{{out}} |