chacha20poly1305.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* SPDX-License-Identifier: GPL-2.0 OR MIT */
  2. /*
  3. * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
  4. */
  5. #ifndef __CHACHA20POLY1305_H
  6. #define __CHACHA20POLY1305_H
  7. #include <linux/types.h>
  8. #include <linux/scatterlist.h>
  9. enum chacha20poly1305_lengths {
  10. XCHACHA20POLY1305_NONCE_SIZE = 24,
  11. CHACHA20POLY1305_KEY_SIZE = 32,
  12. CHACHA20POLY1305_AUTHTAG_SIZE = 16
  13. };
  14. void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
  15. const u8 *ad, const size_t ad_len,
  16. const u64 nonce,
  17. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  18. bool __must_check
  19. chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
  20. const u8 *ad, const size_t ad_len, const u64 nonce,
  21. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  22. void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
  23. const u8 *ad, const size_t ad_len,
  24. const u8 nonce[at_least XCHACHA20POLY1305_NONCE_SIZE],
  25. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  26. bool __must_check xchacha20poly1305_decrypt(
  27. u8 *dst, const u8 *src, const size_t src_len,
  28. const u8 *ad, const size_t ad_len,
  29. const u8 nonce[at_least XCHACHA20POLY1305_NONCE_SIZE],
  30. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  31. bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
  32. const u8 *ad, const size_t ad_len,
  33. const u64 nonce,
  34. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  35. bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
  36. const u8 *ad, const size_t ad_len,
  37. const u64 nonce,
  38. const u8 key[at_least CHACHA20POLY1305_KEY_SIZE]);
  39. bool chacha20poly1305_selftest(void);
  40. #endif /* __CHACHA20POLY1305_H */