All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tsec.common.ManagedRandom.scala Maven / Gradle / Ivy

The newest version!
package tsec.common

import java.security.SecureRandom

/** A trait that manages a secureRandom instance.
  */
trait ManagedRandom {

  /** Cache our random, and seed it properly as per
    * [[https://tersesystems.com/2015/12/17/the-right-way-to-use-securerandom/]]
    */
  private[tsec] val cachedRand: SecureRandom = {
    val r =
      SecureRandom.getInstance(if (scala.util.Properties.isWin) ManagedRandom.WinRandom else ManagedRandom.UnixURandom)
    r.nextBytes(new Array[Byte](20)) //Force reseed
    r
  }

  def nextBytes(bytes: Array[Byte]): Unit =
    cachedRand.nextBytes(bytes)
}

object ManagedRandom {
  private[ManagedRandom] val WinRandom   = "Windows-PRNG"
  private[ManagedRandom] val UnixURandom = "NativePRNGNonBlocking"
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy