1 /* Title: Pure/General/sha1.scala
5 Digest strings according to SHA-1 (see RFC 3174).
11 import java.io.{File => JFile, FileInputStream}
12 import java.security.MessageDigest
17 sealed case class Digest(rep: String)
19 override def toString: String = rep
22 private def make_result(digest: MessageDigest): Digest =
24 val result = new StringBuilder
25 for (b <- digest.digest()) {
26 val i = b.asInstanceOf[Int] & 0xFF
27 if (i < 16) result += '0'
28 result ++= Integer.toHexString(i)
30 Digest(result.toString)
33 def digest(file: JFile): Digest =
35 val stream = new FileInputStream(file)
36 val digest = MessageDigest.getInstance("SHA")
38 val buf = new Array[Byte](65536)
42 m = stream.read(buf, 0, buf.length)
43 if (m != -1) digest.update(buf, 0, m)
46 finally { stream.close }
51 def digest(path: Path): Digest = digest(path.file)
53 def digest(bytes: Array[Byte]): Digest =
55 val digest = MessageDigest.getInstance("SHA")
61 def digest(string: String): Digest = digest(Standard_System.string_bytes(string))