anchor.diff:          uniform_n => fun ?MODULE:rand_plugin_uniform/2},
        no_seed};
   rand_seed_alg_s(crypto_cache) ->
  +    CacheBits = ?CRYPTO_CACHE_BITS,
       EnvCacheSize =
           application:get_env(
  -          crypto, rand_cache_size,
  -          ?CRYPTO_CACHE_BITS * 16), % Cache 16 * 8 words
  -    Bytes = (?CRYPTO_CACHE_BITS + 7) div 8,
  +          crypto, rand_cache_size, CacheBits * 16), % Cache 16 * 8 words
  +    Bytes = (CacheBits + 7) div 8,
       CacheSize =
           case ((EnvCacheSize + (Bytes - 1)) div Bytes) * Bytes of
               Sz when is_integer(Sz), Bytes =< Sz ->
  
positive.code: rand_plugin_uniform(Max, State) ->
      {bytes_to_integer(strong_rand_range(Max)) + 1, State}.
  
  -dialyzer({no_improper_lists, rand_cache_plugin_next/1}).
  rand_cache_plugin_next([CacheSize|<<>>]) ->
      rand_cache_plugin_next([CacheSize|strong_rand_bytes(CacheSize)]);
  rand_cache_plugin_next([CacheSize|<<I:?CRYPTO_CACHE_BITS,Cache/binary>>]) ->
      {I, [CacheSize|Cache]}.
  
  strong_rand_range(Range) when is_integer(Range), Range > 0 ->
      BinRange = int_to_bin(Range),
  
negative.code: rand_seed_s() ->
      rand_seed_alg_s(?MODULE).
  
  rand_seed_alg(Alg) ->
      rand:seed(rand_seed_alg_s(Alg)).
  
  -define(CRYPTO_CACHE_BITS, 56).
  rand_seed_alg_s(?MODULE) ->
      {#{ type => ?MODULE,
          bits => 64,
  