Skip to content

Conversation

@ChALkeR
Copy link
Contributor

@ChALkeR ChALkeR commented Oct 9, 2025

Caution

Not ready to merge
This is just a concept demo

that said, this approach faster and cleaner

won't be able to convert large bases though

also, Hermes (React Native) doesn't have TextDecoder, and other barebone engines don't have TextEncoder or TextDecoder

you rely on them in utf8 though, so all that could be solved by including a proper utf8 coder impl here if compat is wanted

before:

base64 (encode) 32 B scure x 787,401 ops/sec @ 1μs/op ± 1.23% (1μs..4ms)
base64 (decode) 32 B scure x 1,392,757 ops/sec @ 718ns/op ± 2.12% (583ns..9ms)
base64 (encode) 64 B scure x 431,965 ops/sec @ 2μs/op
base64 (decode) 64 B scure x 809,061 ops/sec @ 1μs/op
base64 (encode) 1 KB scure x 29,978 ops/sec @ 33μs/op
base64 (decode) 1 KB scure x 54,475 ops/sec @ 18μs/op
base64 (encode) 8 KB scure x 3,393 ops/sec @ 294μs/op ± 3.96% (267μs..19ms)
base64 (decode) 8 KB scure x 6,968 ops/sec @ 143μs/op ± 7.66% (129μs..38ms)
base64 (encode) 1 MB scure x 16 ops/sec @ 60ms/op ± 4.17% (55ms..74ms)
base64 (decode) 1 MB scure x 26 ops/sec @ 37ms/op ± 4.18% (34ms..44ms)

after:

base64 (encode) 32 B scure x 1,567,398 ops/sec @ 638ns/op ± 1.82% (458ns..4ms)
base64 (decode) 32 B scure x 1,398,601 ops/sec @ 715ns/op ± 1.40% (583ns..2ms)
base64 (encode) 64 B scure x 918,273 ops/sec @ 1μs/op ± 1.62% (916ns..2ms)
base64 (decode) 64 B scure x 860,585 ops/sec @ 1μs/op ± 1.41% (958ns..1ms)
base64 (encode) 1 KB scure x 91,441 ops/sec @ 10μs/op
base64 (decode) 1 KB scure x 89,102 ops/sec @ 11μs/op
base64 (encode) 8 KB scure x 11,829 ops/sec @ 84μs/op
base64 (decode) 8 KB scure x 11,546 ops/sec @ 86μs/op
base64 (encode) 1 MB scure x 92 ops/sec @ 10ms/op
base64 (decode) 1 MB scure x 90 ops/sec @ 10ms/op

also this won't fail on ~ 50 MiB input like the current approach does because of maximum Array (but not Uint8Array) length

@ChALkeR ChALkeR changed the title poc: uint8array-based encoding poc: uint8array-based encoding (concept) Oct 9, 2025
@ChALkeR ChALkeR marked this pull request as draft October 9, 2025 20:05
@paulmillr
Copy link
Owner

paulmillr commented Oct 14, 2025

you rely on them in utf8 though

yes, however, it's not a hard dependency: a user may skip utf8 and arguably most of them do skip it, and only use scure-base for base32, base64, bech32, base58

@ChALkeR
Copy link
Contributor Author

ChALkeR commented Oct 14, 2025

This was just a demo
#50 / #51 are actual PRs with diffs instead of just copying in changed code

@ChALkeR ChALkeR closed this Oct 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants