0001
0002
0003
0004
0005
0006 #ifndef __CHACHA20POLY1305_H
0007 #define __CHACHA20POLY1305_H
0008
0009 #include <linux/types.h>
0010 #include <linux/scatterlist.h>
0011
0012 enum chacha20poly1305_lengths {
0013 XCHACHA20POLY1305_NONCE_SIZE = 24,
0014 CHACHA20POLY1305_KEY_SIZE = 32,
0015 CHACHA20POLY1305_AUTHTAG_SIZE = 16
0016 };
0017
0018 void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
0019 const u8 *ad, const size_t ad_len,
0020 const u64 nonce,
0021 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0022
0023 bool __must_check
0024 chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
0025 const u8 *ad, const size_t ad_len, const u64 nonce,
0026 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0027
0028 void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
0029 const u8 *ad, const size_t ad_len,
0030 const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
0031 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0032
0033 bool __must_check xchacha20poly1305_decrypt(
0034 u8 *dst, const u8 *src, const size_t src_len, const u8 *ad,
0035 const size_t ad_len, const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
0036 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0037
0038 bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
0039 const u8 *ad, const size_t ad_len,
0040 const u64 nonce,
0041 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0042
0043 bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
0044 const u8 *ad, const size_t ad_len,
0045 const u64 nonce,
0046 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
0047
0048 bool chacha20poly1305_selftest(void);
0049
0050 #endif