From a08d706366ff593431bfb85ec873045bf496b810 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Tue, 9 Jun 2015 18:03:01 +0100 Subject: Add methods for pickling and unpickling sessions --- include/axolotl/crypto.hh | 1 + include/axolotl/ratchet.hh | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'include/axolotl') diff --git a/include/axolotl/crypto.hh b/include/axolotl/crypto.hh index d772f46..42e4b61 100644 --- a/include/axolotl/crypto.hh +++ b/include/axolotl/crypto.hh @@ -25,6 +25,7 @@ struct Curve25519PublicKey { struct Curve25519KeyPair : public Curve25519PublicKey { + static const int LENGTH = 64; std::uint8_t private_key[32]; }; diff --git a/include/axolotl/ratchet.hh b/include/axolotl/ratchet.hh index 9d7ff9a..cf41359 100644 --- a/include/axolotl/ratchet.hh +++ b/include/axolotl/ratchet.hh @@ -84,7 +84,7 @@ struct Session { ); /** A some strings identifing the application to feed into the KDF. */ - KdfInfo kdf_info; + const KdfInfo &kdf_info; /** The last error that happened encypting or decrypting a message. */ ErrorCode last_error; @@ -121,6 +121,24 @@ struct Session { Curve25519KeyPair const & our_ratchet_key ); + /** The number of bytes needed to persist the current session. */ + std::size_t pickle_max_output_length(); + + /** Persists a session as a sequence of bytes, encrypting using a key + * Returns the number of output bytes used. */ + std::size_t pickle( + std::uint8_t const * key, std::size_t key_length, + std::uint8_t * output, std::size_t max_output_length + ); + + /** Loads a session from a sequence of bytes, decrypting using a key. + * Returns 0 on success, or std::size_t(-1) on failure. The last_error + * will be BAD_SESSION_KEY if the supplied key is incorrect. */ + std::size_t unpickle( + std::uint8_t const * key, std::size_t key_length, + std::uint8_t * input, std::size_t input_length + ); + /** The maximum number of bytes of output the encrypt method will write for * a given message length. */ std::size_t encrypt_max_output_length( -- cgit v1.2.3