mirror of https://github.com/aria2/aria2
2008-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Random bytes generation using libgcrypt and OpenSSL. * src/DHTUtil.{h, cc} * test/DHTUtilTest.ccpull/1/head
parent
1ea9033363
commit
dd8f18956a
|
@ -1,3 +1,9 @@
|
||||||
|
2008-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Random bytes generation using libgcrypt and OpenSSL.
|
||||||
|
* src/DHTUtil.{h, cc}
|
||||||
|
* test/DHTUtilTest.cc
|
||||||
|
|
||||||
2008-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2008-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Fixed segmentation fault when a DHT message which doesn't have 'y' key
|
Fixed segmentation fault when a DHT message which doesn't have 'y' key
|
||||||
|
|
|
@ -37,6 +37,12 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
#ifdef HAVE_LIBGCRYPT
|
||||||
|
# include <gcrypt.h>
|
||||||
|
#elif HAVE_LIBSSL
|
||||||
|
# include <openssl/rand.h>
|
||||||
|
# include "SimpleRandomizer.h"
|
||||||
|
#endif // HAVE_LIBSSL
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -47,10 +53,20 @@ void DHTUtil::generateRandomKey(unsigned char* key)
|
||||||
MessageDigestHelper::digest(key, 20, "sha1", bytes, sizeof(bytes));
|
MessageDigestHelper::digest(key, 20, "sha1", bytes, sizeof(bytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DHTUtil::generateRandomData(char* data, size_t length)
|
void DHTUtil::generateRandomData(unsigned char* data, size_t length)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_LIBGCRYPT
|
||||||
|
gcry_randomize(data, length, GCRY_STRONG_RANDOM);
|
||||||
|
#elif HAVE_LIBSSL
|
||||||
|
if(RAND_bytes(data, length) != 1) {
|
||||||
|
for(size_t i = 0; i < length; ++i) {
|
||||||
|
data[i] = SimpleRandomizer::getInstance()->getRandomNumber(UINT8_MAX+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
std::ifstream i("/dev/urandom");
|
std::ifstream i("/dev/urandom");
|
||||||
i.read(data, length);
|
i.read(data, length);
|
||||||
|
#endif // HAVE_LIBSSL
|
||||||
}
|
}
|
||||||
|
|
||||||
void DHTUtil::flipBit(unsigned char* data, size_t length, size_t bitIndex)
|
void DHTUtil::flipBit(unsigned char* data, size_t length, size_t bitIndex)
|
||||||
|
|
|
@ -45,11 +45,11 @@ public:
|
||||||
|
|
||||||
static void generateRandomKey(unsigned char* key);
|
static void generateRandomKey(unsigned char* key);
|
||||||
|
|
||||||
static void generateRandomData(char* data, size_t length);
|
static void generateRandomData(unsigned char* data, size_t length);
|
||||||
|
|
||||||
static void generateRandomData(unsigned char* data, size_t length)
|
static void generateRandomData(char* data, size_t length)
|
||||||
{
|
{
|
||||||
return generateRandomData(reinterpret_cast<char*>(data), length);
|
return generateRandomData(reinterpret_cast<unsigned char*>(data), length);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flipBit(unsigned char* data, size_t length, size_t bitIndex);
|
static void flipBit(unsigned char* data, size_t length, size_t bitIndex);
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#include "DHTUtil.h"
|
||||||
|
#include "Exception.h"
|
||||||
|
#include "Util.h"
|
||||||
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
|
namespace aria2 {
|
||||||
|
|
||||||
|
class DHTUtilTest:public CppUnit::TestFixture {
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE(DHTUtilTest);
|
||||||
|
CPPUNIT_TEST(testGenerateRandomData);
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
public:
|
||||||
|
void setUp() {}
|
||||||
|
|
||||||
|
void tearDown() {}
|
||||||
|
|
||||||
|
void testGenerateRandomData();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION(DHTUtilTest);
|
||||||
|
|
||||||
|
void DHTUtilTest::testGenerateRandomData()
|
||||||
|
{
|
||||||
|
unsigned char data1[20];
|
||||||
|
DHTUtil::generateRandomData(data1, sizeof(data1));
|
||||||
|
unsigned char data2[20];
|
||||||
|
DHTUtil::generateRandomData(data2, sizeof(data2));
|
||||||
|
CPPUNIT_ASSERT(memcmp(data1, data2, sizeof(data1)) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace aria2
|
|
@ -131,7 +131,8 @@ aria2c_SOURCES += BtAllowedFastMessageTest.cc\
|
||||||
DHTRoutingTableDeserializerTest.cc\
|
DHTRoutingTableDeserializerTest.cc\
|
||||||
DHKeyExchangeTest.cc\
|
DHKeyExchangeTest.cc\
|
||||||
ARC4Test.cc\
|
ARC4Test.cc\
|
||||||
MSEHandshakeTest.cc
|
MSEHandshakeTest.cc\
|
||||||
|
DHTUtilTest.cc
|
||||||
endif # ENABLE_BITTORRENT
|
endif # ENABLE_BITTORRENT
|
||||||
|
|
||||||
if ENABLE_METALINK
|
if ENABLE_METALINK
|
||||||
|
|
|
@ -116,7 +116,8 @@ check_PROGRAMS = $(am__EXEEXT_1)
|
||||||
@ENABLE_BITTORRENT_TRUE@ DHTRoutingTableDeserializerTest.cc\
|
@ENABLE_BITTORRENT_TRUE@ DHTRoutingTableDeserializerTest.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ DHKeyExchangeTest.cc\
|
@ENABLE_BITTORRENT_TRUE@ DHKeyExchangeTest.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ ARC4Test.cc\
|
@ENABLE_BITTORRENT_TRUE@ ARC4Test.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ MSEHandshakeTest.cc
|
@ENABLE_BITTORRENT_TRUE@ MSEHandshakeTest.cc\
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ DHTUtilTest.cc
|
||||||
|
|
||||||
@ENABLE_METALINK_TRUE@am__append_3 = MetalinkerTest.cc\
|
@ENABLE_METALINK_TRUE@am__append_3 = MetalinkerTest.cc\
|
||||||
@ENABLE_METALINK_TRUE@ MetalinkEntryTest.cc\
|
@ENABLE_METALINK_TRUE@ MetalinkEntryTest.cc\
|
||||||
|
@ -211,8 +212,9 @@ am__aria2c_SOURCES_DIST = AllTest.cc SocketCoreTest.cc \
|
||||||
DHTTokenTrackerTest.cc XORCloserTest.cc DHTIDCloserTest.cc \
|
DHTTokenTrackerTest.cc XORCloserTest.cc DHTIDCloserTest.cc \
|
||||||
DHTRoutingTableSerializerTest.cc \
|
DHTRoutingTableSerializerTest.cc \
|
||||||
DHTRoutingTableDeserializerTest.cc DHKeyExchangeTest.cc \
|
DHTRoutingTableDeserializerTest.cc DHKeyExchangeTest.cc \
|
||||||
ARC4Test.cc MSEHandshakeTest.cc MetalinkerTest.cc \
|
ARC4Test.cc MSEHandshakeTest.cc DHTUtilTest.cc \
|
||||||
MetalinkEntryTest.cc Metalink2RequestGroupTest.cc \
|
MetalinkerTest.cc MetalinkEntryTest.cc \
|
||||||
|
Metalink2RequestGroupTest.cc \
|
||||||
MetalinkPostDownloadHandlerTest.cc MetalinkHelperTest.cc \
|
MetalinkPostDownloadHandlerTest.cc MetalinkHelperTest.cc \
|
||||||
MetalinkParserControllerTest.cc MetalinkProcessorTest.cc
|
MetalinkParserControllerTest.cc MetalinkProcessorTest.cc
|
||||||
@ENABLE_MESSAGE_DIGEST_TRUE@am__objects_1 = \
|
@ENABLE_MESSAGE_DIGEST_TRUE@am__objects_1 = \
|
||||||
|
@ -291,7 +293,8 @@ am__aria2c_SOURCES_DIST = AllTest.cc SocketCoreTest.cc \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DHTRoutingTableDeserializerTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DHTRoutingTableDeserializerTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DHKeyExchangeTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DHKeyExchangeTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ ARC4Test.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ ARC4Test.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ MSEHandshakeTest.$(OBJEXT)
|
@ENABLE_BITTORRENT_TRUE@ MSEHandshakeTest.$(OBJEXT) \
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ DHTUtilTest.$(OBJEXT)
|
||||||
@ENABLE_METALINK_TRUE@am__objects_3 = MetalinkerTest.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@am__objects_3 = MetalinkerTest.$(OBJEXT) \
|
||||||
@ENABLE_METALINK_TRUE@ MetalinkEntryTest.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@ MetalinkEntryTest.$(OBJEXT) \
|
||||||
@ENABLE_METALINK_TRUE@ Metalink2RequestGroupTest.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@ Metalink2RequestGroupTest.$(OBJEXT) \
|
||||||
|
@ -684,6 +687,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTRoutingTableTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTRoutingTableTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTTokenTrackerTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTTokenTrackerTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTUnknownMessageTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTUnknownMessageTest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTUtilTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultAuthResolverTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultAuthResolverTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtAnnounceTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtAnnounceTest.Po@am__quote@
|
||||||
|
|
Loading…
Reference in New Issue