multibase
This project combines:
a Kotlin Multiplatform port of Protocol Labs' Kotlin/JVM multibase implementation, built with significant help from Matthew Nelson's awesome encoding library
a streamlined version of Erwin Kok's Kotlin unsigned varint implementation
This project includes the original Protocol Labs repository as a git submodule for its test vectors but does not incorporate any code from it in releases.
multi2–base runs on all KMP targets except watchosDeviceArm64 and supports the following multibase encodings:
BASE10
BASE16
BASE16_UPPER
BASE32
BASE32_UPPER
BASE32_PAD
BASE32_PAD_UPPER
BASE32_HEX
BASE32_HEX_UPPER
BASE32_HEX_PAD
BASE32_HEX_PAD_UPPER
BASE58_FLICKR
BASE58_BTC
BASE64
BASE64_URL
BASE64_PAD
BASE64_URL_PAD
Using in your Projects
This library is available on Maven Central.
Gradle
dependencies {
implementation("at.asitplus:multibase:$version")
}Note: This library exposes Matthew Nelson's Base64, Base32, and Base16 encoders as an API dependency!
API
Encode and decode multibase values with the extension functions:
val encoded = byteArray.multibaseEncode(MultiBase.Base.BASE58_BTC)
val decoded = encoded.multibaseDecode()For a custom alphabet and radix, use the Base-N extensions:
val encoded = byteArray.encodeBaseN(alphabet, radix)
val decoded = encoded.decodeBaseN(alphabet, radix)UVarInt supports values from 0 through 2^63 - 1:
val encoded = UVarInt(1337uL).encodeToByteArray()
val decoded = encoded.decodeAsUVarInt()
val (leading, endIndex) = bytes.decodeLeadingUVarInt(startIndex)decodeAsUVarInt requires the UVarInt to consume the rest of the array. decodeLeadingUVarInt instead returns the decoded value and the first index after it. The corresponding functions are UVarInt.fromByteArrayStrict and UVarInt.fromByteArrayPermissive; varIntDecode and UVarInt.fromByteArray are deprecated.
'Nuff said!
Contributing
External contributions are greatly appreciated! Just be sure to observe the contribution guidelines (see CONTRIBUTING.md).
The MIT license does not apply to the project logo and the A-SIT logo, as these are the sole property of A-SIT/A-SIT Plus GmbH and may not be used without explicit permission!
