aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/@exodus/bytes/fallback/base58check.js
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
commit76cb9c2a39d477a64824a985ade40507e3bbade1 (patch)
tree41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/@exodus/bytes/fallback/base58check.js
parent819a39a21ac992b1393244a4c283bbb125208c69 (diff)
downloadneko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/@exodus/bytes/fallback/base58check.js')
-rw-r--r--vanilla/node_modules/@exodus/bytes/fallback/base58check.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/vanilla/node_modules/@exodus/bytes/fallback/base58check.js b/vanilla/node_modules/@exodus/bytes/fallback/base58check.js
new file mode 100644
index 0000000..f4ec8cc
--- /dev/null
+++ b/vanilla/node_modules/@exodus/bytes/fallback/base58check.js
@@ -0,0 +1,53 @@
+import { typedView } from '@exodus/bytes/array.js'
+import { toBase58, fromBase58 } from '@exodus/bytes/base58.js'
+import { assertU8 } from './_utils.js'
+
+const E_CHECKSUM = 'Invalid checksum'
+
+// checksum length is 4, i.e. only the first 4 bytes of the hash are used
+
+function encodeWithChecksum(arr, checksum) {
+ // arr type in already validated in input
+ const res = new Uint8Array(arr.length + 4)
+ res.set(arr, 0)
+ res.set(checksum.subarray(0, 4), arr.length)
+ return toBase58(res)
+}
+
+function decodeWithChecksum(str) {
+ const arr = fromBase58(str) // checks input
+ const payloadSize = arr.length - 4
+ if (payloadSize < 0) throw new Error(E_CHECKSUM)
+ return [arr.subarray(0, payloadSize), arr.subarray(payloadSize)]
+}
+
+function assertChecksum(c, r) {
+ if ((c[0] ^ r[0]) | (c[1] ^ r[1]) | (c[2] ^ r[2]) | (c[3] ^ r[3])) throw new Error(E_CHECKSUM)
+}
+
+export const makeBase58check = (hashAlgo, hashAlgoSync) => {
+ const apis = {
+ async encode(arr) {
+ assertU8(arr)
+ return encodeWithChecksum(arr, await hashAlgo(arr))
+ },
+ async decode(str, format = 'uint8') {
+ const [payload, checksum] = decodeWithChecksum(str)
+ assertChecksum(checksum, await hashAlgo(payload))
+ return typedView(payload, format)
+ },
+ }
+ if (!hashAlgoSync) return apis
+ return {
+ ...apis,
+ encodeSync(arr) {
+ assertU8(arr)
+ return encodeWithChecksum(arr, hashAlgoSync(arr))
+ },
+ decodeSync(str, format = 'uint8') {
+ const [payload, checksum] = decodeWithChecksum(str)
+ assertChecksum(checksum, hashAlgoSync(payload))
+ return typedView(payload, format)
+ },
+ }
+}