Add API for removing used one time keys

This commit is contained in:
Mark Haines 2015-06-22 11:02:42 +01:00
parent fb980849c4
commit 408530adf9
4 changed files with 36 additions and 2 deletions

View file

@ -41,6 +41,10 @@ struct Account {
LocalKey const * lookup_key( LocalKey const * lookup_key(
std::uint32_t id std::uint32_t id
); );
std::size_t remove_key(
std::uint32_t id
);
}; };

View file

@ -121,6 +121,11 @@ size_t axolotl_matches_inbound_session(
void * one_time_key_message, size_t message_length void * one_time_key_message, size_t message_length
); );
size_t axolotl_remove_one_time_keys(
AxolotlAccount * account,
AxolotlSession * session
);
size_t axolotl_encrypt_message_type( size_t axolotl_encrypt_message_type(
AxolotlSession * session AxolotlSession * session
); );

View file

@ -11,6 +11,18 @@ axolotl::LocalKey const * axolotl::Account::lookup_key(
return 0; return 0;
} }
std::size_t axolotl::Account::remove_key(
std::uint32_t id
) {
LocalKey * i;
for (i = one_time_keys.begin(); i != one_time_keys.end(); ++i) {
if (i->id == id) {
one_time_keys.erase(i);
return id;
}
}
return std::size_t(-1);
}
std::size_t axolotl::Account::new_account_random_length() { std::size_t axolotl::Account::new_account_random_length() {
return 103 * 32; return 103 * 32;
@ -21,6 +33,7 @@ std::size_t axolotl::Account::new_account(
) { ) {
if (random_length < new_account_random_length()) { if (random_length < new_account_random_length()) {
last_error = axolotl::ErrorCode::NOT_ENOUGH_RANDOM; last_error = axolotl::ErrorCode::NOT_ENOUGH_RANDOM;
return std::size_t(-1);
} }
unsigned id = 0; unsigned id = 0;
@ -46,8 +59,6 @@ std::size_t axolotl::Account::new_account(
} }
namespace axolotl { namespace axolotl {

View file

@ -468,6 +468,20 @@ size_t axolotl_matches_inbound_session(
} }
size_t axolotl_remove_one_time_keys(
AxolotlAccount * account,
AxolotlSession * session
) {
size_t result = from_c(account)->remove_key(
from_c(session)->bob_one_time_key_id
);
if (result == std::size_t(-1)) {
from_c(account)->last_error = axolotl::ErrorCode::BAD_MESSAGE_KEY_ID;
}
return result;
}
size_t axolotl_encrypt_message_type( size_t axolotl_encrypt_message_type(
AxolotlSession * session AxolotlSession * session
) { ) {