summaryrefslogtreecommitdiffstats
path: root/vendor/maunium.net/go/mautrix/util/base58/base58check.go
diff options
context:
space:
mode:
authormsglm <msglm@techchud.xyz>2023-10-27 07:08:25 -0500
committermsglm <msglm@techchud.xyz>2023-10-27 07:08:25 -0500
commit032a7e0c1188d3507b8d9a9571f2446a43cf775b (patch)
tree2bd38c01bc7761a6195e426082ce7191ebc765a1 /vendor/maunium.net/go/mautrix/util/base58/base58check.go
parent56e7bd01ca09ad52b0c4f48f146a20a4f1b78696 (diff)
downloadmatterbridge-msglm-1.26.0+0.1.0.tar.gz
matterbridge-msglm-1.26.0+0.1.0.tar.bz2
matterbridge-msglm-1.26.0+0.1.0.zip
apply https://github.com/42wim/matterbridge/pull/1864v1.26.0+0.1.0
Diffstat (limited to 'vendor/maunium.net/go/mautrix/util/base58/base58check.go')
-rw-r--r--vendor/maunium.net/go/mautrix/util/base58/base58check.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/maunium.net/go/mautrix/util/base58/base58check.go b/vendor/maunium.net/go/mautrix/util/base58/base58check.go
new file mode 100644
index 00000000..402c3233
--- /dev/null
+++ b/vendor/maunium.net/go/mautrix/util/base58/base58check.go
@@ -0,0 +1,52 @@
+// Copyright (c) 2013-2014 The btcsuite developers
+// Use of this source code is governed by an ISC
+// license that can be found in the LICENSE file.
+
+package base58
+
+import (
+ "crypto/sha256"
+ "errors"
+)
+
+// ErrChecksum indicates that the checksum of a check-encoded string does not verify against
+// the checksum.
+var ErrChecksum = errors.New("checksum error")
+
+// ErrInvalidFormat indicates that the check-encoded string has an invalid format.
+var ErrInvalidFormat = errors.New("invalid format: version and/or checksum bytes missing")
+
+// checksum: first four bytes of sha256^2
+func checksum(input []byte) (cksum [4]byte) {
+ h := sha256.Sum256(input)
+ h2 := sha256.Sum256(h[:])
+ copy(cksum[:], h2[:4])
+ return
+}
+
+// CheckEncode prepends a version byte and appends a four byte checksum.
+func CheckEncode(input []byte, version byte) string {
+ b := make([]byte, 0, 1+len(input)+4)
+ b = append(b, version)
+ b = append(b, input...)
+ cksum := checksum(b)
+ b = append(b, cksum[:]...)
+ return Encode(b)
+}
+
+// CheckDecode decodes a string that was encoded with CheckEncode and verifies the checksum.
+func CheckDecode(input string) (result []byte, version byte, err error) {
+ decoded := Decode(input)
+ if len(decoded) < 5 {
+ return nil, 0, ErrInvalidFormat
+ }
+ version = decoded[0]
+ var cksum [4]byte
+ copy(cksum[:], decoded[len(decoded)-4:])
+ if checksum(decoded[:len(decoded)-4]) != cksum {
+ return nil, 0, ErrChecksum
+ }
+ payload := decoded[1 : len(decoded)-4]
+ result = append(result, payload...)
+ return
+}