1 #ifndef crypto_aead_chacha20poly1305_H 2 #define crypto_aead_chacha20poly1305_H 3 4 #include <stddef.h> 5 #include "export.h" 6 7 #ifdef __cplusplus 8 # ifdef __GNUC__ 9 # pragma GCC diagnostic ignored "-Wlong-long" 10 # endif 11 extern "C" { 12 #endif 13 14 /* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ 15 16 #define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U 17 SODIUM_EXPORT 18 size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); 19 20 #define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U 21 SODIUM_EXPORT 22 size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); 23 24 #define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U 25 26 SODIUM_EXPORT 27 size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); 28 29 #define crypto_aead_chacha20poly1305_ietf_ABYTES 16U 30 SODIUM_EXPORT 31 size_t crypto_aead_chacha20poly1305_ietf_abytes(void); 32 33 #define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ 34 SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ 35 (64ULL * ((1ULL << 32) - 1ULL))) 36 SODIUM_EXPORT 37 size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); 38 39 SODIUM_EXPORT 40 int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, 41 unsigned long long *clen_p, 42 const unsigned char *m, 43 unsigned long long mlen, 44 const unsigned char *ad, 45 unsigned long long adlen, 46 const unsigned char *nsec, 47 const unsigned char *npub, 48 const unsigned char *k) 49 __attribute__ ((nonnull(1, 8, 9))); 50 51 SODIUM_EXPORT 52 int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, 53 unsigned long long *mlen_p, 54 unsigned char *nsec, 55 const unsigned char *c, 56 unsigned long long clen, 57 const unsigned char *ad, 58 unsigned long long adlen, 59 const unsigned char *npub, 60 const unsigned char *k) 61 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); 62 63 SODIUM_EXPORT 64 int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, 65 unsigned char *mac, 66 unsigned long long *maclen_p, 67 const unsigned char *m, 68 unsigned long long mlen, 69 const unsigned char *ad, 70 unsigned long long adlen, 71 const unsigned char *nsec, 72 const unsigned char *npub, 73 const unsigned char *k) 74 __attribute__ ((nonnull(1, 2, 9, 10))); 75 76 SODIUM_EXPORT 77 int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, 78 unsigned char *nsec, 79 const unsigned char *c, 80 unsigned long long clen, 81 const unsigned char *mac, 82 const unsigned char *ad, 83 unsigned long long adlen, 84 const unsigned char *npub, 85 const unsigned char *k) 86 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); 87 88 SODIUM_EXPORT 89 void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]) 90 __attribute__ ((nonnull)); 91 92 /* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ 93 94 #define crypto_aead_chacha20poly1305_KEYBYTES 32U 95 SODIUM_EXPORT 96 size_t crypto_aead_chacha20poly1305_keybytes(void); 97 98 #define crypto_aead_chacha20poly1305_NSECBYTES 0U 99 SODIUM_EXPORT 100 size_t crypto_aead_chacha20poly1305_nsecbytes(void); 101 102 #define crypto_aead_chacha20poly1305_NPUBBYTES 8U 103 SODIUM_EXPORT 104 size_t crypto_aead_chacha20poly1305_npubbytes(void); 105 106 #define crypto_aead_chacha20poly1305_ABYTES 16U 107 SODIUM_EXPORT 108 size_t crypto_aead_chacha20poly1305_abytes(void); 109 110 #define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ 111 (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) 112 SODIUM_EXPORT 113 size_t crypto_aead_chacha20poly1305_messagebytes_max(void); 114 115 SODIUM_EXPORT 116 int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, 117 unsigned long long *clen_p, 118 const unsigned char *m, 119 unsigned long long mlen, 120 const unsigned char *ad, 121 unsigned long long adlen, 122 const unsigned char *nsec, 123 const unsigned char *npub, 124 const unsigned char *k) 125 __attribute__ ((nonnull(1, 8, 9))); 126 127 SODIUM_EXPORT 128 int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, 129 unsigned long long *mlen_p, 130 unsigned char *nsec, 131 const unsigned char *c, 132 unsigned long long clen, 133 const unsigned char *ad, 134 unsigned long long adlen, 135 const unsigned char *npub, 136 const unsigned char *k) 137 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); 138 139 SODIUM_EXPORT 140 int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, 141 unsigned char *mac, 142 unsigned long long *maclen_p, 143 const unsigned char *m, 144 unsigned long long mlen, 145 const unsigned char *ad, 146 unsigned long long adlen, 147 const unsigned char *nsec, 148 const unsigned char *npub, 149 const unsigned char *k) 150 __attribute__ ((nonnull(1, 2, 9, 10))); 151 152 SODIUM_EXPORT 153 int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, 154 unsigned char *nsec, 155 const unsigned char *c, 156 unsigned long long clen, 157 const unsigned char *mac, 158 const unsigned char *ad, 159 unsigned long long adlen, 160 const unsigned char *npub, 161 const unsigned char *k) 162 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); 163 164 SODIUM_EXPORT 165 void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]) 166 __attribute__ ((nonnull)); 167 168 /* Aliases */ 169 170 #define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES 171 #define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES 172 #define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES 173 #define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES 174 #define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX 175 176 #ifdef __cplusplus 177 } 178 #endif 179 180 #endif 181