aboutsummaryrefslogtreecommitdiff
path: root/include/olm/account.hh
diff options
context:
space:
mode:
authorHubert Chathi <hubertc@matrix.org>2020-09-17 21:42:25 +0000
committerHubert Chathi <hubertc@matrix.org>2020-09-17 21:42:25 +0000
commit3cd6b15853923fff512138ebb5e8ba390cfb38e2 (patch)
tree6830d4d13f7c1106f8e4e772e16f9204d523fcd5 /include/olm/account.hh
parent89050dc0b68f0d5f1bf9f9f386f7c2f4ac043f4f (diff)
parentc47c6ca3992c74489700cda44443ec29c3cb3b13 (diff)
Merge branch 'uhoreg/fallback' into 'master'
add support for fallback keys See merge request matrix-org/olm!13
Diffstat (limited to 'include/olm/account.hh')
-rw-r--r--include/olm/account.hh31
1 files changed, 31 insertions, 0 deletions
diff --git a/include/olm/account.hh b/include/olm/account.hh
index 7e58ca3..826b26d 100644
--- a/include/olm/account.hh
+++ b/include/olm/account.hh
@@ -43,6 +43,8 @@ struct Account {
Account();
IdentityKeys identity_keys;
List<OneTimeKey, MAX_ONE_TIME_KEYS> one_time_keys;
+ OneTimeKey current_fallback_key;
+ OneTimeKey prev_fallback_key;
std::uint32_t next_one_time_key_id;
OlmErrorCode last_error;
@@ -126,6 +128,35 @@ struct Account {
std::uint8_t const * random, std::size_t random_length
);
+ /** The number of random bytes needed to generate a fallback key. */
+ std::size_t generate_fallback_key_random_length();
+
+ /** Generates a new fallback key. Returns std::size_t(-1) on error. If the
+ * number of random bytes is too small then last_error will be
+ * NOT_ENOUGH_RANDOM */
+ std::size_t generate_fallback_key(
+ std::uint8_t const * random, std::size_t random_length
+ );
+
+ /** Number of bytes needed to output the one time keys for this account */
+ std::size_t get_fallback_key_json_length();
+
+ /** Output the fallback key as JSON:
+ *
+ * {"curve25519":
+ * ["<6 byte key id>":"<43 base64 characters>"
+ * ,"<6 byte key id>":"<43 base64 characters>"
+ * ...
+ * ]
+ * }
+ *
+ * Returns the size of the JSON written or std::size_t(-1) on error.
+ * If the buffer is too small last_error will be OUTPUT_BUFFER_TOO_SMALL.
+ */
+ std::size_t get_fallback_key_json(
+ std::uint8_t * fallback_json, std::size_t fallback_json_length
+ );
+
/** Lookup a one time key with the given public key */
OneTimeKey const * lookup_key(
_olm_curve25519_public_key const & public_key