mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-10-26 16:16:16 +01:00
37 lines
883 B
Scala
37 lines
883 B
Scala
import java.security.MessageDigest
|
|
import scala.annotation._
|
|
import sbt._
|
|
import io._
|
|
|
|
object Checksums {
|
|
private val bufferSize = 2048
|
|
|
|
def generate(source: File, target: File, algorithm: String): Unit =
|
|
sbt.IO write (target, compute(source, algorithm))
|
|
|
|
def compute(file: File, algorithm: String): String =
|
|
hex(raw(file, algorithm))
|
|
|
|
def raw(file: File, algorithm: String): Array[Byte] =
|
|
(Using fileInputStream file) { is =>
|
|
val md = MessageDigest getInstance algorithm
|
|
val buf = new Array[Byte](bufferSize)
|
|
md.reset()
|
|
@tailrec
|
|
def loop(): Unit = {
|
|
val len = is read buf
|
|
if (len != -1) {
|
|
md update (buf, 0, len)
|
|
loop()
|
|
}
|
|
}
|
|
loop()
|
|
md.digest()
|
|
}
|
|
|
|
def hex(bytes: Array[Byte]): String =
|
|
bytes map { it =>
|
|
"%02x" format (it.toInt & 0xff)
|
|
} mkString ""
|
|
}
|