aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-06-09 18:03:01 +0100
committerMark Haines <mark.haines@matrix.org>2015-06-09 18:03:01 +0100
commita08d706366ff593431bfb85ec873045bf496b810 (patch)
tree3c22e706ba6ddc8bbcf70bb4eeaf57b980fca3f1 /include
parent8123ce62094bf88a4107506d7acd3e8e2866bc1f (diff)
Add methods for pickling and unpickling sessions
Diffstat (limited to 'include')
-rw-r--r--include/axolotl/crypto.hh1
-rw-r--r--include/axolotl/ratchet.hh20
2 files changed, 20 insertions, 1 deletions
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(