aboutsummaryrefslogtreecommitdiff
path: root/include/olm
diff options
context:
space:
mode:
authorHubert Chathi <hubert@uhoreg.ca>2020-08-14 17:29:25 -0400
committerHubert Chathi <hubert@uhoreg.ca>2020-08-14 17:29:41 -0400
commit171044f3fca084bd1c5c1f8f4bfe146434b07f0b (patch)
treee0d81cc51b02e46bfae638203744f846ec41e380 /include/olm
parenta0284c2ba36ac8433ea752e93b4a0a331a3f0c0b (diff)
add support for fallback keys
Diffstat (limited to 'include/olm')
-rw-r--r--include/olm/account.hh32
-rw-r--r--include/olm/olm.h25
2 files changed, 57 insertions, 0 deletions
diff --git a/include/olm/account.hh b/include/olm/account.hh
index 7e58ca3..82bba27 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,36 @@ 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
diff --git a/include/olm/olm.h b/include/olm/olm.h
index 6a2b3fb..11d99b4 100644
--- a/include/olm/olm.h
+++ b/include/olm/olm.h
@@ -254,6 +254,31 @@ size_t olm_account_generate_one_time_keys(
void * random, size_t random_length
);
+/** The number of random bytes needed to generate a fallback key. */
+size_t olm_account_generate_fallback_key_random_length(
+ OlmAccount * account
+);
+
+/** Generates a new fallback key. Only one previous fallback key is
+ * stored. Returns olm_error() on error. If the number of random bytes is too
+ * small then olm_account_last_error() will be "NOT_ENOUGH_RANDOM". */
+size_t olm_account_generate_fallback_key(
+ OlmAccount * account,
+ void * random, size_t random_length
+);
+
+/** The number of bytes needed to hold the fallback key as returned by
+ * olm_account_fallback_key. */
+size_t olm_account_fallback_key_length(
+ OlmAccount * account
+);
+
+size_t olm_account_fallback_key(
+ OlmAccount * account,
+ void * fallback_key, size_t fallback_key_size
+);
+
+
/** The number of random bytes needed to create an outbound session */
size_t olm_create_outbound_session_random_length(
OlmSession * session