aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/axolotl/account.hh4
-rw-r--r--include/axolotl/axolotl.hh5
-rw-r--r--src/account.cpp15
-rw-r--r--src/axolotl.cpp14
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
) {