summaryrefslogtreecommitdiff
path: root/vendor/github.com/zeebo/blake3/internal/utils/utils.go
diff options
context:
space:
mode:
authorLibravatar tsmethurst <tobi.smethurst@protonmail.com>2022-01-16 18:52:30 +0100
committerLibravatar tsmethurst <tobi.smethurst@protonmail.com>2022-01-16 18:52:30 +0100
commit6f5ccf435585e43a00e3cc50f4bcefac36ada818 (patch)
treeba368d27464b79b1e5d010c0662fd3e340bf108e /vendor/github.com/zeebo/blake3/internal/utils/utils.go
parentadd go-runners to readme (diff)
downloadgotosocial-6f5ccf435585e43a00e3cc50f4bcefac36ada818.tar.xz
update dependencies
Diffstat (limited to 'vendor/github.com/zeebo/blake3/internal/utils/utils.go')
-rw-r--r--vendor/github.com/zeebo/blake3/internal/utils/utils.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/github.com/zeebo/blake3/internal/utils/utils.go b/vendor/github.com/zeebo/blake3/internal/utils/utils.go
new file mode 100644
index 000000000..0b36f0f0f
--- /dev/null
+++ b/vendor/github.com/zeebo/blake3/internal/utils/utils.go
@@ -0,0 +1,60 @@
+package utils
+
+import (
+ "encoding/binary"
+ "unsafe"
+)
+
+func SliceToArray32(bytes []byte) *[32]uint8 { return (*[32]uint8)(unsafe.Pointer(&bytes[0])) }
+func SliceToArray64(bytes []byte) *[64]uint8 { return (*[64]uint8)(unsafe.Pointer(&bytes[0])) }
+
+func BytesToWords(bytes *[64]uint8, words *[16]uint32) {
+ words[0] = binary.LittleEndian.Uint32(bytes[0*4:])
+ words[1] = binary.LittleEndian.Uint32(bytes[1*4:])
+ words[2] = binary.LittleEndian.Uint32(bytes[2*4:])
+ words[3] = binary.LittleEndian.Uint32(bytes[3*4:])
+ words[4] = binary.LittleEndian.Uint32(bytes[4*4:])
+ words[5] = binary.LittleEndian.Uint32(bytes[5*4:])
+ words[6] = binary.LittleEndian.Uint32(bytes[6*4:])
+ words[7] = binary.LittleEndian.Uint32(bytes[7*4:])
+ words[8] = binary.LittleEndian.Uint32(bytes[8*4:])
+ words[9] = binary.LittleEndian.Uint32(bytes[9*4:])
+ words[10] = binary.LittleEndian.Uint32(bytes[10*4:])
+ words[11] = binary.LittleEndian.Uint32(bytes[11*4:])
+ words[12] = binary.LittleEndian.Uint32(bytes[12*4:])
+ words[13] = binary.LittleEndian.Uint32(bytes[13*4:])
+ words[14] = binary.LittleEndian.Uint32(bytes[14*4:])
+ words[15] = binary.LittleEndian.Uint32(bytes[15*4:])
+}
+
+func WordsToBytes(words *[16]uint32, bytes []byte) {
+ bytes = bytes[:64]
+ binary.LittleEndian.PutUint32(bytes[0*4:1*4], words[0])
+ binary.LittleEndian.PutUint32(bytes[1*4:2*4], words[1])
+ binary.LittleEndian.PutUint32(bytes[2*4:3*4], words[2])
+ binary.LittleEndian.PutUint32(bytes[3*4:4*4], words[3])
+ binary.LittleEndian.PutUint32(bytes[4*4:5*4], words[4])
+ binary.LittleEndian.PutUint32(bytes[5*4:6*4], words[5])
+ binary.LittleEndian.PutUint32(bytes[6*4:7*4], words[6])
+ binary.LittleEndian.PutUint32(bytes[7*4:8*4], words[7])
+ binary.LittleEndian.PutUint32(bytes[8*4:9*4], words[8])
+ binary.LittleEndian.PutUint32(bytes[9*4:10*4], words[9])
+ binary.LittleEndian.PutUint32(bytes[10*4:11*4], words[10])
+ binary.LittleEndian.PutUint32(bytes[11*4:12*4], words[11])
+ binary.LittleEndian.PutUint32(bytes[12*4:13*4], words[12])
+ binary.LittleEndian.PutUint32(bytes[13*4:14*4], words[13])
+ binary.LittleEndian.PutUint32(bytes[14*4:15*4], words[14])
+ binary.LittleEndian.PutUint32(bytes[15*4:16*4], words[15])
+}
+
+func KeyFromBytes(key []byte, out *[8]uint32) {
+ key = key[:32]
+ out[0] = binary.LittleEndian.Uint32(key[0:])
+ out[1] = binary.LittleEndian.Uint32(key[4:])
+ out[2] = binary.LittleEndian.Uint32(key[8:])
+ out[3] = binary.LittleEndian.Uint32(key[12:])
+ out[4] = binary.LittleEndian.Uint32(key[16:])
+ out[5] = binary.LittleEndian.Uint32(key[20:])
+ out[6] = binary.LittleEndian.Uint32(key[24:])
+ out[7] = binary.LittleEndian.Uint32(key[28:])
+}