aboutsummaryrefslogtreecommitdiff
path: root/include/axolotl/message.hh
diff options
context:
space:
mode:
authorMark Haines <mjark@negativecurvature.net>2015-02-25 11:20:12 +0000
committerMark Haines <mjark@negativecurvature.net>2015-02-25 11:20:12 +0000
commitba446e7a125381d8d992fba2011f16f7f6e2806a (patch)
treed7e790b223598d53974254c1784c3815933d9f97 /include/axolotl/message.hh
parent8df4d9e9b5b1e4b87dd67a4a77ac7af93de552e7 (diff)
Add a message encoder/decoder
Diffstat (limited to 'include/axolotl/message.hh')
-rw-r--r--include/axolotl/message.hh63
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