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

pt.tecnico.dsi.ldap.security.provider.AES256CounterSecureRNG.scala Maven / Gradle / Ivy

The newest version!
/**
  * Copyright (C) 2009-2016 Lightbend Inc. 
  */
package pt.tecnico.dsi.ldap.security.provider

import org.uncommons.maths.random.{AESCounterRNG, SecureRandomSeedGenerator}
import SeedSize.seed256

/**
  * INTERNAL API
  * This class is a wrapper around the 256-bit AESCounterRNG algorithm provided by http://maths.uncommons.org/
  * The only method used by netty ssl is engineNextBytes(bytes)
  * This RNG is good to use to prevent startup delay when you don't have Internet access to random.org
  */
class AES256CounterSecureRNG extends java.security.SecureRandomSpi {
  /** Singleton instance. */
  private final val instance: SecureRandomSeedGenerator = new SecureRandomSeedGenerator

  private val rng = new AESCounterRNG(engineGenerateSeed(seed256))

  /**
    * This is managed internally by AESCounterRNG
    */
  override protected def engineSetSeed(seed: Array[Byte]): Unit = ()

  /**
    * Generates a user-specified number of random bytes.
    *
    * @param bytes the array to be filled in with random bytes.
    */
  override protected def engineNextBytes(bytes: Array[Byte]): Unit = rng.nextBytes(bytes)

  /**
    * Unused method
    * Returns the given number of seed bytes.  This call may be used to
    * seed other random number generators.
    *
    * @param numBytes the number of seed bytes to generate.
    * @return the seed bytes.
    */
  override protected def engineGenerateSeed(numBytes: Int): Array[Byte] = instance.generateSeed(numBytes)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy