diff --git a/include/mtxclient/crypto/client.hpp b/include/mtxclient/crypto/client.hpp index fb7ede0dd6113bc753de7ac5f012ce8a3316332e..0d62329ab80596164f5e7acbfd45280f79f19401 100644 --- a/include/mtxclient/crypto/client.hpp +++ b/include/mtxclient/crypto/client.hpp @@ -31,79 +31,80 @@ namespace crypto { //! Data representation used to interact with libolm. using BinaryBuf = std::vector<uint8_t>; -enum class OlmErrorCode { - UNKNOWN_ERROR = - 1, - SUCCESS, - NOT_ENOUGH_RANDOM, - OUTPUT_BUFFER_TOO_SMALL, - BAD_MESSAGE_VERSION, - BAD_MESSAGE_FORMAT, - BAD_MESSAGE_MAC, - BAD_MESSAGE_KEY_ID, - INVALID_BASE64, - BAD_ACCOUNT_KEY, - UNKNOWN_PICKLE_VERSION, - CORRUPTED_PICKLE, - BAD_SESSION_KEY, - UNKNOWN_MESSAGE_INDEX, - BAD_LEGACY_ACCOUNT_PICKLE, - BAD_SIGNATURE, - OLM_INPUT_BUFFER_TOO_SMALL, - OLM_SAS_THEIR_KEY_NOT_SET +enum class OlmErrorCode +{ + UNKNOWN_ERROR = -1, + SUCCESS, + NOT_ENOUGH_RANDOM, + OUTPUT_BUFFER_TOO_SMALL, + BAD_MESSAGE_VERSION, + BAD_MESSAGE_FORMAT, + BAD_MESSAGE_MAC, + BAD_MESSAGE_KEY_ID, + INVALID_BASE64, + BAD_ACCOUNT_KEY, + UNKNOWN_PICKLE_VERSION, + CORRUPTED_PICKLE, + BAD_SESSION_KEY, + UNKNOWN_MESSAGE_INDEX, + BAD_LEGACY_ACCOUNT_PICKLE, + BAD_SIGNATURE, + OLM_INPUT_BUFFER_TOO_SMALL, + OLM_SAS_THEIR_KEY_NOT_SET }; //! Errors returned by the olm library class olm_exception : public std::exception { - public: - olm_exception(std::string func, OlmSession *s) - : olm_exception(std::move(func), std::string(olm_session_last_error(s))) - {} +public: + olm_exception(std::string func, OlmSession *s) + : olm_exception(std::move(func), std::string(olm_session_last_error(s))) + {} - olm_exception(std::string func, OlmAccount *acc) - : olm_exception(std::move(func), std::string(olm_account_last_error(acc))) - {} + olm_exception(std::string func, OlmAccount *acc) + : olm_exception(std::move(func), std::string(olm_account_last_error(acc))) + {} - olm_exception(std::string func, OlmUtility *util) - : olm_exception(std::move(func), std::string(olm_utility_last_error(util))) - {} + olm_exception(std::string func, OlmUtility *util) + : olm_exception(std::move(func), std::string(olm_utility_last_error(util))) + {} - olm_exception(std::string func, OlmPkDecryption *s) - : olm_exception(std::move(func), std::string(olm_pk_decryption_last_error(s))) - {} + olm_exception(std::string func, OlmPkDecryption *s) + : olm_exception(std::move(func), std::string(olm_pk_decryption_last_error(s))) + {} - olm_exception(std::string func, OlmPkSigning *s) - : olm_exception(std::move(func), std::string(olm_pk_signing_last_error(s))) - {} + olm_exception(std::string func, OlmPkSigning *s) + : olm_exception(std::move(func), std::string(olm_pk_signing_last_error(s))) + {} - olm_exception(std::string func, OlmOutboundGroupSession *s) - : olm_exception(std::move(func), std::string(olm_outbound_group_session_last_error(s))) - {} + olm_exception(std::string func, OlmOutboundGroupSession *s) + : olm_exception(std::move(func), std::string(olm_outbound_group_session_last_error(s))) + {} - olm_exception(std::string func, OlmInboundGroupSession *s) - : olm_exception(std::move(func), std::string(olm_inbound_group_session_last_error(s))) - {} + olm_exception(std::string func, OlmInboundGroupSession *s) + : olm_exception(std::move(func), std::string(olm_inbound_group_session_last_error(s))) + {} - olm_exception(std::string func, OlmSAS *s) - : olm_exception(std::move(func), std::string(olm_sas_last_error(s))) - {} + olm_exception(std::string func, OlmSAS *s) + : olm_exception(std::move(func), std::string(olm_sas_last_error(s))) + {} - //! Returns a description of the olm error. - const char *what() const noexcept override { return msg_.c_str(); } + //! Returns a description of the olm error. + const char *what() const noexcept override { return msg_.c_str(); } - //! Returns an error code reconstructed from the error string returned by olm - OlmErrorCode error_code() const noexcept { return ec_; } + //! Returns an error code reconstructed from the error string returned by olm + OlmErrorCode error_code() const noexcept { return ec_; } - private: - olm_exception(std::string &&func, std::string error_string) - : msg_(func + ": " + error_string) - , ec_(ec_from_string(error_string)) - {} +private: + olm_exception(std::string &&func, std::string error_string) + : msg_(func + ": " + error_string) + , ec_(ec_from_string(error_string)) + {} - OlmErrorCode ec_from_string(std::string_view); + OlmErrorCode ec_from_string(std::string_view); std::string msg_; - OlmErrorCode ec_ = OlmErrorCode::UNKNOWN_ERROR; + OlmErrorCode ec_ = OlmErrorCode::UNKNOWN_ERROR; }; //! Serialize olm objects into strings encrypted using key to persist them on non volatile storage. diff --git a/include/mtxclient/crypto/objects.hpp b/include/mtxclient/crypto/objects.hpp index faf1a22cdb3deda772829098e680f7c1b778a581..5c11df8900b6b04c4667072bb49992158ba2cbb5 100644 --- a/include/mtxclient/crypto/objects.hpp +++ b/include/mtxclient/crypto/objects.hpp @@ -28,19 +28,48 @@ namespace crypto { /// ``` struct OlmDeleter { - void operator()(OlmAccount *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } - void operator()(OlmUtility *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } + void operator()(OlmAccount *ptr) + { + olm_clear_account(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } + void operator()(OlmUtility *ptr) + { + olm_clear_utility(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } - void operator()(OlmPkDecryption *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } - void operator()(OlmPkSigning *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } + void operator()(OlmPkDecryption *ptr) + { + olm_clear_pk_decryption(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } + void operator()(OlmPkSigning *ptr) + { + olm_clear_pk_signing(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } - void operator()(OlmSession *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } + void operator()(OlmSession *ptr) + { + olm_clear_session(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } void operator()(OlmOutboundGroupSession *ptr) { + olm_clear_outbound_group_session(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } + void operator()(OlmInboundGroupSession *ptr) + { + olm_clear_inbound_group_session(ptr); + delete[](reinterpret_cast<uint8_t *>(ptr)); + } + void operator()(OlmSAS *ptr) + { + olm_clear_sas(ptr); delete[](reinterpret_cast<uint8_t *>(ptr)); } - void operator()(OlmInboundGroupSession *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } - void operator()(OlmSAS *ptr) { delete[](reinterpret_cast<uint8_t *>(ptr)); } }; //! Olm type for Short Authentication Strings.