std::shared_ptr<Tox_Pass_Key> Core::createPasskey(const QString& password, uint8_t* salt) { std::shared_ptr<Tox_Pass_Key> encryptionKey(tox_pass_key_new(), tox_pass_key_free); CString str(password); if (salt) tox_pass_key_derive_with_salt(encryptionKey.get(), str.data(), str.size(), salt, nullptr); else tox_pass_key_derive(encryptionKey.get(), str.data(), str.size(), nullptr); return encryptionKey; }
/* Encrypts the given data with the given passphrase. The output array must be * at least data_len + TOX_PASS_ENCRYPTION_EXTRA_LENGTH bytes long. This delegates * to tox_derive_key and tox_pass_key_encrypt. * * returns true on success */ bool tox_pass_encrypt(const uint8_t *data, size_t data_len, const uint8_t *passphrase, size_t pplength, uint8_t *out, TOX_ERR_ENCRYPTION *error) { Tox_Pass_Key key; TOX_ERR_KEY_DERIVATION _error; if (!tox_pass_key_derive(&key, passphrase, pplength, &_error)) { if (_error == TOX_ERR_KEY_DERIVATION_NULL) { SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_NULL); } else if (_error == TOX_ERR_KEY_DERIVATION_FAILED) { SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_KEY_DERIVATION_FAILED); } return 0; } return tox_pass_key_encrypt(&key, data, data_len, out, error); }