Lines Matching +full:sha +full:- +full:512

1 // SPDX-License-Identifier: GPL-2.0
42 MODULE_PARM_DESC(prng_mode, "PRNG mode: 0 - auto, 1 - TDES, 2 - SHA512");
68 * of course, in a state of sin. -- John von Neumann
120 * the random bytes given back is assumed to have at least 50% - meaning
126 * at least 512 stckf() values are needed. The entropy relevant part of the
156 return -ENOMEM; in generate_entropy()
163 /* exor upper 2k with 512 stckf values, offset 4 bytes each */ in generate_entropy()
164 for (n = 0; n < 512; n++) { in generate_entropy()
165 int offset = (PAGE_SIZE / 2) + (n * 4) - 4; in generate_entropy()
175 nbytes -= n; in generate_entropy()
193 cpacf_kmc(CPACF_KMC_PRNG, prng_data->prngws.parm_block, in prng_tdes_add_entropy()
196 memcpy(prng_data->prngws.parm_block, entropy, sizeof(entropy)); in prng_tdes_add_entropy()
212 *((__u64 *)prng_data->prngws.parm_block) ^= *((__u64 *)(buf+i)); in prng_tdes_seed()
215 nbytes -= 8; in prng_tdes_seed()
218 prng_data->prngws.reseed_counter = 0; in prng_tdes_seed()
235 return -ENOMEM; in prng_tdes_instantiate()
237 mutex_init(&prng_data->mutex); in prng_tdes_instantiate()
238 prng_data->buf = ((u8 *)prng_data) + sizeof(struct prng_data_s); in prng_tdes_instantiate()
239 memcpy(prng_data->prngws.parm_block, initial_parm_block, 32); in prng_tdes_instantiate()
260 /* NIST DRBG testvector for Hash Drbg, Sha-512, Count #0 */ in prng_sha512_selftest()
345 "for the SHA-512 mode failed\n"); in prng_sha512_selftest()
347 return -EIO; in prng_sha512_selftest()
359 "for the SHA-512 mode failed\n"); in prng_sha512_selftest()
361 return -EIO; in prng_sha512_selftest()
373 pr_debug("prng runs in SHA-512 mode " in prng_sha512_instantiate()
384 return -ENOMEM; in prng_sha512_instantiate()
386 mutex_init(&prng_data->mutex); in prng_sha512_instantiate()
387 prng_data->buf = ((u8 *)prng_data) + sizeof(struct prng_data_s); in prng_sha512_instantiate()
399 * which gives us 512 bits entropy. in prng_sha512_instantiate()
407 * 50% entropy. So we pull 2*64 bytes which gives us 512 bits in prng_sha512_instantiate()
422 &prng_data->prnows, NULL, 0, seed, seedlen); in prng_sha512_instantiate()
426 bytes for the FIPS 140-2 Conditional Self Test */ in prng_sha512_instantiate()
428 prng_data->prev = prng_data->buf + prng_chunk_size; in prng_sha512_instantiate()
430 &prng_data->prnows, in prng_sha512_instantiate()
431 prng_data->prev, prng_chunk_size, NULL, 0); in prng_sha512_instantiate()
444 pr_debug("The prng module stopped after running in SHA-512 mode\n"); in prng_sha512_deinstantiate()
469 &prng_data->prnows, NULL, 0, seed, seedlen); in prng_sha512_reseed()
481 if (prng_data->prnows.reseed_counter > prng_reseed_limit) { in prng_sha512_generate()
489 &prng_data->prnows, buf, nbytes, NULL, 0); in prng_sha512_generate()
491 /* FIPS 140-2 Conditional Self Test */ in prng_sha512_generate()
493 if (!memcmp(prng_data->prev, buf, nbytes)) { in prng_sha512_generate()
495 return -EILSEQ; in prng_sha512_generate()
497 memcpy(prng_data->prev, buf, nbytes); in prng_sha512_generate()
518 if (mutex_lock_interruptible(&prng_data->mutex)) in prng_tdes_read()
519 return -ERESTARTSYS; in prng_tdes_read()
525 ret = -ERESTARTSYS; in prng_tdes_read()
529 mutex_unlock(&prng_data->mutex); in prng_tdes_read()
532 if (mutex_lock_interruptible(&prng_data->mutex)) { in prng_tdes_read()
534 ret = -ERESTARTSYS; in prng_tdes_read()
546 n = (chunk + 7) & -8; in prng_tdes_read()
548 if (prng_data->prngws.reseed_counter > prng_reseed_limit) in prng_tdes_read()
552 *((unsigned long long *)prng_data->buf) = get_tod_clock_fast(); in prng_tdes_read()
555 * Beside the STCKF the input for the TDES-EDE is the output in prng_tdes_read()
567 cpacf_kmc(CPACF_KMC_PRNG, prng_data->prngws.parm_block, in prng_tdes_read()
568 prng_data->buf, prng_data->buf, n); in prng_tdes_read()
570 prng_data->prngws.byte_counter += n; in prng_tdes_read()
571 prng_data->prngws.reseed_counter += n; in prng_tdes_read()
573 if (copy_to_user(ubuf, prng_data->buf, chunk)) { in prng_tdes_read()
574 ret = -EFAULT; in prng_tdes_read()
578 nbytes -= chunk; in prng_tdes_read()
584 mutex_unlock(&prng_data->mutex); in prng_tdes_read()
598 return -EPIPE; in prng_sha512_read()
601 if (mutex_lock_interruptible(&prng_data->mutex)) in prng_sha512_read()
602 return -ERESTARTSYS; in prng_sha512_read()
608 ret = -ERESTARTSYS; in prng_sha512_read()
612 mutex_unlock(&prng_data->mutex); in prng_sha512_read()
615 if (mutex_lock_interruptible(&prng_data->mutex)) { in prng_sha512_read()
617 ret = -ERESTARTSYS; in prng_sha512_read()
621 if (prng_data->rest) { in prng_sha512_read()
623 p = prng_data->buf + prng_chunk_size - prng_data->rest; in prng_sha512_read()
624 n = (nbytes < prng_data->rest) ? in prng_sha512_read()
625 nbytes : prng_data->rest; in prng_sha512_read()
626 prng_data->rest -= n; in prng_sha512_read()
629 p = prng_data->buf; in prng_sha512_read()
637 prng_data->rest = prng_chunk_size - n; in prng_sha512_read()
640 prng_data->rest = 0; in prng_sha512_read()
644 ret = -EFAULT; in prng_sha512_read()
649 nbytes -= n; in prng_sha512_read()
654 mutex_unlock(&prng_data->mutex); in prng_sha512_read()
693 if (mutex_lock_interruptible(&prng_data->mutex)) in prng_counter_show()
694 return -ERESTARTSYS; in prng_counter_show()
696 counter = prng_data->prnows.stream_bytes; in prng_counter_show()
698 counter = prng_data->prngws.byte_counter; in prng_counter_show()
699 mutex_unlock(&prng_data->mutex); in prng_counter_show()
731 if (mutex_lock_interruptible(&prng_data->mutex)) in prng_reseed_store()
732 return -ERESTARTSYS; in prng_reseed_store()
734 mutex_unlock(&prng_data->mutex); in prng_reseed_store()
754 return -EINVAL; in prng_reseed_limit_store()
758 return -EINVAL; in prng_reseed_limit_store()
761 return -EINVAL; in prng_reseed_limit_store()
825 return -ENODEV; in prng_init()
837 "start in SHA-512 mode\n"); in prng_init()
838 return -ENODEV; in prng_init()
851 return -EINVAL; in prng_init()
857 return -EINVAL; in prng_init()
875 return -EINVAL; in prng_init()
881 return -EINVAL; in prng_init()