Cryptographic hash functions for Kotlin Multiplatform
Utilized by KotlinCrypto/MACs
See HERE for basic usage example for Digest
.
fun main() {
// Digests that may be needed for backward compatibility but
// should no longer be utilized because they have been broken.
MD5()
SHA1()
}
SHA2 Digests
fun main() {
SHA224()
SHA256()
SHA384()
SHA512()
SHA512_224()
SHA512_256()
SHA512t(504)
}
SHA3 Digests
fun main() {
Keccak224()
Keccak256()
Keccak384()
Keccak512()
SHA3_224()
SHA3_256()
SHA3_384()
SHA3_512()
SHAKE128()
SHAKE256(outputLength = 640) // returns 640 bytes instead of the default when digest() is invoked
// NIST.SP.800-185 derived functions
val S = "My Customization".encodeToByteArray()
CSHAKE128(null, S, outputLength = 128)
CSHAKE256(null, S)
ParallelHash128(null, B = 123)
ParallelHash256(S, B = 456, outputLength = 123)
TupleHash128(S, outputLength = 320)
TupleHash256(null)
}
SHA3 XOFs
(i.e. Extendable-Output Functions)
See HERE for details on what XOFs
are, and a basic usage example for Xof
.
fun main() {
SHAKE128.xOf()
SHAKE256.xOf()
// NIST.SP.800-185 derived functions
val S = "My Customization".encodeToByteArray()
CSHAKE128.xOf(null, S)
CSHAKE256.xOf(null, S)
ParallelHash128.xOf(S, B = 123)
ParallelHash256.xOf(B = 654)
TupleHash128.xOf(S)
TupleHash256.xOf()
}
The best way to keep KotlinCrypto
dependencies up to date is by using the
version-catalog. Alternatively, you can use the BOM as
shown below.
// build.gradle.kts
dependencies {
// define the BOM and its version
implementation(platform("org.kotlincrypto.hash:bom:0.5.3"))
// define artifacts without version
// MD5
implementation("org.kotlincrypto.hash:md")
// SHA-1
implementation("org.kotlincrypto.hash:sha1")
// SHA-224, SHA-256, SHA-384, SHA-512
// SHA-512/t, SHA-512/224, SHA-512/256
implementation("org.kotlincrypto.hash:sha2")
// Keccak-224, Keccak-256, Keccak-384, Keccak-512
// SHA3-224, SHA3-256, SHA3-384, SHA3-512
// SHAKE128, SHAKE256
// CSHAKE128, CSHAKE256
// ParallelHash128, ParallelHash256
// TupleHash128, TupleHash256
implementation("org.kotlincrypto.hash:sha3")
}