diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/RandomIdManager.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/RandomIdManager.kt new file mode 100644 index 0000000000000000000000000000000000000000..15bcaa4cbe95d1e6b928c22f21892a53f2b46b8f --- /dev/null +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/RandomIdManager.kt @@ -0,0 +1,29 @@ +package org.briarproject.mailbox.core.system + +import java.security.SecureRandom +import javax.inject.Inject + +private const val ID_SIZE = 32 +private const val ID_HEX_SIZE = ID_SIZE * 2 + +class RandomIdManager @Inject constructor() { + + private val secureRandom = SecureRandom() + private val idRegex = Regex("[a-f0-9]{64}") + + fun getNewRandomId(): String { + val idBytes = ByteArray(ID_SIZE) + secureRandom.nextBytes(idBytes) + return idBytes.toHex() + } + + fun isValidRandomId(id: String): Boolean { + if (id.length != ID_HEX_SIZE) return false + return idRegex.matches(id) + } + +} + +fun ByteArray.toHex(): String = joinToString(separator = "") { eachByte -> + "%02x".format(eachByte) +} diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/system/RandomIdManagerTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/system/RandomIdManagerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..8542cfcf411bc4da3bb9566a366f50bc8131f9a0 --- /dev/null +++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/system/RandomIdManagerTest.kt @@ -0,0 +1,20 @@ +package org.briarproject.mailbox.core.system + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class RandomIdManagerTest { + + private val randomIdManager = RandomIdManager() + + @Test + fun `generated IDs are considered valid`() { + for (i in 0..23) { + val id = randomIdManager.getNewRandomId() + assertEquals(64, id.length) + assertTrue(randomIdManager.isValidRandomId(id)) + } + } + +}