25#include "../compat.hpp"
26#include "../range.hpp"
27#include "../zstring_view.hpp"
28#include "abstract/chunk_processor.hpp"
29#include "common_types.hpp"
36namespace essence::crypto {
42 ES_API(CPPESSENCE) abstract::chunk_processor make_base64_encoder(
bool newlines =
false);
48 ES_API(CPPESSENCE) abstract::chunk_processor make_base64_decoder();
60 abstract::chunk_processor make_symmetric_cipher_chunk_processor(zstring_view cipher_name,
61 cipher_padding_mode padding_mode, std::span<const std::byte> key, std::span<const std::byte> iv,
62 bool encryption =
true);
75 template <
byte_like_contiguous_range KeyRange,
byte_like_contiguous_range IVRange>
76 abstract::chunk_processor make_symmetric_cipher_chunk_processor(zstring_view cipher_name,
77 cipher_padding_mode padding_mode, KeyRange&& key, IVRange&& iv,
bool encryption =
true) {
78 return make_symmetric_cipher_chunk_processor(
79 cipher_name, padding_mode, as_const_byte_span(key), as_const_byte_span(iv), encryption);
88 abstract::chunk_processor chain_chunk_processors(std::span<abstract::chunk_processor> processors);
96 template <
typename... Args>
97 requires(std::same_as<std::decay_t<Args>, abstract::chunk_processor> && ...)
98 abstract::chunk_processor chain_chunk_processors(Args&&... args) {
99 std::array processors{std::move(args)...};
101 return chain_chunk_processors(processors);