RuneHive-Game
Loading...
Searching...
No Matches
Argon2.kt
Go to the documentation of this file.
1package org.jire.runehiveps
2
3import de.mkammerer.argon2.Argon2
4import de.mkammerer.argon2.Argon2Factory
5import de.mkammerer.argon2.Argon2Factory.Argon2Types
6
7/**
8 * @author Jire
9 */
10object Argon2 {
11
12 @JvmField
13 val DEFAULT_TYPE: Argon2Types = Argon2Types.ARGON2id
14
15 const val DEFAULT_ITERATIONS = 2
16 const val DEFAULT_MEMORY = 65536
17 @JvmField
18 val DEFAULT_PARALLELISM = Runtime.getRuntime().availableProcessors()
19
20 private val threadLocal2i = ThreadLocal.withInitial {
21 Argon2Factory.create(Argon2Types.ARGON2i)
22 }
23
24 private val threadLocal2d = ThreadLocal.withInitial {
25 Argon2Factory.create(Argon2Types.ARGON2d)
26 }
27
28 private val threadLocal2id = ThreadLocal.withInitial {
29 Argon2Factory.create(Argon2Types.ARGON2id)
30 }
31
32 @JvmStatic
33 fun get2i(): Argon2 = threadLocal2i.get()
34
35 @JvmStatic
36 fun get2d(): Argon2 = threadLocal2d.get()
37
38 @JvmStatic
39 fun get2id(): Argon2 = threadLocal2id.get()
40
41 @JvmStatic
42 fun forType(argon2Types: Argon2Types) = when (argon2Types) {
43 Argon2Types.ARGON2d -> get2d()
44 Argon2Types.ARGON2i -> get2i()
45 Argon2Types.ARGON2id -> get2id()
46 else -> throw UnsupportedOperationException()
47 }
48
49 @JvmStatic
50 fun getDefault(): Argon2 = forType(DEFAULT_TYPE)
51
52 @JvmStatic
53 fun argon2Type(password: String): Argon2Types? = when {
54 password.startsWith("\$argon2id\$") -> Argon2Types.ARGON2id
55 password.startsWith("\$argon2i\$") -> Argon2Types.ARGON2i
56 password.startsWith("\$argon2d\$") -> Argon2Types.ARGON2d
57 else -> null
58 }
59
60 @JvmStatic
61 fun forHash(hash: String) = forType(
62 argon2Type(hash) ?: throw UnsupportedOperationException("Could not determine type for hash \"$hash\"")
63 )
64
65}