diff options
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/ansi_cprng.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c index 72db0fd763cc..486aa93646f7 100644 --- a/crypto/ansi_cprng.c +++ b/crypto/ansi_cprng.c | |||
@@ -349,15 +349,25 @@ static int cprng_get_random(struct crypto_rng *tfm, u8 *rdata, | |||
349 | return get_prng_bytes(rdata, dlen, prng); | 349 | return get_prng_bytes(rdata, dlen, prng); |
350 | } | 350 | } |
351 | 351 | ||
352 | /* | ||
353 | * This is the cprng_registered reset method the seed value is | ||
354 | * interpreted as the tuple { V KEY DT} | ||
355 | * V and KEY are required during reset, and DT is optional, detected | ||
356 | * as being present by testing the length of the seed | ||
357 | */ | ||
352 | static int cprng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen) | 358 | static int cprng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen) |
353 | { | 359 | { |
354 | struct prng_context *prng = crypto_rng_ctx(tfm); | 360 | struct prng_context *prng = crypto_rng_ctx(tfm); |
355 | u8 *key = seed + DEFAULT_PRNG_KSZ; | 361 | u8 *key = seed + DEFAULT_BLK_SZ; |
362 | u8 *dt = NULL; | ||
356 | 363 | ||
357 | if (slen < DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ) | 364 | if (slen < DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ) |
358 | return -EINVAL; | 365 | return -EINVAL; |
359 | 366 | ||
360 | reset_prng_context(prng, key, DEFAULT_PRNG_KSZ, seed, NULL); | 367 | if (slen >= (2 * DEFAULT_BLK_SZ + DEFAULT_PRNG_KSZ)) |
368 | dt = key + DEFAULT_PRNG_KSZ; | ||
369 | |||
370 | reset_prng_context(prng, key, DEFAULT_PRNG_KSZ, seed, dt); | ||
361 | 371 | ||
362 | if (prng->flags & PRNG_NEED_RESET) | 372 | if (prng->flags & PRNG_NEED_RESET) |
363 | return -EINVAL; | 373 | return -EINVAL; |
@@ -379,7 +389,7 @@ static struct crypto_alg rng_alg = { | |||
379 | .rng = { | 389 | .rng = { |
380 | .rng_make_random = cprng_get_random, | 390 | .rng_make_random = cprng_get_random, |
381 | .rng_reset = cprng_reset, | 391 | .rng_reset = cprng_reset, |
382 | .seedsize = DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ, | 392 | .seedsize = DEFAULT_PRNG_KSZ + 2*DEFAULT_BLK_SZ, |
383 | } | 393 | } |
384 | } | 394 | } |
385 | }; | 395 | }; |