1 #ifndef crypto_box_curve25519xsalsa20poly1305_H 2 #define crypto_box_curve25519xsalsa20poly1305_H 3 4 #include <stddef.h> 5 #include "crypto_stream_xsalsa20.h" 6 #include "export.h" 7 8 #ifdef __cplusplus 9 # ifdef __GNUC__ 10 # pragma GCC diagnostic ignored "-Wlong-long" 11 # endif 12 extern "C" { 13 #endif 14 15 #define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U 16 SODIUM_EXPORT 17 size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); 18 19 #define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U 20 SODIUM_EXPORT 21 size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); 22 23 #define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U 24 SODIUM_EXPORT 25 size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); 26 27 #define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U 28 SODIUM_EXPORT 29 size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); 30 31 #define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U 32 SODIUM_EXPORT 33 size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); 34 35 #define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U 36 SODIUM_EXPORT 37 size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); 38 39 /* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ 40 #define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ 41 (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) 42 SODIUM_EXPORT 43 size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); 44 45 SODIUM_EXPORT 46 int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, 47 unsigned char *sk, 48 const unsigned char *seed) 49 __attribute__ ((nonnull)); 50 51 SODIUM_EXPORT 52 int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, 53 unsigned char *sk) 54 __attribute__ ((nonnull)); 55 56 SODIUM_EXPORT 57 int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, 58 const unsigned char *pk, 59 const unsigned char *sk) 60 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); 61 62 /* -- NaCl compatibility interface ; Requires padding -- */ 63 64 #define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U 65 SODIUM_EXPORT 66 size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); 67 68 #define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ 69 (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ 70 crypto_box_curve25519xsalsa20poly1305_MACBYTES) 71 SODIUM_EXPORT 72 size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); 73 74 SODIUM_EXPORT 75 int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, 76 const unsigned char *m, 77 unsigned long long mlen, 78 const unsigned char *n, 79 const unsigned char *pk, 80 const unsigned char *sk) 81 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); 82 83 SODIUM_EXPORT 84 int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, 85 const unsigned char *c, 86 unsigned long long clen, 87 const unsigned char *n, 88 const unsigned char *pk, 89 const unsigned char *sk) 90 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); 91 92 SODIUM_EXPORT 93 int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, 94 const unsigned char *m, 95 unsigned long long mlen, 96 const unsigned char *n, 97 const unsigned char *k) 98 __attribute__ ((nonnull(1, 4, 5))); 99 100 SODIUM_EXPORT 101 int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, 102 const unsigned char *c, 103 unsigned long long clen, 104 const unsigned char *n, 105 const unsigned char *k) 106 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); 107 108 #ifdef __cplusplus 109 } 110 #endif 111 112 #endif 113