view src/main/kotlin/name/blackcap/passman/Hashing.kt @ 28:287eadf5ab30 default tip

Check for timeouts inside subcommands while in interactive mode as well.
author David Barts <n5jrn@me.com>
date Wed, 31 Jul 2024 11:21:18 -0700
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)
    }
}