diff options
-rw-r--r-- | include/axolotl/account.hh | 4 | ||||
-rw-r--r-- | include/axolotl/axolotl.hh | 5 | ||||
-rw-r--r-- | src/account.cpp | 15 | ||||
-rw-r--r-- | src/axolotl.cpp | 14 |
4 files changed, 36 insertions, 2 deletions
diff --git a/include/axolotl/account.hh b/include/axolotl/account.hh index 0e65a7e..54d96c3 100644 --- a/include/axolotl/account.hh +++ b/include/axolotl/account.hh @@ -41,6 +41,10 @@ struct Account { LocalKey const * lookup_key( std::uint32_t id ); + + std::size_t remove_key( + std::uint32_t id + ); }; diff --git a/include/axolotl/axolotl.hh b/include/axolotl/axolotl.hh index 09276a9..e333dbc 100644 --- a/include/axolotl/axolotl.hh +++ b/include/axolotl/axolotl.hh @@ -121,6 +121,11 @@ size_t axolotl_matches_inbound_session( 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( AxolotlSession * session ); diff --git a/src/account.cpp b/src/account.cpp index 02ad5ba..95bafa8 100644 --- a/src/account.cpp +++ b/src/account.cpp @@ -11,6 +11,18 @@ axolotl::LocalKey const * axolotl::Account::lookup_key( 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() { return 103 * 32; @@ -21,6 +33,7 @@ std::size_t axolotl::Account::new_account( ) { if (random_length < new_account_random_length()) { last_error = axolotl::ErrorCode::NOT_ENOUGH_RANDOM; + return std::size_t(-1); } unsigned id = 0; @@ -46,8 +59,6 @@ std::size_t axolotl::Account::new_account( } - - namespace axolotl { diff --git a/src/axolotl.cpp b/src/axolotl.cpp index e835c9b..c195a7c 100644 --- a/src/axolotl.cpp +++ b/src/axolotl.cpp @@ -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( AxolotlSession * session ) { |