ChaCha20Poly1305.h 805 B

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * Copyright (c) 2023, stelar7 <dudedbz@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/ByteBuffer.h>
  8. namespace Crypto::AEAD {
  9. class ChaCha20Poly1305 {
  10. public:
  11. explicit ChaCha20Poly1305(ReadonlyBytes key, ReadonlyBytes nonce)
  12. {
  13. m_key = MUST(ByteBuffer::copy(key));
  14. m_nonce = MUST(ByteBuffer::copy(nonce));
  15. }
  16. ErrorOr<ByteBuffer> encrypt(ReadonlyBytes aad, ReadonlyBytes plaintext);
  17. ErrorOr<ByteBuffer> decrypt(ReadonlyBytes aad, ReadonlyBytes ciphertext);
  18. ErrorOr<ByteBuffer> poly1305_key();
  19. static bool verify_tag(ReadonlyBytes encrypted, ReadonlyBytes decrypted);
  20. private:
  21. u8 pad_to_16(ReadonlyBytes data)
  22. {
  23. return 16 - (data.size() % 16);
  24. }
  25. ByteBuffer m_key;
  26. ByteBuffer m_nonce;
  27. };
  28. }