Skip to content

Instantly share code, notes, and snippets.

@steimntz
Created August 29, 2019 16:12
Show Gist options
  • Save steimntz/b3625d2bc46738258669c87ea03957fc to your computer and use it in GitHub Desktop.
Save steimntz/b3625d2bc46738258669c87ea03957fc to your computer and use it in GitHub Desktop.
Declarative Kotlin SHA-512 Checksum
import java.security.MessageDigest
/**
* This code is based on https://medium.com/rayn-studios/generating-sha-512-checksum-of-a-file-in-android-42ae135b0a52
* https://gist.github.com/rajat1saxena/738da60a88413a8c5b0bb8f41e31e796
* https://gist.github.com/rajat1saxena/ddd6301fd6564954e204eed23dcce2f4
*/
class Checksum(private val data: ByteArray) {
private val algorithm = "SHA-512"
private fun generateChecksum(): String {
val digest = MessageDigest.getInstance(algorithm)
return printableHexString(digest.digest(data))
}
private fun printableHexString(digestedHash: ByteArray): String {
return digestedHash.map { Integer.toHexString(0xFF and it.toInt()) }
.map { if (it.length < 2) "0$it" else it }
.fold("", { acc, d -> acc + d })
}
override fun toString(): String {
return generateChecksum()
}
}
@gsteen
Copy link

gsteen commented Jan 7, 2023

private fun printableHexString(digestedHash: ByteArray) =
    digestedHash.asUByteArray().joinToString(separator = "") { it.toString(16).padStart(2, '0') }

or

private fun ByteArray.printableHexString() = 
    asUByteArray().joinToString(separator = "") { it.toString(16).padStart(2, '0') }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment