fixed dangling exception, reusing code, removed DevRandomSeedGenerator

This commit is contained in:
Peter Badenhorst 2012-07-03 10:43:57 +02:00
parent 04a53b0865
commit b9ce4e04de
6 changed files with 16 additions and 11 deletions

View file

@ -4,6 +4,7 @@
package akka.security.provider
import org.uncommons.maths.random.{ AESCounterRNG }
import SeedSize.Seed128
/**
* Internal API
@ -13,7 +14,7 @@ import org.uncommons.maths.random.{ AESCounterRNG }
* The only method used by netty ssl is engineNextBytes(bytes)
*/
class AES128CounterInetRNG extends java.security.SecureRandomSpi {
private val rng = new AESCounterRNG(InternetSeedGenerator.getInstance.generateSeed(Seed128.size))
private val rng = new AESCounterRNG(engineGenerateSeed(Seed128))
/**
* This is managed internally by AESCounterRNG

View file

@ -4,6 +4,7 @@
package akka.security.provider
import org.uncommons.maths.random.{ AESCounterRNG, SecureRandomSeedGenerator }
import SeedSize.Seed128
/**
* Internal API
@ -18,7 +19,7 @@ class AES128CounterSecureRNG extends java.security.SecureRandomSpi {
/**
* Make sure the seed generator is provided by a SecureRandom singleton and not default 'Random'
*/
private val rng = new AESCounterRNG(INSTANCE.generateSeed(Seed128.size))
private val rng = new AESCounterRNG(engineGenerateSeed(Seed128))
/**
* This is managed internally by AESCounterRNG

View file

@ -4,6 +4,7 @@
package akka.security.provider
import org.uncommons.maths.random.{ AESCounterRNG }
import SeedSize.Seed256
/**
* Internal API
@ -13,7 +14,7 @@ import org.uncommons.maths.random.{ AESCounterRNG }
* The only method used by netty ssl is engineNextBytes(bytes)
*/
class AES256CounterInetRNG extends java.security.SecureRandomSpi {
private val rng = new AESCounterRNG(InternetSeedGenerator.getInstance.generateSeed(Seed256.size))
private val rng = new AESCounterRNG(engineGenerateSeed(Seed256))
/**
* This is managed internally by AESCounterRNG

View file

@ -4,6 +4,7 @@
package akka.security.provider
import org.uncommons.maths.random.{ AESCounterRNG, SecureRandomSeedGenerator }
import SeedSize.Seed256
/**
* Internal API
@ -15,7 +16,7 @@ class AES256CounterSecureRNG extends java.security.SecureRandomSpi {
/**Singleton instance. */
private final val INSTANCE: SecureRandomSeedGenerator = new SecureRandomSeedGenerator
private val rng = new AESCounterRNG(INSTANCE.generateSeed(Seed256.size))
private val rng = new AESCounterRNG(engineGenerateSeed(Seed256))
/**
* This is managed internally by AESCounterRNG

View file

@ -37,10 +37,8 @@ object InternetSeedGenerator {
/**Delegate generators. */
private final val GENERATORS: Seq[SeedGenerator] =
new RandomDotOrgSeedGenerator :: // first try the Internet seed generator
new DevRandomSeedGenerator :: // try the local /dev/random
new SecureRandomSeedGenerator :: // this is last because it always works
Nil
}
final class InternetSeedGenerator extends SeedGenerator {
@ -55,11 +53,13 @@ final class InternetSeedGenerator extends SeedGenerator {
def generateSeed(length: Int): Array[Byte] = {
for (generator InternetSeedGenerator.GENERATORS) {
try {
generator.generateSeed(length)
return generator.generateSeed(length)
} catch {
case ex: SeedException // Ignore and try the next generator...
}
}
// This shouldn't happen as at least one of the generators should be
// able to generate a seed.
throw new IllegalStateException("All available seed generation strategies failed.")
}
}

View file

@ -10,8 +10,9 @@ package akka.security.provider
* Valid values are 16 (128 bits), 24 (192 bits) and 32 (256 bits).
* Any other values will result in an exception from the AES implementation.
*/
sealed trait SeedSize { def size: Int }
case object Seed128 extends SeedSize { val size = 16 }
case object Seed192 extends SeedSize { val size = 24 }
case object Seed256 extends SeedSize { val size = 32 }
object SeedSize {
val Seed128 = 16
val Seed192 = 24
val Seed256 = 32
}