diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-05-06 13:56:16 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-05-08 23:02:39 -0700 |
commit | 8ecae787ff7124b008229d958c579c73649dd9e4 (patch) | |
tree | dad7bea34d9b7ea0f716a783f3b57de491ec959e /common/shared/src/main/scala/Message.scala | |
download | scala-triad-8ecae787ff7124b008229d958c579c73649dd9e4.tar.gz scala-triad-8ecae787ff7124b008229d958c579c73649dd9e4.tar.bz2 scala-triad-8ecae787ff7124b008229d958c579c73649dd9e4.zip |
Initial commit
Diffstat (limited to 'common/shared/src/main/scala/Message.scala')
-rw-r--r-- | common/shared/src/main/scala/Message.scala | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/common/shared/src/main/scala/Message.scala b/common/shared/src/main/scala/Message.scala new file mode 100644 index 0000000..7ee36cb --- /dev/null +++ b/common/shared/src/main/scala/Message.scala @@ -0,0 +1,39 @@ +package triad + +import java.security.MessageDigest +import java.time.Instant + +case class Message(content: String, + author: String, + timestamp: Instant = Instant.now()) { + + lazy val id: String = { + val digest = MessageDigest.getInstance("SHA-256") + digest.update(content.getBytes) + digest.update(author.getBytes) + digest.update((timestamp.getEpochSecond & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 8) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 16) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 24) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 32) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 40) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 48) & 0xff).toByte) + digest.update(((timestamp.getEpochSecond >> 56) & 0xff).toByte) + Message.bytesToHex(digest.digest()) + } + +} + +object Message { + private def bytesToHex(hash: Array[Byte]): String = { + val hexString = new StringBuffer(hash.length * 2) + var i = 0 + while (i < hash.length) { + val hex = Integer.toHexString(0xff & hash(i)) + if (hex.length == 1) hexString.append('0') + hexString.append(hex) + i += 1 + } + hexString.toString + } +} |