diff options
author | Mark Haines <mjark@negativecurvature.net> | 2015-02-25 11:20:12 +0000 |
---|---|---|
committer | Mark Haines <mjark@negativecurvature.net> | 2015-02-25 11:20:12 +0000 |
commit | ba446e7a125381d8d992fba2011f16f7f6e2806a (patch) | |
tree | d7e790b223598d53974254c1784c3815933d9f97 /include/axolotl/message.hh | |
parent | 8df4d9e9b5b1e4b87dd67a4a77ac7af93de552e7 (diff) |
Add a message encoder/decoder
Diffstat (limited to 'include/axolotl/message.hh')
-rw-r--r-- | include/axolotl/message.hh | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/include/axolotl/message.hh b/include/axolotl/message.hh new file mode 100644 index 0000000..85579cf --- /dev/null +++ b/include/axolotl/message.hh @@ -0,0 +1,63 @@ +#include <cstddef> +#include <cstdint> + + +namespace axolotl { + +/** + * The length of the buffer needed to hold a message. + */ +std::size_t encode_message_length( + std::uint32_t counter, + std::size_t ratchet_key_length, + std::size_t ciphertext_length, + std::size_t mac_length +); + + +struct MessageWriter { + std::size_t body_length; + std::uint8_t * ratchet_key; + std::uint8_t * ciphertext; + std::uint8_t * mac; +}; + + +struct MessageReader { + std::size_t body_length; + std::uint8_t version; + std::uint32_t counter; + std::size_t ratchet_key_length; + std::size_t ciphertext_length; + std::size_t mac_length; + std::uint8_t const * ratchet_key; + std::uint8_t const * ciphertext; + std::uint8_t const * mac; +}; + + +/** + * Writes the message headers into the output buffer. + * Returns a writer struct populated with pointers into the output buffer. + */ +MessageWriter encode_message( + std::uint8_t version, + std::uint32_t counter, + std::size_t ratchet_key_length, + std::size_t ciphertext_length, + std::uint8_t * output +); + + +/** + * Reads the message headers from the input buffer. + * Returns a reader struct populated with pointers into the input buffer. + * On failure the returned body_length will be 0. + */ +MessageReader decode_message( + std::uint8_t const * input, std::size_t input_length, + std::size_t mac_length +); + + +} // namespace axolotl |