aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/axolotl/axolotl.hh295
-rw-r--r--include/olm/account.hh (renamed from include/axolotl/account.hh)16
-rw-r--r--include/olm/base64.hh (renamed from include/axolotl/base64.hh)4
-rw-r--r--include/olm/cipher.hh (renamed from include/axolotl/cipher.hh)8
-rw-r--r--include/olm/crypto.hh (renamed from include/axolotl/crypto.hh)10
-rw-r--r--include/olm/error.hh (renamed from include/axolotl/error.hh)4
-rw-r--r--include/olm/list.hh (renamed from include/axolotl/list.hh)10
-rw-r--r--include/olm/memory.hh (renamed from include/axolotl/memory.hh)4
-rw-r--r--include/olm/message.hh (renamed from include/axolotl/message.hh)4
-rw-r--r--include/olm/olm.hh295
-rw-r--r--include/olm/pickle.hh (renamed from include/axolotl/pickle.hh)20
-rw-r--r--include/olm/ratchet.hh (renamed from include/axolotl/ratchet.hh)10
-rw-r--r--include/olm/session.hh (renamed from include/axolotl/session.hh)12
13 files changed, 346 insertions, 346 deletions
diff --git a/include/axolotl/axolotl.hh b/include/axolotl/axolotl.hh
deleted file mode 100644
index 90065a7..0000000
--- a/include/axolotl/axolotl.hh
+++ /dev/null
@@ -1,295 +0,0 @@
-/* Copyright 2015 OpenMarket Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef AXOLOTL_HH_
-#define AXOLOTL_HH_
-
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static const size_t AXOLOTL_MESSAGE_TYPE_PRE_KEY = 0;
-static const size_t AXOLOTL_MESSAGE_TYPE_MESSAGE = 1;
-
-struct AxolotlAccount;
-struct AxolotlSession;
-
-/** The size of an account object in bytes */
-size_t axolotl_account_size();
-
-/** The size of a session object in bytes */
-size_t axolotl_session_size();
-
-/** Initialise an account object using the supplied memory
- * The supplied memory must be at least axolotl_account_size() bytes */
-AxolotlAccount * axolotl_account(
- void * memory
-);
-
-/** Initialise a session object using the supplied memory
- * The supplied memory must be at least axolotl_session_size() bytes */
-AxolotlSession * axolotl_session(
- void * memory
-);
-
-/** The value that axolotl will return from a function if there was an error */
-size_t axolotl_error();
-
-/** A null terminated string describing the most recent error to happen to an
- * account */
-const char * axolotl_account_last_error(
- AxolotlSession * account
-);
-
-/** A null terminated string describing the most recent error to happen to a
- * session */
-const char * axolotl_session_last_error(
- AxolotlSession * session
-);
-
-/** Returns the number of bytes needed to store an account */
-size_t axolotl_pickle_account_length(
- AxolotlAccount * account
-);
-
-/** Returns the number of bytes needed to store a session */
-size_t axolotl_pickle_session_length(
- AxolotlSession * session
-);
-
-/** Stores an account as a base64 string. Encrypts the account using the
- * supplied key. Returns the length of the pickled account on success.
- * Returns axolotl_error() on failure. If the pickle output buffer
- * is smaller than axolotl_pickle_account_length() then
- * axolotl_account_last_error() will be "OUTPUT_BUFFER_TOO_SMALL" */
-size_t axolotl_pickle_account(
- AxolotlAccount * account,
- void const * key, size_t key_length,
- void * pickled, size_t pickled_length
-);
-
-/** Stores a session as a base64 string. Encrypts the session using the
- * supplied key. Returns the length of the pickled session on success.
- * Returns axolotl_error() on failure. If the pickle output buffer
- * is smaller than axolotl_pickle_session_length() then
- * axolotl_session_last_error() will be "OUTPUT_BUFFER_TOO_SMALL" */
-size_t axolotl_pickle_session(
- AxolotlSession * session,
- void const * key, size_t key_length,
- void * pickled, size_t pickled_length
-);
-
-/** Loads an account from a pickled base64 string. Decrypts the account using
- * the supplied key. Returns axolotl_error() on failure. If the key doesn't
- * match the one used to encrypt the account then axolotl_account_last_error()
- * will be "BAD_ACCOUNT_KEY". If the base64 couldn't be decoded then
- * axolotl_account_last_error() will be "INVALID_BASE64". The input pickled
- * buffer is destroyed */
-size_t axolotl_unpickle_account(
- AxolotlAccount * account,
- void const * key, size_t key_length,
- void * pickled, size_t pickled_length
-);
-
-/** Loads a session from a pickled base64 string. Decrypts the session using
- * the supplied key. Returns axolotl_error() on failure. If the key doesn't
- * match the one used to encrypt the account then axolotl_session_last_error()
- * will be "BAD_ACCOUNT_KEY". If the base64 couldn't be decoded then
- * axolotl_session_last_error() will be "INVALID_BASE64". The input pickled
- * buffer is destroyed */
-size_t axolotl_unpickle_session(
- AxolotlSession * session,
- void const * key, size_t key_length,
- void * pickled, size_t pickled_length
-);
-
-/** The number of random bytes needed to create an account.*/
-size_t axolotl_create_account_random_length(
- AxolotlAccount * account
-);
-
-/** Creates a new account. Returns axolotl_error() on failure. If weren't
- * enough random bytes then axolotl_account_last_error() will be
- * "NOT_ENOUGH_RANDOM" */
-size_t axolotl_create_account(
- AxolotlAccount * account,
- void const * random, size_t random_length
-);
-
-/** The size of the output buffer needed to hold the identity keys */
-size_t axolotl_account_identity_keys_length(
- AxolotlAccount * account
-);
-
-/** Writes the public parts of the identity keys for the account into the
- * identity_keys output buffer. The output is formatted as though it was
- * created with sprintf(output, "[[%10d,\"%43s\"]\n]", key_id, key_base64).
- * The output can either be parsed as fixed width using the above format or by
- * a JSON parser. Returns axolotl_error() on failure. If the identity_keys
- * buffer was too small then axolotl_account_last_error() will be
- * "OUTPUT_BUFFER_TOO_SMALL". */
-size_t axolotl_account_identity_keys(
- AxolotlAccount * account,
- void * identity_keys, size_t identity_key_length
-);
-
-/** The size of the output buffer needed to hold the one time keys */
-size_t axolotl_account_one_time_keys_length(
- AxolotlAccount * account
-);
-
-/** Writes the public parts of the one time keys for the account into the
- * one_time_keys output buffer. The first key will be formatted as though it was
- * created with sprintf(output, "[[%10d,\"%43s\"]\n", key_id, key_base64).
- * subsequent keys are formatted with ",[%10d,\"%43s\"]\n". The final byte of
- * output will be "]". The output can either be parsed as fixed width using
- * the above format or by a JSON parser. Returns axolotl_error() on failure.
- * If the one_time_keys buffer was too small then axolotl_account_last_error()
- * will be "OUTPUT_BUFFER_TOO_SMALL". */
-size_t axolotl_account_one_time_keys(
- AxolotlAccount * account,
- void * one_time_keys, size_t one_time_keys_length
-);
-
-/* TODO: Add methods for marking keys as used, generating new keys, and
- * tracking which keys have been uploaded to the central servers */
-
-/** The number of random bytes needed to create an outbound session */
-size_t axolotl_create_outbound_session_random_length(
- AxolotlSession * session
-);
-
-/** Creates a new out-bound session for sending messages to a given identity_key
- * and one_time_key. Returns axolotl_error() on failure. If the keys couldn't be
- * decoded as base64 then axolotl_session_last_error() will be "INVALID_BASE64"
- * If there weren't enough random bytes then axolotl_session_last_error() will
- * be "NOT_ENOUGH_RANDOM". */
-size_t axolotl_create_outbound_session(
- AxolotlSession * session,
- AxolotlAccount * account,
- void const * their_identity_key, size_t their_identity_key_length,
- unsigned their_one_time_key_id,
- void const * their_one_time_key, size_t their_one_time_key_length,
- void const * random, size_t random_length
-);
-
-/** Create a new in-bound session for sending/receiving messages from an
- * incoming PRE_KEY message. Returns axolotl_error() on failure. If the base64
- * couldn't be decoded then axolotl_session_last_error will be "INVALID_BASE64".
- * If the message was for an unsupported protocol version then
- * axolotl_session_last_error() will be "BAD_MESSAGE_VERSION". If the message
- * couldn't be decoded then then axolotl_session_last_error() will be
- * "BAD_MESSAGE_FORMAT". If the message refers to an unknown one time
- * key then axolotl_session_last_error() will be "BAD_MESSAGE_KEY_ID". */
-size_t axolotl_create_inbound_session(
- AxolotlSession * session,
- AxolotlAccount * account,
- void * one_time_key_message, size_t message_length
-);
-
-/** Checks if the PRE_KEY message is for this in-bound session. This can happen
- * if multiple messages are sent to this account before this account sends a
- * message in reply. Returns axolotl_error() on failure. If the base64
- * couldn't be decoded then axolotl_session_last_error will be "INVALID_BASE64".
- * If the message was for an unsupported protocol version then
- * axolotl_session_last_error() will be "BAD_MESSAGE_VERSION". If the message
- * couldn't be decoded then then axolotl_session_last_error() will be
- * "BAD_MESSAGE_FORMAT". */
-size_t axolotl_matches_inbound_session(
- AxolotlSession * session,
- void * one_time_key_message, size_t message_length
-);
-
-/** Removes the one time keys that the session used from the account. Returns
- * axolotl_error() on failure. If the account doesn't have any matching one time
- * keys then axolotl_account_last_error() will be "BAD_MESSAGE_KEY_ID". */
-size_t axolotl_remove_one_time_keys(
- AxolotlAccount * account,
- AxolotlSession * session
-);
-
-/** The type of the next message that axolotl_encrypt() will return. Returns
- * AXOLOTL_MESSAGE_TYPE_PRE_KEY if the message will be a PRE_KEY message.
- * Returns AXOLOTL_MESSAGE_TYPE_MESSAGE if the message will be a normal message.
- * Returns axolotl_error on failure. */
-size_t axolotl_encrypt_message_type(
- AxolotlSession * session
-);
-
-/** The number of random bytes needed to encrypt the next message. */
-size_t axolotl_encrypt_random_length(
- AxolotlSession * session
-);
-
-/** The size of the next message in bytes for the given number of plain-text
- * bytes. */
-size_t axolotl_encrypt_message_length(
- AxolotlSession * session,
- size_t plaintext_length
-);
-
-/** Encrypts a message using the session. Returns the length of the message in
- * bytes on success. Writes the message as base64 into the message buffer.
- * Returns axolotl_error() on failure. If the message buffer is too small then
- * axolotl_session_last_error() will be "OUTPUT_BUFFER_TOO_SMALL". If there
- * weren't enough random bytes then axolotl_session_last_error() will be
- * "NOT_ENOUGH_RANDOM". */
-size_t axolotl_encrypt(
- AxolotlSession * session,
- void const * plaintext, size_t plaintext_length,
- void const * random, size_t random_length,
- void * message, size_t message_length
-);
-
-/** The maximum number of bytes of plain-text a given message could decode to.
- * The actual size could be different due to padding. The input message buffer
- * is destroyed. Returns axolotl_error() on failure. If the message base64
- * couldn't be decoded then axolotl_session_last_error() will be
- * "INVALID_BASE64". If the message is for an unsupported version of the
- * protocol then axolotl_session_last_error() will be "BAD_MESSAGE_VERSION".
- * If the message couldn't be decoded then axolotl_session_last_error() will be
- * "BAD_MESSAGE_FORMAT". */
-size_t axolotl_decrypt_max_plaintext_length(
- AxolotlSession * session,
- size_t message_type,
- void * message, size_t message_length
-);
-
-/** Decrypts a message using the session. The input message buffer is destroyed.
- * Returns the length of the plain-text on success. Returns axolotl_error() on
- * failure. If the plain-text buffer is smaller than
- * axolotl_decrypt_max_plaintext_length() then axolotl_session_last_error()
- * will be "OUTPUT_BUFFER_TOO_SMALL". If the base64 couldn't be decoded then
- * axolotl_session_last_error() will be "INVALID_BASE64". If the message is for
- * an unsupported version of the protocol then axolotl_session_last_error() will
- * be "BAD_MESSAGE_VERSION". If the message couldn't be decoded then
- * axolotl_session_last_error() will be BAD_MESSAGE_FORMAT".
- * If the MAC on the message was invalid then axolotl_session_last_error() will
- * be "BAD_MESSAGE_MAC". */
-size_t axolotl_decrypt(
- AxolotlSession * session,
- size_t message_type,
- void * message, size_t message_length,
- void * plaintext, size_t max_plaintext_length
-);
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* AXOLOTL_HH_ */
diff --git a/include/axolotl/account.hh b/include/olm/account.hh
index 54621fd..8094a25 100644
--- a/include/axolotl/account.hh
+++ b/include/olm/account.hh
@@ -12,16 +12,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef AXOLOTL_ACCOUNT_HH_
-#define AXOLOTL_ACCOUNT_HH_
+#ifndef OLM_ACCOUNT_HH_
+#define OLM_ACCOUNT_HH_
-#include "axolotl/list.hh"
-#include "axolotl/crypto.hh"
-#include "axolotl/error.hh"
+#include "olm/list.hh"
+#include "olm/crypto.hh"
+#include "olm/error.hh"
#include <cstdint>
-namespace axolotl {
+namespace olm {
struct LocalKey {
@@ -79,6 +79,6 @@ std::uint8_t const * unpickle(
);
-} // namespace axolotl
+} // namespace olm
-#endif /* AXOLOTL_ACCOUNT_HH_ */
+#endif /* OLM_ACCOUNT_HH_ */
diff --git a/include/axolotl/base64.hh b/include/olm/base64.hh
index 361a558..0a7435b 100644
--- a/include/axolotl/base64.hh
+++ b/include/olm/base64.hh
@@ -18,7 +18,7 @@
#include <cstddef>
#include <cstdint>
-namespace axolotl {
+namespace olm {
std::size_t encode_base64_length(
@@ -43,7 +43,7 @@ void decode_base64(
);
-} // namespace axolotl
+} // namespace olm
#endif /* AXOLOLT_BASE64_HH_ */
diff --git a/include/axolotl/cipher.hh b/include/olm/cipher.hh
index 5a077aa..f71b3af 100644
--- a/include/axolotl/cipher.hh
+++ b/include/olm/cipher.hh
@@ -13,13 +13,13 @@
* limitations under the License.
*/
-#ifndef AXOLOTL_CIPHER_HH_
-#define AXOLOTL_CIPHER_HH_
+#ifndef OLM_CIPHER_HH_
+#define OLM_CIPHER_HH_
#include <cstdint>
#include <cstddef>
-namespace axolotl {
+namespace olm {
class Cipher {
public:
@@ -125,4 +125,4 @@ private:
} // namespace
-#endif /* AXOLOTL_CIPHER_HH_ */
+#endif /* OLM_CIPHER_HH_ */
diff --git a/include/axolotl/crypto.hh b/include/olm/crypto.hh
index 7564e8f..b299e12 100644
--- a/include/axolotl/crypto.hh
+++ b/include/olm/crypto.hh
@@ -12,13 +12,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef AXOLOTL_CRYPTO_HH_
-#define AXOLOTL_CRYPTO_HH_
+#ifndef OLM_CRYPTO_HH_
+#define OLM_CRYPTO_HH_
#include <cstdint>
#include <cstddef>
-namespace axolotl {
+namespace olm {
struct Curve25519PublicKey {
@@ -143,6 +143,6 @@ void hkdf_sha256(
std::uint8_t * output, std::size_t output_length
);
-} // namespace axolotl
+} // namespace olm
-#endif /* AXOLOTL_CRYPTO_HH_ */
+#endif /* OLM_CRYPTO_HH_ */
diff --git a/include/axolotl/error.hh b/include/olm/error.hh
index 781705e..960de72 100644
--- a/include/axolotl/error.hh
+++ b/include/olm/error.hh
@@ -15,7 +15,7 @@
#ifndef ERROR_HH_
#define ERROR_HH_
-namespace axolotl {
+namespace olm {
enum struct ErrorCode {
SUCCESS = 0, /*!< There wasn't an error */
@@ -29,6 +29,6 @@ enum struct ErrorCode {
BAD_ACCOUNT_KEY = 8, /*!< The supplied account key is invalid */
};
-} // namespace axolotl
+} // namespace olm
#endif /* ERROR_HH_ */
diff --git a/include/axolotl/list.hh b/include/olm/list.hh
index 604f00f..e4bf951 100644
--- a/include/axolotl/list.hh
+++ b/include/olm/list.hh
@@ -12,12 +12,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef AXOLOTL_LIST_HH_
-#define AXOLOTL_LIST_HH_
+#ifndef OLM_LIST_HH_
+#define OLM_LIST_HH_
#include <cstddef>
-namespace axolotl {
+namespace olm {
template<typename T, std::size_t max_size>
class List {
@@ -114,6 +114,6 @@ private:
T _data[max_size];
};
-} // namespace axolotl
+} // namespace olm
-#endif /* AXOLOTL_LIST_HH_ */
+#endif /* OLM_LIST_HH_ */
diff --git a/include/axolotl/memory.hh b/include/olm/memory.hh
index 68b577d..b19c74b 100644
--- a/include/axolotl/memory.hh
+++ b/include/olm/memory.hh
@@ -15,7 +15,7 @@
#include <cstddef>
#include <cstdint>
-namespace axolotl {
+namespace olm {
/** Clear the memory held in the buffer */
void unset(
@@ -35,4 +35,4 @@ bool is_equal(
std::size_t length
);
-} // namespace axolotl
+} // namespace olm
diff --git a/include/axolotl/message.hh b/include/olm/message.hh
index 4d7a1c7..fefdd20 100644
--- a/include/axolotl/message.hh
+++ b/include/olm/message.hh
@@ -16,7 +16,7 @@
#include <cstdint>
-namespace axolotl {
+namespace olm {
/**
* The length of the buffer needed to hold a message.
@@ -123,4 +123,4 @@ void decode_one_time_key_message(
);
-} // namespace axolotl
+} // namespace olm
diff --git a/include/olm/olm.hh b/include/olm/olm.hh
new file mode 100644
index 0000000..fca35c4
--- /dev/null
+++ b/include/olm/olm.hh
@@ -0,0 +1,295 @@
+/* Copyright 2015 OpenMarket Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef OLM_HH_
+#define OLM_HH_
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const size_t OLM_MESSAGE_TYPE_PRE_KEY = 0;
+static const size_t OLM_MESSAGE_TYPE_MESSAGE = 1;
+
+struct OlmAccount;
+struct OlmSession;
+
+/** The size of an account object in bytes */
+size_t olm_account_size();
+
+/** The size of a session object in bytes */
+size_t olm_session_size();
+
+/** Initialise an account object using the supplied memory
+ * The supplied memory must be at least olm_account_size() bytes */
+OlmAccount * olm_account(
+ void * memory
+);
+
+/** Initialise a session object using the supplied memory
+ * The supplied memory must be at least olm_session_size() bytes */
+OlmSession * olm_session(
+ void * memory
+);
+
+/** The value that olm will return from a function if there was an error */
+size_t olm_error();
+
+/** A null terminated string describing the most recent error to happen to an
+ * account */
+const char * olm_account_last_error(
+ OlmSession * account
+);
+
+/** A null terminated string describing the most recent error to happen to a
+ * session */
+const char * olm_session_last_error(
+ OlmSession * session
+);
+
+/** Returns the number of bytes needed to store an account */
+size_t olm_pickle_account_length(
+ OlmAccount * account
+);
+
+/** Returns the number of bytes needed to store a session */
+size_t olm_pickle_session_length(
+ OlmSession * session
+);
+
+/** Stores an account as a base64 string. Encrypts the account using the
+ * supplied key. Returns the length of the pickled account on success.
+ * Returns olm_error() on failure. If the pickle output buffer
+ * is smaller than olm_pickle_account_length() then
+ * olm_account_last_error() will be "OUTPUT_BUFFER_TOO_SMALL" */
+size_t olm_pickle_account(
+ OlmAccount * account,
+ void const * key, size_t key_length,
+ void * pickled, size_t pickled_length
+);
+
+/** Stores a session as a base64 string. Encrypts the session using the
+ * supplied key. Returns the length of the pickled session on success.
+ * Returns olm_error() on failure. If the pickle output buffer
+ * is smaller than olm_pickle_session_length() then
+ * olm_session_last_error() will be "OUTPUT_BUFFER_TOO_SMALL" */
+size_t olm_pickle_session(
+ OlmSession * session,
+ void const * key, size_t key_length,
+ void * pickled, size_t pickled_length
+);
+
+/** Loads an account from a pickled base64 string. Decrypts the account using
+ * the supplied key. Returns olm_error() on failure. If the key doesn't
+ * match the one used to encrypt the account then olm_account_last_error()
+ * will be "BAD_ACCOUNT_KEY". If the base64 couldn't be decoded then
+ * olm_account_last_error() will be "INVALID_BASE64". The input pickled
+ * buffer is destroyed */
+size_t olm_unpickle_account(
+ OlmAccount * account,
+ void const * key, size_t key_length,
+ void * pickled, size_t pickled_length
+);
+
+/** Loads a session from a pickled base64 string. Decrypts the session using
+ * the supplied key. Returns olm_error() on failure. If the key doesn't
+ * match the one used to encrypt the account then olm_session_last_error()
+ * will be "BAD_ACCOUNT_KEY". If the base64 couldn't be decoded then
+ * olm_session_last_error() will be "INVALID_BASE64". The input pickled
+ * buffer is destroyed */
+size_t olm_unpickle_session(
+ OlmSession * session,
+ void const * key, size_t key_length,
+ void * pickled, size_t pickled_length
+);
+
+/** The number of random bytes needed to create an account.*/
+size_t olm_create_account_random_length(
+ OlmAccount * account
+);
+
+/** Creates a new account. Returns olm_error() on failure. If weren't
+ * enough random bytes then olm_account_last_error() will be
+ * "NOT_ENOUGH_RANDOM" */
+size_t olm_create_account(
+ OlmAccount * account,
+ void const * random, size_t random_length
+);
+
+/** The size of the output buffer needed to hold the identity keys */
+size_t olm_account_identity_keys_length(
+ OlmAccount * account
+);
+
+/** Writes the public parts of the identity keys for the account into the
+ * identity_keys output buffer. The output is formatted as though it was
+ * created with sprintf(output, "[[%10d,\"%43s\"]\n]", key_id, key_base64).
+ * The output can either be parsed as fixed width using the above format or by
+ * a JSON parser. Returns olm_error() on failure. If the identity_keys
+ * buffer was too small then olm_account_last_error() will be
+ * "OUTPUT_BUFFER_TOO_SMALL". */
+size_t olm_account_identity_keys(
+ OlmAccount * account,
+ void * identity_keys, size_t identity_key_length
+);
+
+/** The size of the output buffer needed to hold the one time keys */
+size_t olm_account_one_time_keys_length(
+ OlmAccount * account
+);
+
+/** Writes the public parts of the one time keys for the account into the
+ * one_time_keys output buffer. The first key will be formatted as though it was
+ * created with sprintf(output, "[[%10d,\"%43s\"]\n", key_id, key_base64).
+ * subsequent keys are formatted with ",[%10d,\"%43s\"]\n". The final byte of
+ * output will be "]". The output can either be parsed as fixed width using
+ * the above format or by a JSON parser. Returns olm_error() on failure.
+ * If the one_time_keys buffer was too small then olm_account_last_error()
+ * will be "OUTPUT_BUFFER_TOO_SMALL". */
+size_t olm_account_one_time_keys(
+ OlmAccount * account,
+ void * one_time_keys, size_t one_time_keys_length
+);
+
+/* TODO: Add methods for marking keys as used, generating new keys, and
+ * tracking which keys have been uploaded to the central servers */
+
+/** The number of random bytes needed to create an outbound session */
+size_t olm_create_outbound_session_random_length(
+ OlmSession * session
+);
+
+/** Creates a new out-bound session for sending messages to a given identity_key
+ * and one_time_key. Returns olm_error() on failure. If the keys couldn't be
+ * decoded as base64 then olm_session_last_error() will be "INVALID_BASE64"
+ * If there weren't enough random bytes then olm_session_last_error() will
+ * be "NOT_ENOUGH_RANDOM". */
+size_t olm_create_outbound_session(
+ OlmSession * session,
+ OlmAccount * account,
+ void const * their_identity_key, size_t their_identity_key_length,
+ unsigned their_one_time_key_id,
+ void const * their_one_time_key, size_t their_one_time_key_length,
+ void const * random, size_t random_length
+);
+
+/** Create a new in-bound session for sending/receiving messages from an
+ * incoming PRE_KEY message. Returns olm_error() on failure. If the base64
+ * couldn't be decoded then olm_session_last_error will be "INVALID_BASE64".
+ * If the message was for an unsupported protocol version then
+ * olm_session_last_error() will be "BAD_MESSAGE_VERSION". If the message
+ * couldn't be decoded then then olm_session_last_error() will be
+ * "BAD_MESSAGE_FORMAT". If the message refers to an unknown one time
+ * key then olm_session_last_error() will be "BAD_MESSAGE_KEY_ID". */
+size_t olm_create_inbound_session(
+ OlmSession * session,
+ OlmAccount * account,
+ void * one_time_key_message, size_t message_length
+);
+
+/** Checks if the PRE_KEY message is for this in-bound session. This can happen
+ * if multiple messages are sent to this account before this account sends a
+ * message in reply. Returns olm_error() on failure. If the base64
+ * couldn't be decoded then olm_session_last_error will be "INVALID_BASE64".
+ * If the message was for an unsupported protocol version then
+ * olm_session_last_error() will be "BAD_MESSAGE_VERSION". If the message
+ * couldn't be decoded then then olm_session_last_error() will be
+ * "BAD_MESSAGE_FORMAT". */
+size_t olm_matches_inbound_session(
+ OlmSession * session,
+ void * one_time_key_message, size_t message_length
+);
+
+/** Removes the one time keys that the session used from the account. Returns
+ * olm_error() on failure. If the account doesn't have any matching one time
+ * keys then olm_account_last_error() will be "BAD_MESSAGE_KEY_ID". */
+size_t olm_remove_one_time_keys(
+ OlmAccount * account,
+ OlmSession * session
+);
+
+/** The type of the next message that olm_encrypt() will return. Returns
+ * OLM_MESSAGE_TYPE_PRE_KEY if the message will be a PRE_KEY message.
+ * Returns OLM_MESSAGE_TYPE_MESSAGE if the message will be a normal message.
+ * Returns olm_error on failure. */
+size_t olm_encrypt_message_type(
+ OlmSession * session
+);
+
+/** The number of random bytes needed to encrypt the next message. */
+size_t olm_encrypt_random_length(
+ OlmSession * session
+);
+
+/** The size of the next message in bytes for the given number of plain-text
+ * bytes. */
+size_t olm_encrypt_message_length(
+ OlmSession * session,
+ size_t plaintext_length
+);
+
+/** Encrypts a message using the session. Returns the length of the message in
+ * bytes on success. Writes the message as base64 into the message buffer.
+ * Returns olm_error() on failure. If the message buffer is too small then
+ * olm_session_last_error() will be "OUTPUT_BUFFER_TOO_SMALL". If there
+ * weren't enough random bytes then olm_session_last_error() will be
+ * "NOT_ENOUGH_RANDOM". */
+size_t olm_encrypt(
+ OlmSession * session,
+ void const * plaintext, size_t plaintext_length,
+ void const * random, size_t random_length,
+ void * message, size_t message_length
+);
+
+/** The maximum number of bytes of plain-text a given message could decode to.
+ * The actual size could be different due to padding. The input message buffer
+ * is destroyed. Returns olm_error() on failure. If the message base64
+ * couldn't be decoded then olm_session_last_error() will be
+ * "INVALID_BASE64". If the message is for an unsupported version of the
+ * protocol then olm_session_last_error() will be "BAD_MESSAGE_VERSION".
+ * If the message couldn't be decoded then olm_session_last_error() will be
+ * "BAD_MESSAGE_FORMAT". */
+size_t olm_decrypt_max_plaintext_length(
+ OlmSession * session,
+ size_t message_type,
+ void * message, size_t message_length
+);
+
+/** Decrypts a message using the session. The input message buffer is destroyed.
+ * Returns the length of the plain-text on success. Returns olm_error() on
+ * failure. If the plain-text buffer is smaller than
+ * olm_decrypt_max_plaintext_length() then olm_session_last_error()
+ * will be "OUTPUT_BUFFER_TOO_SMALL". If the base64 couldn't be decoded then
+ * olm_session_last_error() will be "INVALID_BASE64". If the message is for
+ * an unsupported version of the protocol then olm_session_last_error() will
+ * be "BAD_MESSAGE_VERSION". If the message couldn't be decoded then
+ * olm_session_last_error() will be BAD_MESSAGE_FORMAT".
+ * If the MAC on the message was invalid then olm_session_last_error() will
+ * be "BAD_MESSAGE_MAC". */
+size_t olm_decrypt(
+ OlmSession * session,
+ size_t message_type,
+ void * message, size_t message_length,
+ void * plaintext, size_t max_plaintext_length
+);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* OLM_HH_ */
diff --git a/include/axolotl/pickle.hh b/include/olm/pickle.hh
index 8134971..1676e23 100644
--- a/include/axolotl/pickle.hh
+++ b/include/olm/pickle.hh
@@ -12,16 +12,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef AXOLOTL_PICKLE_HH_
-#define AXOLOTL_PICKLE_HH_
+#ifndef OLM_PICKLE_HH_
+#define OLM_PICKLE_HH_
-#include "axolotl/list.hh"
-#include "axolotl/crypto.hh"
+#include "olm/list.hh"
+#include "olm/crypto.hh"
#include <cstring>
#include <cstdint>
-namespace axolotl {
+namespace olm {
static std::size_t pickle_length(
const std::uint32_t & value
@@ -79,7 +79,7 @@ static std::uint8_t const * unpickle(
template<typename T, std::size_t max_size>
std::size_t pickle_length(
- axolotl::List<T, max_size> const & list
+ olm::List<T, max_size> const & list
) {
std::size_t length = pickle_length(std::uint32_t(list.size()));
for (auto const & value : list) {
@@ -92,7 +92,7 @@ std::size_t pickle_length(
template<typename T, std::size_t max_size>
std::uint8_t * pickle(
std::uint8_t * pos,
- axolotl::List<T, max_size> const & list
+ olm::List<T, max_size> const & list
) {
pos = pickle(pos, std::uint32_t(list.size()));
for (auto const & value : list) {
@@ -105,7 +105,7 @@ std::uint8_t * pickle(
template<typename T, std::size_t max_size>
std::uint8_t const * unpickle(
std::uint8_t const * pos, std::uint8_t const * end,
- axolotl::List<T, max_size> & list
+ olm::List<T, max_size> & list
) {
std::uint32_t size;
pos = unpickle(pos, end, size);
@@ -170,9 +170,9 @@ std::uint8_t const * unpickle(
);
-} // namespace axolotl
+} // namespace olm
-#endif /* AXOLOTL_PICKLE_HH */
+#endif /* OLM_PICKLE_HH */
diff --git a/include/axolotl/ratchet.hh b/include/olm/ratchet.hh
index 0874cf0..7274255 100644
--- a/include/axolotl/ratchet.hh
+++ b/include/olm/ratchet.hh
@@ -13,11 +13,11 @@
* limitations under the License.
*/
-#include "axolotl/crypto.hh"
-#include "axolotl/list.hh"
-#include "axolotl/error.hh"
+#include "olm/crypto.hh"
+#include "olm/list.hh"
+#include "olm/error.hh"
-namespace axolotl {
+namespace olm {
class Cipher;
@@ -174,4 +174,4 @@ std::uint8_t const * unpickle(
);
-} // namespace axolotl
+} // namespace olm
diff --git a/include/axolotl/session.hh b/include/olm/session.hh
index 17f1653..a0aff08 100644
--- a/include/axolotl/session.hh
+++ b/include/olm/session.hh
@@ -12,12 +12,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef AXOLOTL_SESSION_HH_
-#define AXOLOTL_SESSION_HH_
+#ifndef OLM_SESSION_HH_
+#define OLM_SESSION_HH_
-#include "axolotl/ratchet.hh"
+#include "olm/ratchet.hh"
-namespace axolotl {
+namespace olm {
class Account;
@@ -109,6 +109,6 @@ std::uint8_t const * unpickle(
);
-} // namespace axolotl
+} // namespace olm
-#endif /* AXOLOTL_SESSION_HH_ */
+#endif /* OLM_SESSION_HH_ */