Lines Matching refs:crng
468 static void _extract_crng(struct crng_state *crng, __u8 out[CHACHA_BLOCK_SIZE]);
469 static void _crng_backtrack_protect(struct crng_state *crng,
513 static void crng_reseed(struct crng_state *crng, struct entropy_store *r);
784 static bool crng_init_try_arch(struct crng_state *crng) in crng_init_try_arch() argument
796 crng->state[i] ^= rv; in crng_init_try_arch()
802 static bool __init crng_init_try_arch_early(struct crng_state *crng) in crng_init_try_arch_early() argument
814 crng->state[i] ^= rv; in crng_init_try_arch_early()
820 static void __maybe_unused crng_initialize_secondary(struct crng_state *crng) in crng_initialize_secondary() argument
822 memcpy(&crng->state[0], "expand 32-byte k", 16); in crng_initialize_secondary()
823 _get_random_bytes(&crng->state[4], sizeof(__u32) * 12); in crng_initialize_secondary()
824 crng_init_try_arch(crng); in crng_initialize_secondary()
825 crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1; in crng_initialize_secondary()
828 static void __init crng_initialize_primary(struct crng_state *crng) in crng_initialize_primary() argument
830 memcpy(&crng->state[0], "expand 32-byte k", 16); in crng_initialize_primary()
831 _extract_entropy(&input_pool, &crng->state[4], sizeof(__u32) * 12, 0); in crng_initialize_primary()
832 if (crng_init_try_arch_early(crng) && trust_cpu) { in crng_initialize_primary()
838 crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1; in crng_initialize_primary()
845 struct crng_state *crng; in do_numa_crng_init() local
850 crng = kmalloc_node(sizeof(struct crng_state), in do_numa_crng_init()
852 spin_lock_init(&crng->lock); in do_numa_crng_init()
853 crng_initialize_secondary(crng); in do_numa_crng_init()
854 pool[i] = crng; in do_numa_crng_init()
948 static void crng_reseed(struct crng_state *crng, struct entropy_store *r) in crng_reseed() argument
966 spin_lock_irqsave(&crng->lock, flags); in crng_reseed()
972 crng->state[i+4] ^= buf.key[i] ^ rv; in crng_reseed()
975 crng->init_time = jiffies; in crng_reseed()
976 spin_unlock_irqrestore(&crng->lock, flags); in crng_reseed()
977 if (crng == &primary_crng && crng_init < 2) { in crng_reseed()
998 static void _extract_crng(struct crng_state *crng, in _extract_crng() argument
1004 (time_after(crng_global_init_time, crng->init_time) || in _extract_crng()
1005 time_after(jiffies, crng->init_time + CRNG_RESEED_INTERVAL))) in _extract_crng()
1006 crng_reseed(crng, crng == &primary_crng ? &input_pool : NULL); in _extract_crng()
1007 spin_lock_irqsave(&crng->lock, flags); in _extract_crng()
1009 crng->state[14] ^= v; in _extract_crng()
1010 chacha20_block(&crng->state[0], out); in _extract_crng()
1011 if (crng->state[12] == 0) in _extract_crng()
1012 crng->state[13]++; in _extract_crng()
1013 spin_unlock_irqrestore(&crng->lock, flags); in _extract_crng()
1018 struct crng_state *crng = NULL; in extract_crng() local
1022 crng = crng_node_pool[numa_node_id()]; in extract_crng()
1023 if (crng == NULL) in extract_crng()
1025 crng = &primary_crng; in extract_crng()
1026 _extract_crng(crng, out); in extract_crng()
1033 static void _crng_backtrack_protect(struct crng_state *crng, in _crng_backtrack_protect() argument
1045 spin_lock_irqsave(&crng->lock, flags); in _crng_backtrack_protect()
1047 d = &crng->state[4]; in _crng_backtrack_protect()
1050 spin_unlock_irqrestore(&crng->lock, flags); in _crng_backtrack_protect()
1055 struct crng_state *crng = NULL; in crng_backtrack_protect() local
1059 crng = crng_node_pool[numa_node_id()]; in crng_backtrack_protect()
1060 if (crng == NULL) in crng_backtrack_protect()
1062 crng = &primary_crng; in crng_backtrack_protect()
1063 _crng_backtrack_protect(crng, tmp, used); in crng_backtrack_protect()