diff --git a/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala b/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala index 284178773c..9944f3d6d4 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala +++ b/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala @@ -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 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala b/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala index c3d4ab8922..87c376b7b3 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala +++ b/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala @@ -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 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala b/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala index 8a6f68b49d..4c7de74990 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala +++ b/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala @@ -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 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala b/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala index 3a9b3a69a0..eadf0a36b0 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala +++ b/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala @@ -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 diff --git a/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala b/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala index 1de56266af..10aed7d3df 100644 --- a/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala +++ b/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala @@ -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.") } } diff --git a/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala b/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala index 0e7ea3a70d..1453c8d2fa 100644 --- a/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala +++ b/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala @@ -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 +}