fixed dangling exception, reusing code, removed DevRandomSeedGenerator
This commit is contained in:
parent
04a53b0865
commit
b9ce4e04de
6 changed files with 16 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue