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 "/crypto" for Sha256, Bytes
import "/seq" for Lst
import "/seq" for Lst
import "/str" for Str
import "/str" for Str
import "/sha256" for sha256
import "/fmt" for Conv
import "/fmt" for Conv, Fmt

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 = sha256.call(chunk.map { |b| String.fromByte(b) }.join())
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 = sha256.call(buffer.map { |b| String.fromByte(b) }.join())
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(Fmt.v("xz", 2, hashes[0], 0, "", ""))</lang>
System.print(Bytes.toHexString(hashes[0]))</lang>


{{out}}
{{out}}