text: #include <inttypes.h>
  
  /* NaCl-like API */
  int crypto_onetimeauth(uint8_t *output, uint8_t *input, uint64_t input_len, uint8_t *key);
  
  int crypto_onetimeauth_verify(uint8_t *output, uint8_t *input, uint64_t input_len, uint8_t *key);
  
  int crypto_box_keypair(unsigned char *pk, unsigned char *sk);
  
  int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
                          const unsigned char *sk)
              __attribute__ ((warn_unused_result));
  
  int crypto_scalarmult_base(unsigned char *q, const unsigned char *n);
  
  int crypto_scalarmult(unsigned char *q, const unsigned char *n,
                        const unsigned char *p)
              __attribute__ ((warn_unused_result));
  
  int crypto_sign(uint8_t *signed_msg, long long unsigned int *signed_len, uint8_t *msg, uint64_t msg_len,
              uint8_t *sk);
  
  int crypto_sign_open(uint8_t *unsigned_msg, long long unsigned int *unsigned_msg_len,
                       uint8_t *msg, uint64_t msg_len, uint8_t *pk);
  
  int crypto_sign_keypair(uint8_t pk[32], uint8_t sk[32]);
  
  int crypto_sign_secret_to_public(uint8_t *pk, uint8_t *sk);
  
  int crypto_box(uint8_t *cipher, uint8_t *message, uint64_t msg_len, uint8_t *nonce,  uint8_t *pk, uint8_t *sk);
  
  int crypto_box_open(uint8_t *msg, uint8_t *cipher, uint64_t cipher_len, uint8_t *nonce, uint8_t *pk, uint8_t *sk);
  
  int crypto_box_afternm(uint8_t *cipher, uint8_t *msg, uint64_t msg_len, uint8_t *nonce, uint8_t *key);
  
  int crypto_box_open_afternm(uint8_t *msg, uint8_t *cipher, uint64_t cipher_len, uint8_t *nonce, uint8_t *key);
  
  int crypto_secretbox(uint8_t *cipher, uint8_t *msg, uint64_t msg_len, uint8_t *nonce, uint8_t *key);
  
  int crypto_secretbox_open(uint8_t *msg, uint8_t *cipher, uint64_t cipher_len, uint8_t *nonce, uint8_t *key);
  
  int crypto_stream(uint8_t *cipher, uint64_t cipher_len, uint8_t *nonce, uint8_t *key);
  
  int crypto_stream_xor(uint8_t *cipher, uint8_t *msg, uint64_t cipher_len, uint8_t *nonce, uint8_t *key);
  
  void chacha20(uint8_t *output, uint8_t *plain, uint32_t plain_len, uint8_t *key, uint8_t *nonce, uint32_t ctr);
  
  void
  chacha20_vec128(
           uint8_t *output,
           uint8_t *plain,
           uint32_t plain_len,
           uint8_t *key,
           uint8_t *nonce,
           uint32_t ctr
  		);
  
  uint32_t aead_chacha20_poly1305_encrypt(uint8_t *cipher,  uint8_t *mac,  uint8_t *msg, uint32_t msg_len,  uint8_t *aad,  uint32_t aad_len,  uint8_t *key,  uint8_t *nonce);
  
  uint32_t aead_chacha20_poly1305_decrypt(uint8_t *msg, uint8_t *cipher,  uint32_t msg_len,  uint8_t *mac,  uint8_t *aad,  uint32_t aad_len,  uint8_t *key,  uint8_t *nonce);
  
  /* Other API (mix between NaCl's original API and LibSodium's API) */
  
  /* int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, */
  /*                             unsigned long long mlen, const unsigned char *n, */
  /*                             const unsigned char *k); */
  
  /* int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, */
  /*                                  unsigned long long clen, const unsigned char *n, */
  /*                                  const unsigned char *k) */
  /*             __attribute__ ((warn_unused_result)); */
  
  /* int crypto_box_easy(unsigned char *c, const unsigned char *m, */
  /*                     unsigned long long mlen, const unsigned char *n, */
  /*                     const unsigned char *pk, const unsigned char *sk) */
  /*             __attribute__ ((warn_unused_result)); */
  
  /* int crypto_box_open_easy(unsigned char *m, const unsigned char *c, */
  /*                          unsigned long long clen, const unsigned char *n, */
  /*                          const unsigned char *pk, const unsigned char *sk) */
  /*             __attribute__ ((warn_unused_result)); */
  
  /* uint32_t */
  /* crypto_box_detached_afternm( */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint8_t *m, */
  /*   uint64_t mlen, */
  /*   uint8_t *n1, */
  /*   uint8_t *k1 */
  /* ); */
  
  /* uint32_t */
  /* crypto_box_detached( */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint8_t *m, */
  /*   uint64_t mlen, */
  /*   uint8_t *n1, */
  /*   uint8_t *pk, */
  /*   uint8_t *sk */
  /* ); */
  
  /* uint32_t */
  /* crypto_box_open_detached( */
  /*   uint8_t *m, */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint64_t mlen, */
  /*   uint8_t *n1, */
  /*   uint8_t *pk, */
  /*   uint8_t *sk */
  /* ); */
  
  /* uint32_t */
  /* crypto_box_open_detached_afternm( */
  /*   uint8_t *m, */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint64_t mlen, */
  /*   uint8_t *n1, */
  /*   uint8_t *k1 */
  /* ); */
  
  /* uint32_t */
  /* crypto_secretbox_detached( */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint8_t *m, */
  /*   uint64_t mlen, */
  /*   uint8_t *n1, */
  /*   uint8_t *k1 */
  /* ); */
  
  /* uint32_t */
  /* crypto_secretbox_open_detached( */
  /*   uint8_t *m, */
  /*   uint8_t *c, */
  /*   uint8_t *mac, */
  /*   uint64_t clen, */
  /*   uint8_t *n1, */
  /*   uint8_t *k1 */
  /* ); */
  
  /* uint32_t */
  /* crypto_secretbox_easy(uint8_t *c, uint8_t *m, uint64_t mlen, uint8_t *n1, uint8_t *k1); */
  
  /* uint32_t */
  /* crypto_secretbox_open_easy( */
  /*   uint8_t *m, */
  /*   uint8_t *c, */
  /*   uint64_t clen, */
  /*   uint8_t *n1, */
  /*   uint8_t *k1 */
  /* ); */
  