anchor.diff:  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.
  
positive.code: %% 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).
  
negative.code: secretstream_xchacha20poly1305_init_push(Key) ->
      enacl_nif:crypto_secretstream_xchacha20poly1305_init_push(Key).
  
  %% @doc secretstream_xchacha20poly1305_push/4 returns encrypted chunk binary.
  %% Updates a secretstream context referenced by `Ref' with `Message' data,
  %% given `Tag' and additional data `AD'.
  