aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/axolotl/ratchet.hh13
-rw-r--r--src/ratchet.cpp32
-rw-r--r--tests/test_ratchet.cpp8
3 files changed, 25 insertions, 28 deletions
diff --git a/include/axolotl/ratchet.hh b/include/axolotl/ratchet.hh
index f4eeafa..d5053b2 100644
--- a/include/axolotl/ratchet.hh
+++ b/include/axolotl/ratchet.hh
@@ -75,9 +75,9 @@ struct KdfInfo {
};
-struct Session {
+struct Ratchet {
- Session(
+ Ratchet(
KdfInfo const & kdf_info,
Cipher const & ratchet_cipher
);
@@ -126,18 +126,15 @@ struct Session {
/** The number of bytes needed to persist the current session. */
std::size_t pickle_max_output_length();
- /** Persists a session as a sequence of bytes, encrypting using a key
+ /** Persists a session as a sequence of bytes
* Returns the number of output bytes used. */
std::size_t pickle(
- std::uint8_t const * key, std::size_t key_length,
std::uint8_t * output, std::size_t max_output_length
);
- /** Loads a session from a sequence of bytes, decrypting using a key.
- * Returns 0 on success, or std::size_t(-1) on failure. The last_error
- * will be BAD_SESSION_KEY if the supplied key is incorrect. */
+ /** Loads a session from a sequence of bytes.
+ * Returns 0 on success, or std::size_t(-1) on failure. */
std::size_t unpickle(
- std::uint8_t const * key, std::size_t key_length,
std::uint8_t * input, std::size_t input_length
);
diff --git a/src/ratchet.cpp b/src/ratchet.cpp
index cbafa83..bdd0ba3 100644
--- a/src/ratchet.cpp
+++ b/src/ratchet.cpp
@@ -95,7 +95,7 @@ std::size_t verify_mac_and_decrypt(
std::size_t verify_mac_and_decrypt_for_existing_chain(
- axolotl::Session const & session,
+ axolotl::Ratchet const & session,
axolotl::ChainKey const & chain,
axolotl::MessageReader const & reader,
std::uint8_t * plaintext, std::size_t max_plaintext_length
@@ -129,7 +129,7 @@ std::size_t verify_mac_and_decrypt_for_existing_chain(
std::size_t verify_mac_and_decrypt_for_new_chain(
- axolotl::Session const & session,
+ axolotl::Ratchet const & session,
axolotl::MessageReader const & reader,
std::uint8_t * plaintext, std::size_t max_plaintext_length
) {
@@ -168,7 +168,7 @@ std::size_t verify_mac_and_decrypt_for_new_chain(
} // namespace
-axolotl::Session::Session(
+axolotl::Ratchet::Ratchet(
axolotl::KdfInfo const & kdf_info,
Cipher const & ratchet_cipher
) : kdf_info(kdf_info),
@@ -177,7 +177,7 @@ axolotl::Session::Session(
}
-void axolotl::Session::initialise_as_bob(
+void axolotl::Ratchet::initialise_as_bob(
std::uint8_t const * shared_secret, std::size_t shared_secret_length,
axolotl::Curve25519PublicKey const & their_ratchet_key
) {
@@ -196,7 +196,7 @@ void axolotl::Session::initialise_as_bob(
}
-void axolotl::Session::initialise_as_alice(
+void axolotl::Ratchet::initialise_as_alice(
std::uint8_t const * shared_secret, std::size_t shared_secret_length,
axolotl::Curve25519KeyPair const & our_ratchet_key
) {
@@ -215,7 +215,7 @@ void axolotl::Session::initialise_as_alice(
}
-std::size_t axolotl::Session::pickle_max_output_length() {
+std::size_t axolotl::Ratchet::pickle_max_output_length() {
std::size_t counter_length = 4;
std::size_t send_chain_length = counter_length + 64 + 32;
std::size_t recv_chain_length = counter_length + 32 + 32;
@@ -264,8 +264,7 @@ std::uint8_t * unpickle_bytes(
} // namespace
-std::size_t axolotl::Session::pickle(
- std::uint8_t const * key, std::size_t key_length,
+std::size_t axolotl::Ratchet::pickle(
std::uint8_t * output, std::size_t max_output_length
) {
std::uint8_t * pos = output;
@@ -297,8 +296,7 @@ std::size_t axolotl::Session::pickle(
return pos - output;
}
-std::size_t axolotl::Session::unpickle(
- std::uint8_t const * key, std::size_t key_length,
+std::size_t axolotl::Ratchet::unpickle(
std::uint8_t * input, std::size_t input_length
) {
@@ -350,26 +348,28 @@ std::size_t axolotl::Session::unpickle(
}
-std::size_t axolotl::Session::encrypt_max_output_length(
+std::size_t axolotl::Ratchet::encrypt_max_output_length(
std::size_t plaintext_length
) {
std::size_t counter = 0;
if (!sender_chain.empty()) {
counter = sender_chain[0].chain_key.index;
}
- std::size_t padded = axolotl::aes_encrypt_cbc_length(plaintext_length);
+ std::size_t padded = ratchet_cipher.encrypt_ciphertext_length(
+ plaintext_length
+ );
return axolotl::encode_message_length(
counter, KEY_LENGTH, padded, ratchet_cipher.mac_length()
);
}
-std::size_t axolotl::Session::encrypt_random_length() {
+std::size_t axolotl::Ratchet::encrypt_random_length() {
return sender_chain.empty() ? KEY_LENGTH : 0;
}
-std::size_t axolotl::Session::encrypt(
+std::size_t axolotl::Ratchet::encrypt(
std::uint8_t const * plaintext, std::size_t plaintext_length,
std::uint8_t const * random, std::size_t random_length,
std::uint8_t * output, std::size_t max_output_length
@@ -427,14 +427,14 @@ std::size_t axolotl::Session::encrypt(
}
-std::size_t axolotl::Session::decrypt_max_plaintext_length(
+std::size_t axolotl::Ratchet::decrypt_max_plaintext_length(
std::size_t input_length
) {
return input_length;
}
-std::size_t axolotl::Session::decrypt(
+std::size_t axolotl::Ratchet::decrypt(
std::uint8_t const * input, std::size_t input_length,
std::uint8_t * plaintext, std::size_t max_plaintext_length
) {
diff --git a/tests/test_ratchet.cpp b/tests/test_ratchet.cpp
index 18c22e3..e262bfa 100644
--- a/tests/test_ratchet.cpp
+++ b/tests/test_ratchet.cpp
@@ -41,8 +41,8 @@ std::uint8_t shared_secret[] = "A secret";
{ /* Send/Receive test case */
TestCase test_case("Axolotl Send/Receive");
-axolotl::Session alice(kdf_info, cipher);
-axolotl::Session bob(kdf_info, cipher);
+axolotl::Ratchet alice(kdf_info, cipher);
+axolotl::Ratchet bob(kdf_info, cipher);
alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key);
bob.initialise_as_alice(shared_secret, sizeof(shared_secret) - 1, bob_key);
@@ -110,8 +110,8 @@ std::size_t encrypt_length, decrypt_length;
TestCase test_case("Axolotl Out of Order");
-axolotl::Session alice(kdf_info, cipher);
-axolotl::Session bob(kdf_info, cipher);
+axolotl::Ratchet alice(kdf_info, cipher);
+axolotl::Ratchet bob(kdf_info, cipher);
alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key);
bob.initialise_as_alice(shared_secret, sizeof(shared_secret) - 1, bob_key);