Home | History | Annotate | Line # | Download | only in sodium
      1 #ifndef crypto_box_H
      2 #define crypto_box_H
      3 
      4 /*
      5  * THREAD SAFETY: crypto_box_keypair() is thread-safe,
      6  * provided that sodium_init() was called before.
      7  *
      8  * Other functions are always thread-safe.
      9  */
     10 
     11 #include <stddef.h>
     12 
     13 #include "crypto_box_curve25519xsalsa20poly1305.h"
     14 #include "export.h"
     15 
     16 #ifdef __cplusplus
     17 # ifdef __GNUC__
     18 #  pragma GCC diagnostic ignored "-Wlong-long"
     19 # endif
     20 extern "C" {
     21 #endif
     22 
     23 #define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES
     24 SODIUM_EXPORT
     25 size_t  crypto_box_seedbytes(void);
     26 
     27 #define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES
     28 SODIUM_EXPORT
     29 size_t  crypto_box_publickeybytes(void);
     30 
     31 #define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES
     32 SODIUM_EXPORT
     33 size_t  crypto_box_secretkeybytes(void);
     34 
     35 #define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES
     36 SODIUM_EXPORT
     37 size_t  crypto_box_noncebytes(void);
     38 
     39 #define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES
     40 SODIUM_EXPORT
     41 size_t  crypto_box_macbytes(void);
     42 
     43 #define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX
     44 SODIUM_EXPORT
     45 size_t  crypto_box_messagebytes_max(void);
     46 
     47 #define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305"
     48 SODIUM_EXPORT
     49 const char *crypto_box_primitive(void);
     50 
     51 SODIUM_EXPORT
     52 int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,
     53                             const unsigned char *seed);
     54 
     55 SODIUM_EXPORT
     56 int crypto_box_keypair(unsigned char *pk, unsigned char *sk);
     57 
     58 SODIUM_EXPORT
     59 int crypto_box_easy(unsigned char *c, const unsigned char *m,
     60                     unsigned long long mlen, const unsigned char *n,
     61                     const unsigned char *pk, const unsigned char *sk)
     62             __attribute__ ((warn_unused_result));
     63 
     64 SODIUM_EXPORT
     65 int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
     66                          unsigned long long clen, const unsigned char *n,
     67                          const unsigned char *pk, const unsigned char *sk)
     68             __attribute__ ((warn_unused_result));
     69 
     70 SODIUM_EXPORT
     71 int crypto_box_detached(unsigned char *c, unsigned char *mac,
     72                         const unsigned char *m, unsigned long long mlen,
     73                         const unsigned char *n, const unsigned char *pk,
     74                         const unsigned char *sk)
     75             __attribute__ ((warn_unused_result));
     76 
     77 SODIUM_EXPORT
     78 int crypto_box_open_detached(unsigned char *m, const unsigned char *c,
     79                              const unsigned char *mac,
     80                              unsigned long long clen,
     81                              const unsigned char *n,
     82                              const unsigned char *pk,
     83                              const unsigned char *sk)
     84             __attribute__ ((warn_unused_result));
     85 
     86 /* -- Precomputation interface -- */
     87 
     88 #define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES
     89 SODIUM_EXPORT
     90 size_t  crypto_box_beforenmbytes(void);
     91 
     92 SODIUM_EXPORT
     93 int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
     94                         const unsigned char *sk)
     95             __attribute__ ((warn_unused_result));
     96 
     97 SODIUM_EXPORT
     98 int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
     99                             unsigned long long mlen, const unsigned char *n,
    100                             const unsigned char *k);
    101 
    102 SODIUM_EXPORT
    103 int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
    104                                  unsigned long long clen, const unsigned char *n,
    105                                  const unsigned char *k)
    106             __attribute__ ((warn_unused_result));
    107 
    108 SODIUM_EXPORT
    109 int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,
    110                                 const unsigned char *m, unsigned long long mlen,
    111                                 const unsigned char *n, const unsigned char *k);
    112 
    113 SODIUM_EXPORT
    114 int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,
    115                                      const unsigned char *mac,
    116                                      unsigned long long clen, const unsigned char *n,
    117                                      const unsigned char *k)
    118             __attribute__ ((warn_unused_result));
    119 
    120 /* -- Ephemeral SK interface -- */
    121 
    122 #define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES)
    123 SODIUM_EXPORT
    124 size_t crypto_box_sealbytes(void);
    125 
    126 SODIUM_EXPORT
    127 int crypto_box_seal(unsigned char *c, const unsigned char *m,
    128                     unsigned long long mlen, const unsigned char *pk);
    129 
    130 SODIUM_EXPORT
    131 int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
    132                          unsigned long long clen,
    133                          const unsigned char *pk, const unsigned char *sk)
    134             __attribute__ ((warn_unused_result));
    135 
    136 /* -- NaCl compatibility interface ; Requires padding -- */
    137 
    138 #define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES
    139 SODIUM_EXPORT
    140 size_t  crypto_box_zerobytes(void);
    141 
    142 #define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES
    143 SODIUM_EXPORT
    144 size_t  crypto_box_boxzerobytes(void);
    145 
    146 SODIUM_EXPORT
    147 int crypto_box(unsigned char *c, const unsigned char *m,
    148                unsigned long long mlen, const unsigned char *n,
    149                const unsigned char *pk, const unsigned char *sk)
    150             __attribute__ ((warn_unused_result));
    151 
    152 SODIUM_EXPORT
    153 int crypto_box_open(unsigned char *m, const unsigned char *c,
    154                     unsigned long long clen, const unsigned char *n,
    155                     const unsigned char *pk, const unsigned char *sk)
    156             __attribute__ ((warn_unused_result));
    157 
    158 SODIUM_EXPORT
    159 int crypto_box_afternm(unsigned char *c, const unsigned char *m,
    160                        unsigned long long mlen, const unsigned char *n,
    161                        const unsigned char *k);
    162 
    163 SODIUM_EXPORT
    164 int crypto_box_open_afternm(unsigned char *m, const unsigned char *c,
    165                             unsigned long long clen, const unsigned char *n,
    166                             const unsigned char *k)
    167             __attribute__ ((warn_unused_result));
    168 
    169 #ifdef __cplusplus
    170 }
    171 #endif
    172 
    173 #endif
    174