rename Session to Ratchet

This commit is contained in:
Mark Haines 2015-06-11 16:10:55 +01:00
parent e44c82a7b4
commit bcb05d1a99
3 changed files with 25 additions and 28 deletions

View file

@ -75,9 +75,9 @@ struct KdfInfo {
}; };
struct Session { struct Ratchet {
Session( Ratchet(
KdfInfo const & kdf_info, KdfInfo const & kdf_info,
Cipher const & ratchet_cipher Cipher const & ratchet_cipher
); );
@ -126,18 +126,15 @@ struct Session {
/** The number of bytes needed to persist the current session. */ /** The number of bytes needed to persist the current session. */
std::size_t pickle_max_output_length(); 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. */ * Returns the number of output bytes used. */
std::size_t pickle( std::size_t pickle(
std::uint8_t const * key, std::size_t key_length,
std::uint8_t * output, std::size_t max_output_length std::uint8_t * output, std::size_t max_output_length
); );
/** Loads a session from a sequence of bytes, decrypting using a key. /** Loads a session from a sequence of bytes.
* Returns 0 on success, or std::size_t(-1) on failure. The last_error * Returns 0 on success, or std::size_t(-1) on failure. */
* will be BAD_SESSION_KEY if the supplied key is incorrect. */
std::size_t unpickle( std::size_t unpickle(
std::uint8_t const * key, std::size_t key_length,
std::uint8_t * input, std::size_t input_length std::uint8_t * input, std::size_t input_length
); );

View file

@ -95,7 +95,7 @@ std::size_t verify_mac_and_decrypt(
std::size_t verify_mac_and_decrypt_for_existing_chain( std::size_t verify_mac_and_decrypt_for_existing_chain(
axolotl::Session const & session, axolotl::Ratchet const & session,
axolotl::ChainKey const & chain, axolotl::ChainKey const & chain,
axolotl::MessageReader const & reader, axolotl::MessageReader const & reader,
std::uint8_t * plaintext, std::size_t max_plaintext_length 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( std::size_t verify_mac_and_decrypt_for_new_chain(
axolotl::Session const & session, axolotl::Ratchet const & session,
axolotl::MessageReader const & reader, axolotl::MessageReader const & reader,
std::uint8_t * plaintext, std::size_t max_plaintext_length 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 } // namespace
axolotl::Session::Session( axolotl::Ratchet::Ratchet(
axolotl::KdfInfo const & kdf_info, axolotl::KdfInfo const & kdf_info,
Cipher const & ratchet_cipher Cipher const & ratchet_cipher
) : kdf_info(kdf_info), ) : 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, std::uint8_t const * shared_secret, std::size_t shared_secret_length,
axolotl::Curve25519PublicKey const & their_ratchet_key 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, std::uint8_t const * shared_secret, std::size_t shared_secret_length,
axolotl::Curve25519KeyPair const & our_ratchet_key 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 counter_length = 4;
std::size_t send_chain_length = counter_length + 64 + 32; std::size_t send_chain_length = counter_length + 64 + 32;
std::size_t recv_chain_length = counter_length + 32 + 32; std::size_t recv_chain_length = counter_length + 32 + 32;
@ -264,8 +264,7 @@ std::uint8_t * unpickle_bytes(
} // namespace } // namespace
std::size_t axolotl::Session::pickle( std::size_t axolotl::Ratchet::pickle(
std::uint8_t const * key, std::size_t key_length,
std::uint8_t * output, std::size_t max_output_length std::uint8_t * output, std::size_t max_output_length
) { ) {
std::uint8_t * pos = output; std::uint8_t * pos = output;
@ -297,8 +296,7 @@ std::size_t axolotl::Session::pickle(
return pos - output; return pos - output;
} }
std::size_t axolotl::Session::unpickle( std::size_t axolotl::Ratchet::unpickle(
std::uint8_t const * key, std::size_t key_length,
std::uint8_t * input, std::size_t input_length 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 plaintext_length
) { ) {
std::size_t counter = 0; std::size_t counter = 0;
if (!sender_chain.empty()) { if (!sender_chain.empty()) {
counter = sender_chain[0].chain_key.index; 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( return axolotl::encode_message_length(
counter, KEY_LENGTH, padded, ratchet_cipher.mac_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; 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 * plaintext, std::size_t plaintext_length,
std::uint8_t const * random, std::size_t random_length, std::uint8_t const * random, std::size_t random_length,
std::uint8_t * output, std::size_t max_output_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 std::size_t input_length
) { ) {
return 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 const * input, std::size_t input_length,
std::uint8_t * plaintext, std::size_t max_plaintext_length std::uint8_t * plaintext, std::size_t max_plaintext_length
) { ) {

View file

@ -41,8 +41,8 @@ std::uint8_t shared_secret[] = "A secret";
{ /* Send/Receive test case */ { /* Send/Receive test case */
TestCase test_case("Axolotl Send/Receive"); TestCase test_case("Axolotl Send/Receive");
axolotl::Session alice(kdf_info, cipher); axolotl::Ratchet alice(kdf_info, cipher);
axolotl::Session bob(kdf_info, cipher); axolotl::Ratchet bob(kdf_info, cipher);
alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key); alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key);
bob.initialise_as_alice(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"); TestCase test_case("Axolotl Out of Order");
axolotl::Session alice(kdf_info, cipher); axolotl::Ratchet alice(kdf_info, cipher);
axolotl::Session bob(kdf_info, cipher); axolotl::Ratchet bob(kdf_info, cipher);
alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key); alice.initialise_as_bob(shared_secret, sizeof(shared_secret) - 1, bob_key);
bob.initialise_as_alice(shared_secret, sizeof(shared_secret) - 1, bob_key); bob.initialise_as_alice(shared_secret, sizeof(shared_secret) - 1, bob_key);