anchor.diff:  -export([hmac/3, hmac/4, hmac_init/2, hmac_update/2, hmac_final/1, hmac_final_n/2]).
   -export([cmac/3, cmac/4]).
   -export([exor/2, strong_rand_bytes/1, mod_pow/3]).
  --export([rand_seed/0]).
  --export([rand_seed_s/0]).
  +-export([rand_seed/0, rand_seed_alg/1]).
  +-export([rand_seed_s/0, rand_seed_alg_s/1]).
   -export([rand_plugin_next/1]).
   -export([rand_plugin_uniform/1]).
   -export([rand_plugin_uniform/2]).
  +-export([rand_cache_plugin_next/1]).
   -export([rand_uniform/2]).
   -export([block_encrypt/3, block_decrypt/3, block_encrypt/4, block_decrypt/4]).
   -export([next_iv/2, next_iv/3]).
  
positive.code: rand_plugin_uniform(Max, State) ->
      {bytes_to_integer(strong_rand_range(Max)) + 1, State}.
  
  
  strong_rand_range(Range) when is_integer(Range), Range > 0 ->
      BinRange = int_to_bin(Range),
  
negative.code:     rand:seed(rand_seed_s()).
  
  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,
          next => fun ?MODULE:rand_plugin_next/1,
          uniform => fun ?MODULE:rand_plugin_uniform/1,
          uniform_n => fun ?MODULE:rand_plugin_uniform/2},
       no_seed};
  rand_seed_alg_s(crypto_cache) ->
      {#{ type => crypto_cache,
          bits => ?CRYPTO_CACHE_BITS,
          next => fun ?MODULE:rand_cache_plugin_next/1},
       <<>>}.
  
  rand_plugin_next(Seed) ->
      {bytes_to_integer(strong_rand_range(1 bsl 64)), Seed}.
  