anchor.diff:  %% This function generates a hash of the message using a key. The hash size is
   %% either 16, 32 or 64 bytes
   %% @end
  --type generichash_bytes() :: 10..64.
   -spec generichash(generichash_bytes(), iodata(), binary()) -> binary().
   generichash(HashSize, Message, Key) ->
       enacl_nif:crypto_generichash(HashSize, Message, Key).
  
positive.code: generichash_final(State) ->
      enacl_nif:crypto_generichash_final(State).
  
  -type pwhash_limit() :: interactive | moderate | sensitive | pos_integer().
  
  %% @doc pwhash_SALTBYTES/0 returns the number of bytes required for salt.
  %% @end
  -spec pwhash_SALTBYTES() -> pos_integer().
  pwhash_SALTBYTES() ->
      enacl_nif:crypto_pwhash_SALTBYTES().
  
  -type pwhash_alg() :: default | argon2i13 | argon2id13 | pos_integer().
  %% @doc pwhash/2 hash a password
  %%
  %% This function generates a fixed size salted hash of a user defined password.
  
negative.code: 
  %% Internal verification of the system
  -export([verify/0]).
  
  %% Type specifications
  -type generichash_bytes() :: 10..64.
  -type sign_state() :: reference().
  
  -type pwhash_alg() :: default | argon2i13 | argon2id13 | pos_integer().
  -type pwhash_limit() :: interactive | moderate | sensitive | pos_integer().
  -type secretstream_xchacha20poly1305_tag() :: message | rekey | final | push | pos_integer().
  
  -export_type([
      generichash_bytes/0,
      pwhash_alg/0,
      pwhash_limit/0,
      secretstream_xchacha20poly1305_tag/0,
      sign_state/0
  ]).
  
  
  
  