aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_group_session.cpp51
-rw-r--r--tests/test_olm.cpp48
2 files changed, 70 insertions, 29 deletions
diff --git a/tests/test_group_session.cpp b/tests/test_group_session.cpp
index 9930927..ad67adb 100644
--- a/tests/test_group_session.cpp
+++ b/tests/test_group_session.cpp
@@ -28,23 +28,26 @@ int main() {
size_t pickle_length = olm_pickle_outbound_group_session_length(session);
uint8_t pickle1[pickle_length];
- olm_pickle_outbound_group_session(session,
- "secret_key", 10,
- pickle1, pickle_length);
+ size_t res = olm_pickle_outbound_group_session(
+ session, "secret_key", 10, pickle1, pickle_length
+ );
+ assert_equals(pickle_length, res);
+
uint8_t pickle2[pickle_length];
memcpy(pickle2, pickle1, pickle_length);
uint8_t buffer2[size];
OlmOutboundGroupSession *session2 = olm_outbound_group_session(buffer2);
- size_t res = olm_unpickle_outbound_group_session(session2,
- "secret_key", 10,
- pickle2, pickle_length);
+ res = olm_unpickle_outbound_group_session(
+ session2, "secret_key", 10, pickle2, pickle_length
+ );
assert_not_equals((size_t)-1, res);
assert_equals(pickle_length,
olm_pickle_outbound_group_session_length(session2));
- olm_pickle_outbound_group_session(session2,
- "secret_key", 10,
- pickle2, pickle_length);
+ res = olm_pickle_outbound_group_session(
+ session2, "secret_key", 10, pickle2, pickle_length
+ );
+ assert_equals(pickle_length, res);
assert_equals(pickle1, pickle2, pickle_length);
}
@@ -59,23 +62,25 @@ int main() {
size_t pickle_length = olm_pickle_inbound_group_session_length(session);
uint8_t pickle1[pickle_length];
- olm_pickle_inbound_group_session(session,
- "secret_key", 10,
- pickle1, pickle_length);
+ size_t res = olm_pickle_inbound_group_session(
+ session, "secret_key", 10, pickle1, pickle_length
+ );
+ assert_equals(pickle_length, res);
+
uint8_t pickle2[pickle_length];
memcpy(pickle2, pickle1, pickle_length);
uint8_t buffer2[size];
OlmInboundGroupSession *session2 = olm_inbound_group_session(buffer2);
- size_t res = olm_unpickle_inbound_group_session(session2,
- "secret_key", 10,
- pickle2, pickle_length);
+ res = olm_unpickle_inbound_group_session(
+ session2, "secret_key", 10, pickle2, pickle_length
+ );
assert_not_equals((size_t)-1, res);
assert_equals(pickle_length,
olm_pickle_inbound_group_session_length(session2));
- olm_pickle_inbound_group_session(session2,
- "secret_key", 10,
- pickle2, pickle_length);
+ res = olm_pickle_inbound_group_session(
+ session2, "secret_key", 10, pickle2, pickle_length
+ );
assert_equals(pickle1, pickle2, pickle_length);
}
@@ -161,10 +166,12 @@ int main() {
memcpy(msgcopy, msg, msglen);
size = olm_group_decrypt_max_plaintext_length(inbound_session, msgcopy, msglen);
uint8_t plaintext_buf[size];
+ uint32_t message_index;
res = olm_group_decrypt(inbound_session, msg, msglen,
- plaintext_buf, size);
+ plaintext_buf, size, &message_index);
assert_equals(plaintext_length, res);
assert_equals(plaintext, plaintext_buf, res);
+ assert_equals(message_index, uint32_t(0));
}
{
@@ -208,9 +215,11 @@ int main() {
memcpy(msgcopy, message, msglen);
uint8_t plaintext_buf[size];
+ uint32_t message_index;
res = olm_group_decrypt(
- inbound_session, msgcopy, msglen, plaintext_buf, size
+ inbound_session, msgcopy, msglen, plaintext_buf, size, &message_index
);
+ assert_equals(message_index, uint32_t(0));
assert_equals(plaintext_length, res);
assert_equals(plaintext, plaintext_buf, res);
@@ -227,7 +236,7 @@ int main() {
memcpy(msgcopy, message, msglen);
res = olm_group_decrypt(
inbound_session, msgcopy, msglen,
- plaintext_buf, size
+ plaintext_buf, size, &message_index
);
assert_equals((size_t)-1, res);
assert_equals(
diff --git a/tests/test_olm.cpp b/tests/test_olm.cpp
index af2c9f7..b24cd90 100644
--- a/tests/test_olm.cpp
+++ b/tests/test_olm.cpp
@@ -49,7 +49,9 @@ mock_random(ot_random, sizeof(ot_random));
std::size_t pickle_length = ::olm_pickle_account_length(account);
std::uint8_t pickle1[pickle_length];
-::olm_pickle_account(account, "secret_key", 10, pickle1, pickle_length);
+std::size_t res = ::olm_pickle_account(account, "secret_key", 10, pickle1, pickle_length);
+assert_equals(pickle_length, res);
+
std::uint8_t pickle2[pickle_length];
std::memcpy(pickle2, pickle1, pickle_length);
@@ -59,10 +61,10 @@ assert_not_equals(std::size_t(-1), ::olm_unpickle_account(
account2, "secret_key", 10, pickle2, pickle_length
));
assert_equals(pickle_length, ::olm_pickle_account_length(account2));
-::olm_pickle_account(account2, "secret_key", 10, pickle2, pickle_length);
+res = ::olm_pickle_account(account2, "secret_key", 10, pickle2, pickle_length);
+assert_equals(pickle_length, res);
assert_equals(pickle1, pickle2, pickle_length);
-
}
@@ -122,7 +124,9 @@ mock_random(random2, sizeof(random2));
std::size_t pickle_length = ::olm_pickle_session_length(session);
std::uint8_t pickle1[pickle_length];
-::olm_pickle_session(session, "secret_key", 10, pickle1, pickle_length);
+std::size_t res = ::olm_pickle_session(session, "secret_key", 10, pickle1, pickle_length);
+assert_equals(pickle_length, res);
+
std::uint8_t pickle2[pickle_length];
std::memcpy(pickle2, pickle1, pickle_length);
@@ -132,10 +136,10 @@ assert_not_equals(std::size_t(-1), ::olm_unpickle_session(
session2, "secret_key", 10, pickle2, pickle_length
));
assert_equals(pickle_length, ::olm_pickle_session_length(session2));
-::olm_pickle_session(session2, "secret_key", 10, pickle2, pickle_length);
+res = ::olm_pickle_session(session2, "secret_key", 10, pickle2, pickle_length);
+assert_equals(pickle_length, res);
assert_equals(pickle1, pickle2, pickle_length);
-
}
{ /** Loopback test */
@@ -161,6 +165,9 @@ std::uint8_t o_random[::olm_account_generate_one_time_keys_random_length(
mock_random_b(o_random, sizeof(o_random));
::olm_account_generate_one_time_keys(b_account, 42, o_random, sizeof(o_random));
+std::uint8_t a_id_keys[::olm_account_identity_keys_length(a_account)];
+::olm_account_identity_keys(a_account, a_id_keys, sizeof(a_id_keys));
+
std::uint8_t b_id_keys[::olm_account_identity_keys_length(b_account)];
std::uint8_t b_ot_keys[::olm_account_one_time_keys_length(b_account)];
::olm_account_identity_keys(b_account, b_id_keys, sizeof(b_id_keys));
@@ -172,8 +179,8 @@ std::uint8_t a_rand[::olm_create_outbound_session_random_length(a_session)];
mock_random_a(a_rand, sizeof(a_rand));
assert_not_equals(std::size_t(-1), ::olm_create_outbound_session(
a_session, a_account,
- b_id_keys + 15, 43,
- b_ot_keys + 25, 43,
+ b_id_keys + 15, 43, // B's curve25519 identity key
+ b_ot_keys + 25, 43, // B's curve25519 one time key
a_rand, sizeof(a_rand)
));
@@ -198,6 +205,31 @@ std::uint8_t b_session_buffer[::olm_account_size()];
b_session, b_account, tmp_message_1, sizeof(message_1)
);
+// Check that the inbound session matches the message it was created from.
+std::memcpy(tmp_message_1, message_1, sizeof(message_1));
+assert_equals(std::size_t(1), ::olm_matches_inbound_session(
+ b_session,
+ tmp_message_1, sizeof(message_1)
+));
+
+// Check that the inbound session matches the key this message is supposed
+// to be from.
+std::memcpy(tmp_message_1, message_1, sizeof(message_1));
+assert_equals(std::size_t(1), ::olm_matches_inbound_session_from(
+ b_session,
+ a_id_keys + 15, 43, // A's curve125519 identity key.
+ tmp_message_1, sizeof(message_1)
+));
+
+// Check that the inbound session isn't from a different user.
+std::memcpy(tmp_message_1, message_1, sizeof(message_1));
+assert_equals(std::size_t(0), ::olm_matches_inbound_session_from(
+ b_session,
+ b_id_keys + 15, 43, // B's curve25519 identity key.
+ tmp_message_1, sizeof(message_1)
+));
+
+// Check that we can decrypt the message.
std::memcpy(tmp_message_1, message_1, sizeof(message_1));
std::uint8_t plaintext_1[::olm_decrypt_max_plaintext_length(
b_session, 0, tmp_message_1, sizeof(message_1)