view src/main/kotlin/name/blackcap/passman/Hashing.kt @ 12:a38a2a1036c3

Add import subcommand.
author David Barts <n5jrn@me.com>
date Sun, 22 Jan 2023 09:22:53 -0800
parents 698c4a3d758d
children
line wrap: on
line source

package name.blackcap.passman

import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.nio.CharBuffer
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import java.security.MessageDigest

object Hashing {
    private const val HASHING_ALGORITHM = "MD5"
    private val CHARSET: Charset = StandardCharsets.UTF_8

    fun hash(bytes: ByteBuffer): Long {
        val md = MessageDigest.getInstance(HASHING_ALGORITHM)
        bytes.rewind()
        md.update(bytes)
        return toLong(md.digest())
    }

    fun hash(bytes: ByteArray): Long =
        hash(ByteBuffer.wrap(bytes))

    fun hash(chars: CharArray): Long =
        hash(CHARSET.encode(CharBuffer.wrap(chars)))

    fun hash(string: String): Long =
        hash(CHARSET.encode(string))

    private fun toLong(hash: ByteArray): Long = ByteBuffer.wrap(hash).run {
        order(ByteOrder.LITTLE_ENDIAN)
        getLong(hash.size - 8)
    }
}