Home | History | Annotate | Line # | Download | only in sodium
      1 #ifndef crypto_secretstream_xchacha20poly1305_H
      2 #define crypto_secretstream_xchacha20poly1305_H
      3 
      4 #include <stddef.h>
      5 
      6 #include "crypto_aead_xchacha20poly1305.h"
      7 #include "crypto_stream_chacha20.h"
      8 #include "export.h"
      9 
     10 #ifdef __cplusplus
     11 # ifdef __GNUC__
     12 #  pragma GCC diagnostic ignored "-Wlong-long"
     13 # endif
     14 extern "C" {
     15 #endif
     16 
     17 #define crypto_secretstream_xchacha20poly1305_ABYTES \
     18     (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES)
     19 SODIUM_EXPORT
     20 size_t crypto_secretstream_xchacha20poly1305_abytes(void);
     21 
     22 #define crypto_secretstream_xchacha20poly1305_HEADERBYTES \
     23     crypto_aead_xchacha20poly1305_ietf_NPUBBYTES
     24 SODIUM_EXPORT
     25 size_t crypto_secretstream_xchacha20poly1305_headerbytes(void);
     26 
     27 #define crypto_secretstream_xchacha20poly1305_KEYBYTES \
     28     crypto_aead_xchacha20poly1305_ietf_KEYBYTES
     29 SODIUM_EXPORT
     30 size_t crypto_secretstream_xchacha20poly1305_keybytes(void);
     31 
     32 #define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \
     33     SODIUM_MIN(SODIUM_SIZE_MAX, ((1ULL << 32) - 2ULL) * 64ULL)
     34 SODIUM_EXPORT
     35 size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void);
     36 
     37 #define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00
     38 SODIUM_EXPORT
     39 unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void);
     40 
     41 #define crypto_secretstream_xchacha20poly1305_TAG_PUSH    0x01
     42 SODIUM_EXPORT
     43 unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void);
     44 
     45 #define crypto_secretstream_xchacha20poly1305_TAG_REKEY   0x02
     46 SODIUM_EXPORT
     47 unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void);
     48 
     49 #define crypto_secretstream_xchacha20poly1305_TAG_FINAL \
     50     (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \
     51      crypto_secretstream_xchacha20poly1305_TAG_REKEY)
     52 SODIUM_EXPORT
     53 unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void);
     54 
     55 typedef struct crypto_secretstream_xchacha20poly1305_state {
     56     unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES];
     57     unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES];
     58     unsigned char _pad[8];
     59 } crypto_secretstream_xchacha20poly1305_state;
     60 
     61 SODIUM_EXPORT
     62 size_t crypto_secretstream_xchacha20poly1305_statebytes(void);
     63 
     64 SODIUM_EXPORT
     65 void crypto_secretstream_xchacha20poly1305_keygen
     66    (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]);
     67 
     68 SODIUM_EXPORT
     69 int crypto_secretstream_xchacha20poly1305_init_push
     70    (crypto_secretstream_xchacha20poly1305_state *state,
     71     unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES],
     72     const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]);
     73 
     74 SODIUM_EXPORT
     75 int crypto_secretstream_xchacha20poly1305_push
     76    (crypto_secretstream_xchacha20poly1305_state *state,
     77     unsigned char *c, unsigned long long *clen_p,
     78     const unsigned char *m, unsigned long long mlen,
     79     const unsigned char *ad, unsigned long long adlen, unsigned char tag);
     80 
     81 SODIUM_EXPORT
     82 int crypto_secretstream_xchacha20poly1305_init_pull
     83    (crypto_secretstream_xchacha20poly1305_state *state,
     84     const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES],
     85     const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]);
     86 
     87 SODIUM_EXPORT
     88 int crypto_secretstream_xchacha20poly1305_pull
     89    (crypto_secretstream_xchacha20poly1305_state *state,
     90     unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p,
     91     const unsigned char *c, unsigned long long clen,
     92     const unsigned char *ad, unsigned long long adlen);
     93 
     94 SODIUM_EXPORT
     95 void crypto_secretstream_xchacha20poly1305_rekey
     96     (crypto_secretstream_xchacha20poly1305_state *state);
     97 
     98 #ifdef __cplusplus
     99 }
    100 #endif
    101 
    102 #endif
    103