Skip to content

Commit

Permalink
KTOR-668 Add secure random providers for Windows (#3281)
Browse files Browse the repository at this point in the history
  • Loading branch information
Stexxe committed Dec 1, 2022
1 parent 931ccb3 commit d5d7872
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions ktor-utils/jvm/src/io/ktor/util/Nonce.kt
Expand Up @@ -11,8 +11,11 @@ import java.security.*

private const val SHA1PRNG = "SHA1PRNG"

private val SECURE_RANDOM_PROVIDER_NAME: String =
System.getProperty("io.ktor.random.secure.random.provider") ?: "NativePRNGNonBlocking"
private val SECURE_RANDOM_PROVIDERS: List<String> = listOf(
"NativePRNGNonBlocking",
"WINDOWS-PRNG",
"DRBG"
)

private const val SECURE_RESEED_PERIOD = 30_000

Expand Down Expand Up @@ -91,11 +94,16 @@ internal fun ensureNonceGeneratorRunning() {
}

private fun lookupSecureRandom(): SecureRandom {
val secure = getInstanceOrNull(SECURE_RANDOM_PROVIDER_NAME)
if (secure != null) return secure
System.getProperty("io.ktor.random.secure.random.provider")?.let { name ->
getInstanceOrNull(name)?.let { return it }
}

for (name in SECURE_RANDOM_PROVIDERS) {
getInstanceOrNull(name)?.let { return it }
}

LoggerFactory.getLogger("io.ktor.util.random")
.warn("$SECURE_RANDOM_PROVIDER_NAME is not found, fallback to default")
.warn("None of the ${SECURE_RANDOM_PROVIDERS.joinToString(separator = ", ")} found, fallback to default")

return getInstanceOrNull() ?: error("No SecureRandom implementation found")
}
Expand Down

0 comments on commit d5d7872

Please sign in to comment.