blob: 337d925d8fbb463d189d37c534f9bb3e18b1283a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package xyz.driver.pdsuicommon.domain
import java.nio.charset.Charset
import org.mindrot.jbcrypt.BCrypt
final case class PasswordHash(value: Array[Byte]) {
lazy val hashString: String = new String(value, Charset.forName("UTF-8"))
override def toString: String = {
s"${this.getClass.getSimpleName}($hashString)"
}
override def equals(that: Any): Boolean = {
that match {
case thatHash: PasswordHash => java.util.Arrays.equals(this.value, thatHash.value)
case _ => false
}
}
override def hashCode(): Int =
42 + java.util.Arrays.hashCode(this.value)
def is(password: String): Boolean =
BCrypt.checkpw(password, hashString)
}
object PasswordHash {
def apply(password: String): PasswordHash =
new PasswordHash(getHash(password))
private def getHash(str: String): Array[Byte] =
BCrypt.hashpw(str, BCrypt.gensalt()).getBytes(Charset.forName("UTF-8"))
}
|