fix: clang warnings (#2339)
* fix: comparison-is-always-false warning * fix: C/C++ mixing (memset() to clear a C++ object)
This commit is contained in:
parent
b62b8f28bf
commit
0e321c2d21
|
@ -52,24 +52,21 @@ static void ensureKeyExists(tr_crypto* crypto)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tr_cryptoConstruct(tr_crypto* crypto, tr_sha1_digest_t const* torrent_hash, bool isIncoming)
|
tr_crypto::tr_crypto(tr_sha1_digest_t const* torrent_hash_in, bool is_incoming_in)
|
||||||
|
: is_incoming{ is_incoming_in }
|
||||||
{
|
{
|
||||||
memset(crypto, 0, sizeof(tr_crypto));
|
if (torrent_hash_in != nullptr)
|
||||||
|
|
||||||
crypto->isIncoming = isIncoming;
|
|
||||||
|
|
||||||
if (torrent_hash != nullptr)
|
|
||||||
{
|
{
|
||||||
tr_cryptoSetTorrentHash(crypto, *torrent_hash);
|
this->torrent_hash = *torrent_hash_in;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tr_cryptoDestruct(tr_crypto* crypto)
|
tr_crypto::~tr_crypto()
|
||||||
{
|
{
|
||||||
tr_dh_secret_free(crypto->mySecret);
|
tr_dh_secret_free(this->mySecret);
|
||||||
tr_dh_free(crypto->dh);
|
tr_dh_free(this->dh);
|
||||||
tr_free(crypto->enc_key);
|
tr_free(this->enc_key);
|
||||||
tr_free(crypto->dec_key);
|
tr_free(this->dec_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -128,7 +125,7 @@ static void crypt_rc4(struct arc4_context* key, size_t buf_len, void const* buf_
|
||||||
|
|
||||||
void tr_cryptoDecryptInit(tr_crypto* crypto)
|
void tr_cryptoDecryptInit(tr_crypto* crypto)
|
||||||
{
|
{
|
||||||
init_rc4(crypto, &crypto->dec_key, crypto->isIncoming ? "keyA" : "keyB"); // lgtm[cpp/weak-cryptographic-algorithm]
|
init_rc4(crypto, &crypto->dec_key, crypto->is_incoming ? "keyA" : "keyB"); // lgtm[cpp/weak-cryptographic-algorithm]
|
||||||
}
|
}
|
||||||
|
|
||||||
void tr_cryptoDecrypt(tr_crypto* crypto, size_t buf_len, void const* buf_in, void* buf_out)
|
void tr_cryptoDecrypt(tr_crypto* crypto, size_t buf_len, void const* buf_in, void* buf_out)
|
||||||
|
@ -138,7 +135,7 @@ void tr_cryptoDecrypt(tr_crypto* crypto, size_t buf_len, void const* buf_in, voi
|
||||||
|
|
||||||
void tr_cryptoEncryptInit(tr_crypto* crypto)
|
void tr_cryptoEncryptInit(tr_crypto* crypto)
|
||||||
{
|
{
|
||||||
init_rc4(crypto, &crypto->enc_key, crypto->isIncoming ? "keyB" : "keyA"); // lgtm[cpp/weak-cryptographic-algorithm]
|
init_rc4(crypto, &crypto->enc_key, crypto->is_incoming ? "keyB" : "keyA"); // lgtm[cpp/weak-cryptographic-algorithm]
|
||||||
}
|
}
|
||||||
|
|
||||||
void tr_cryptoEncrypt(tr_crypto* crypto, size_t buf_len, void const* buf_in, void* buf_out)
|
void tr_cryptoEncrypt(tr_crypto* crypto, size_t buf_len, void const* buf_in, void* buf_out)
|
||||||
|
|
|
@ -35,21 +35,18 @@ enum
|
||||||
/** @brief Holds state information for encrypted peer communications */
|
/** @brief Holds state information for encrypted peer communications */
|
||||||
struct tr_crypto
|
struct tr_crypto
|
||||||
{
|
{
|
||||||
std::optional<tr_sha1_digest_t> torrent_hash;
|
tr_crypto(tr_sha1_digest_t const* torrent_hash = nullptr, bool is_incoming = true);
|
||||||
struct arc4_context* dec_key;
|
~tr_crypto();
|
||||||
struct arc4_context* enc_key;
|
|
||||||
tr_dh_ctx_t dh;
|
std::optional<tr_sha1_digest_t> torrent_hash = {};
|
||||||
uint8_t myPublicKey[KEY_LEN];
|
struct arc4_context* dec_key = nullptr;
|
||||||
tr_dh_secret_t mySecret;
|
struct arc4_context* enc_key = nullptr;
|
||||||
bool isIncoming;
|
tr_dh_ctx_t dh = {};
|
||||||
|
uint8_t myPublicKey[KEY_LEN] = {};
|
||||||
|
tr_dh_secret_t mySecret = {};
|
||||||
|
bool is_incoming = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @brief construct a new tr_crypto object */
|
|
||||||
void tr_cryptoConstruct(tr_crypto* crypto, tr_sha1_digest_t const* torrent_hash, bool isIncoming);
|
|
||||||
|
|
||||||
/** @brief destruct an existing tr_crypto object */
|
|
||||||
void tr_cryptoDestruct(tr_crypto* crypto);
|
|
||||||
|
|
||||||
void tr_cryptoSetTorrentHash(tr_crypto* crypto, tr_sha1_digest_t const& torrent_hash);
|
void tr_cryptoSetTorrentHash(tr_crypto* crypto, tr_sha1_digest_t const& torrent_hash);
|
||||||
|
|
||||||
std::optional<tr_sha1_digest_t> tr_cryptoGetTorrentHash(tr_crypto const* crypto);
|
std::optional<tr_sha1_digest_t> tr_cryptoGetTorrentHash(tr_crypto const* crypto);
|
||||||
|
|
|
@ -98,7 +98,17 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] auto compare(tr_interned_string const& that) const // <=>
|
[[nodiscard]] auto compare(tr_interned_string const& that) const // <=>
|
||||||
{
|
{
|
||||||
return this->quark() - that.quark();
|
if (this->quark() < that.quark())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->quark() > that.quark())
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool operator<(tr_interned_string const& that) const
|
[[nodiscard]] bool operator<(tr_interned_string const& that) const
|
||||||
|
|
|
@ -610,7 +610,7 @@ static tr_peerIo* tr_peerIoNew(
|
||||||
tr_address const* addr,
|
tr_address const* addr,
|
||||||
tr_port port,
|
tr_port port,
|
||||||
tr_sha1_digest_t const* torrent_hash,
|
tr_sha1_digest_t const* torrent_hash,
|
||||||
bool isIncoming,
|
bool is_incoming,
|
||||||
bool isSeed,
|
bool isSeed,
|
||||||
struct tr_peer_socket const socket)
|
struct tr_peer_socket const socket)
|
||||||
{
|
{
|
||||||
|
@ -630,8 +630,7 @@ static tr_peerIo* tr_peerIoNew(
|
||||||
maybeSetCongestionAlgorithm(socket.handle.tcp, session->peerCongestionAlgorithm());
|
maybeSetCongestionAlgorithm(socket.handle.tcp, session->peerCongestionAlgorithm());
|
||||||
}
|
}
|
||||||
|
|
||||||
auto* io = new tr_peerIo{ session, *addr, port, isSeed };
|
auto* io = new tr_peerIo{ session, torrent_hash, is_incoming, *addr, port, isSeed };
|
||||||
tr_cryptoConstruct(&io->crypto, torrent_hash, isIncoming);
|
|
||||||
io->socket = socket;
|
io->socket = socket;
|
||||||
io->bandwidth = new Bandwidth(parent);
|
io->bandwidth = new Bandwidth(parent);
|
||||||
io->bandwidth->setPeer(io);
|
io->bandwidth->setPeer(io);
|
||||||
|
@ -653,7 +652,7 @@ static tr_peerIo* tr_peerIoNew(
|
||||||
dbgmsg(io, "%s", "calling UTP_SetCallbacks &utp_function_table");
|
dbgmsg(io, "%s", "calling UTP_SetCallbacks &utp_function_table");
|
||||||
UTP_SetCallbacks(socket.handle.utp, &utp_function_table, io);
|
UTP_SetCallbacks(socket.handle.utp, &utp_function_table, io);
|
||||||
|
|
||||||
if (!isIncoming)
|
if (!is_incoming)
|
||||||
{
|
{
|
||||||
dbgmsg(io, "%s", "calling UTP_Connect");
|
dbgmsg(io, "%s", "calling UTP_Connect");
|
||||||
UTP_Connect(socket.handle.utp);
|
UTP_Connect(socket.handle.utp);
|
||||||
|
@ -875,7 +874,6 @@ static void io_dtor(void* vio)
|
||||||
event_disable(io, EV_READ | EV_WRITE);
|
event_disable(io, EV_READ | EV_WRITE);
|
||||||
delete io->bandwidth;
|
delete io->bandwidth;
|
||||||
io_close_socket(io);
|
io_close_socket(io);
|
||||||
tr_cryptoDestruct(&io->crypto);
|
|
||||||
|
|
||||||
while (io->outbuf_datatypes != nullptr)
|
while (io->outbuf_datatypes != nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,8 +67,15 @@ auto inline constexpr PEER_IO_MAGIC_NUMBER = 206745;
|
||||||
class tr_peerIo
|
class tr_peerIo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tr_peerIo(tr_session* session_in, tr_address const& addr_in, tr_port port_in, bool is_seed_in)
|
tr_peerIo(
|
||||||
: addr{ addr_in }
|
tr_session* session_in,
|
||||||
|
tr_sha1_digest_t const* torrent_hash,
|
||||||
|
bool is_incoming,
|
||||||
|
tr_address const& addr_in,
|
||||||
|
tr_port port_in,
|
||||||
|
bool is_seed_in)
|
||||||
|
: crypto{ torrent_hash, is_incoming }
|
||||||
|
, addr{ addr_in }
|
||||||
, session{ session_in }
|
, session{ session_in }
|
||||||
, inbuf{ evbuffer_new() }
|
, inbuf{ evbuffer_new() }
|
||||||
, outbuf{ evbuffer_new() }
|
, outbuf{ evbuffer_new() }
|
||||||
|
@ -83,7 +90,7 @@ public:
|
||||||
evbuffer_free(inbuf);
|
evbuffer_free(inbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr_crypto crypto = {};
|
tr_crypto crypto;
|
||||||
|
|
||||||
tr_address const addr;
|
tr_address const addr;
|
||||||
|
|
||||||
|
@ -230,7 +237,7 @@ int tr_peerIoReconnect(tr_peerIo* io);
|
||||||
|
|
||||||
constexpr bool tr_peerIoIsIncoming(tr_peerIo const* io)
|
constexpr bool tr_peerIoIsIncoming(tr_peerIo const* io)
|
||||||
{
|
{
|
||||||
return io->crypto.isIncoming;
|
return io->crypto.is_incoming;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove this func; let caller get the current time instead
|
// TODO: remove this func; let caller get the current time instead
|
||||||
|
|
|
@ -40,27 +40,22 @@ TEST(Crypto, torrentHash)
|
||||||
{
|
{
|
||||||
|
|
||||||
auto a = tr_crypto{};
|
auto a = tr_crypto{};
|
||||||
tr_cryptoConstruct(&a, nullptr, true);
|
|
||||||
EXPECT_FALSE(tr_cryptoGetTorrentHash(&a));
|
EXPECT_FALSE(tr_cryptoGetTorrentHash(&a));
|
||||||
|
|
||||||
tr_cryptoSetTorrentHash(&a, SomeHash);
|
tr_cryptoSetTorrentHash(&a, SomeHash);
|
||||||
EXPECT_TRUE(tr_cryptoGetTorrentHash(&a));
|
EXPECT_TRUE(tr_cryptoGetTorrentHash(&a));
|
||||||
EXPECT_EQ(SomeHash, *tr_cryptoGetTorrentHash(&a));
|
EXPECT_EQ(SomeHash, *tr_cryptoGetTorrentHash(&a));
|
||||||
tr_cryptoDestruct(&a);
|
|
||||||
|
|
||||||
tr_cryptoConstruct(&a, &SomeHash, false);
|
a = tr_crypto{ &SomeHash, false };
|
||||||
EXPECT_TRUE(tr_cryptoGetTorrentHash(&a));
|
EXPECT_TRUE(tr_cryptoGetTorrentHash(&a));
|
||||||
EXPECT_EQ(SomeHash, *tr_cryptoGetTorrentHash(&a));
|
EXPECT_EQ(SomeHash, *tr_cryptoGetTorrentHash(&a));
|
||||||
|
|
||||||
tr_cryptoDestruct(&a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Crypto, encryptDecrypt)
|
TEST(Crypto, encryptDecrypt)
|
||||||
{
|
{
|
||||||
auto a = tr_crypto{};
|
auto a = tr_crypto{ &SomeHash, false };
|
||||||
tr_cryptoConstruct(&a, &SomeHash, false);
|
auto b = tr_crypto_{ &SomeHash, true };
|
||||||
auto b = tr_crypto_{};
|
|
||||||
tr_cryptoConstruct_(&b, &SomeHash, true);
|
|
||||||
auto public_key_length = int{};
|
auto public_key_length = int{};
|
||||||
EXPECT_TRUE(tr_cryptoComputeSecret(&a, tr_cryptoGetMyPublicKey_(&b, &public_key_length)));
|
EXPECT_TRUE(tr_cryptoComputeSecret(&a, tr_cryptoGetMyPublicKey_(&b, &public_key_length)));
|
||||||
EXPECT_TRUE(tr_cryptoComputeSecret_(&b, tr_cryptoGetMyPublicKey(&a, &public_key_length)));
|
EXPECT_TRUE(tr_cryptoComputeSecret_(&b, tr_cryptoGetMyPublicKey(&a, &public_key_length)));
|
||||||
|
@ -84,9 +79,6 @@ TEST(Crypto, encryptDecrypt)
|
||||||
tr_cryptoDecryptInit(&a);
|
tr_cryptoDecryptInit(&a);
|
||||||
tr_cryptoDecrypt(&a, input2.size(), encrypted2.data(), decrypted2.data());
|
tr_cryptoDecrypt(&a, input2.size(), encrypted2.data(), decrypted2.data());
|
||||||
EXPECT_EQ(input2, std::string(decrypted2.data(), input2.size()));
|
EXPECT_EQ(input2, std::string(decrypted2.data(), input2.size()));
|
||||||
|
|
||||||
tr_cryptoDestruct_(&b);
|
|
||||||
tr_cryptoDestruct(&a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Crypto, sha1)
|
TEST(Crypto, sha1)
|
||||||
|
|
Loading…
Reference in New Issue