make built-in sha functions not conflict with libcrypto
This commit is contained in:
parent
9acaf06c75
commit
fc0b5da9ad
|
@ -1,3 +1,4 @@
|
||||||
|
* make built-in sha functions not conflict with libcrypto
|
||||||
* improve web seed hash failure case
|
* improve web seed hash failure case
|
||||||
* improve DHT lookup times
|
* improve DHT lookup times
|
||||||
* uTP path MTU discovery improvements
|
* uTP path MTU discovery improvements
|
||||||
|
|
|
@ -48,16 +48,20 @@ extern "C"
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// from sha1.cpp
|
// from sha1.cpp
|
||||||
struct TORRENT_EXTRA_EXPORT SHA_CTX
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
boost::uint32_t state[5];
|
|
||||||
boost::uint32_t count[2];
|
|
||||||
boost::uint8_t buffer[64];
|
|
||||||
};
|
|
||||||
|
|
||||||
TORRENT_EXTRA_EXPORT void SHA1_Init(SHA_CTX* context);
|
struct TORRENT_EXTRA_EXPORT sha_ctx
|
||||||
TORRENT_EXTRA_EXPORT void SHA1_Update(SHA_CTX* context, boost::uint8_t const* data, boost::uint32_t len);
|
{
|
||||||
TORRENT_EXTRA_EXPORT void SHA1_Final(boost::uint8_t* digest, SHA_CTX* context);
|
boost::uint32_t state[5];
|
||||||
|
boost::uint32_t count[2];
|
||||||
|
boost::uint8_t buffer[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
TORRENT_EXTRA_EXPORT void SHA1_init(sha_ctx* context);
|
||||||
|
TORRENT_EXTRA_EXPORT void SHA1_update(sha_ctx* context, boost::uint8_t const* data, boost::uint32_t len);
|
||||||
|
TORRENT_EXTRA_EXPORT void SHA1_final(boost::uint8_t* digest, sha_ctx* context);
|
||||||
|
} // namespace libtorrent
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -72,7 +76,7 @@ namespace libtorrent
|
||||||
#ifdef TORRENT_USE_GCRYPT
|
#ifdef TORRENT_USE_GCRYPT
|
||||||
gcry_md_open(&m_context, GCRY_MD_SHA1, 0);
|
gcry_md_open(&m_context, GCRY_MD_SHA1, 0);
|
||||||
#else
|
#else
|
||||||
SHA1_Init(&m_context);
|
SHA1_init(&m_context);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
hasher(const char* data, int len)
|
hasher(const char* data, int len)
|
||||||
|
@ -83,8 +87,8 @@ namespace libtorrent
|
||||||
gcry_md_open(&m_context, GCRY_MD_SHA1, 0);
|
gcry_md_open(&m_context, GCRY_MD_SHA1, 0);
|
||||||
gcry_md_write(m_context, data, len);
|
gcry_md_write(m_context, data, len);
|
||||||
#else
|
#else
|
||||||
SHA1_Init(&m_context);
|
SHA1_init(&m_context);
|
||||||
SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len);
|
SHA1_update(&m_context, reinterpret_cast<unsigned char const*>(data), len);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +114,7 @@ namespace libtorrent
|
||||||
#ifdef TORRENT_USE_GCRYPT
|
#ifdef TORRENT_USE_GCRYPT
|
||||||
gcry_md_write(m_context, data, len);
|
gcry_md_write(m_context, data, len);
|
||||||
#else
|
#else
|
||||||
SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len);
|
SHA1_update(&m_context, reinterpret_cast<unsigned char const*>(data), len);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +125,7 @@ namespace libtorrent
|
||||||
gcry_md_final(m_context);
|
gcry_md_final(m_context);
|
||||||
digest.assign((const char*)gcry_md_read(m_context, 0));
|
digest.assign((const char*)gcry_md_read(m_context, 0));
|
||||||
#else
|
#else
|
||||||
SHA1_Final(digest.begin(), &m_context);
|
SHA1_final(digest.begin(), &m_context);
|
||||||
#endif
|
#endif
|
||||||
return digest;
|
return digest;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +135,7 @@ namespace libtorrent
|
||||||
#ifdef TORRENT_USE_GCRYPT
|
#ifdef TORRENT_USE_GCRYPT
|
||||||
gcry_md_reset(m_context);
|
gcry_md_reset(m_context);
|
||||||
#else
|
#else
|
||||||
SHA1_Init(&m_context);
|
SHA1_init(&m_context);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +151,7 @@ namespace libtorrent
|
||||||
#ifdef TORRENT_USE_GCRYPT
|
#ifdef TORRENT_USE_GCRYPT
|
||||||
gcry_md_hd_t m_context;
|
gcry_md_hd_t m_context;
|
||||||
#else
|
#else
|
||||||
SHA_CTX m_context;
|
sha_ctx m_context;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
38
src/sha1.cpp
38
src/sha1.cpp
|
@ -27,16 +27,20 @@ typedef boost::uint8_t u8;
|
||||||
|
|
||||||
#include "libtorrent/config.hpp"
|
#include "libtorrent/config.hpp"
|
||||||
|
|
||||||
struct TORRENT_EXPORT SHA_CTX
|
namespace libtorrent
|
||||||
|
{
|
||||||
|
|
||||||
|
struct TORRENT_EXPORT sha_ctx
|
||||||
{
|
{
|
||||||
u32 state[5];
|
u32 state[5];
|
||||||
u32 count[2];
|
u32 count[2];
|
||||||
u8 buffer[64];
|
u8 buffer[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
TORRENT_EXPORT void SHA1_Init(SHA_CTX* context);
|
// we don't want these to clash with openssl's libcrypto
|
||||||
TORRENT_EXPORT void SHA1_Update(SHA_CTX* context, u8 const* data, u32 len);
|
TORRENT_EXPORT void SHA1_init(sha_ctx* context);
|
||||||
TORRENT_EXPORT void SHA1_Final(u8* digest, SHA_CTX* context);
|
TORRENT_EXPORT void SHA1_update(sha_ctx* context, u8 const* data, u32 len);
|
||||||
|
TORRENT_EXPORT void SHA1_final(u8* digest, sha_ctx* context);
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
@ -80,7 +84,7 @@ namespace
|
||||||
|
|
||||||
// Hash a single 512-bit block. This is the core of the algorithm.
|
// Hash a single 512-bit block. This is the core of the algorithm.
|
||||||
template <class BlkFun>
|
template <class BlkFun>
|
||||||
void SHA1Transform(u32 state[5], u8 const buffer[64])
|
void SHA1transform(u32 state[5], u8 const buffer[64])
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
u32 a, b, c, d, e;
|
u32 a, b, c, d, e;
|
||||||
|
@ -123,12 +127,10 @@ namespace
|
||||||
state[2] += c;
|
state[2] += c;
|
||||||
state[3] += d;
|
state[3] += d;
|
||||||
state[4] += e;
|
state[4] += e;
|
||||||
// Wipe variables
|
|
||||||
a = b = c = d = e = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
void SHAPrintContext(SHA_CTX *context, char *msg)
|
void SHAPrintContext(sha_ctx *context, char *msg)
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
printf("%s (%d,%d) %x %x %x %x %x\n"
|
printf("%s (%d,%d) %x %x %x %x %x\n"
|
||||||
|
@ -143,7 +145,7 @@ namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class BlkFun>
|
template <class BlkFun>
|
||||||
void internal_update(SHA_CTX* context, u8 const* data, u32 len)
|
void internal_update(sha_ctx* context, u8 const* data, u32 len)
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
u32 i, j; // JHB
|
u32 i, j; // JHB
|
||||||
|
@ -157,10 +159,10 @@ namespace
|
||||||
if ((j + len) > 63)
|
if ((j + len) > 63)
|
||||||
{
|
{
|
||||||
memcpy(&context->buffer[j], data, (i = 64-j));
|
memcpy(&context->buffer[j], data, (i = 64-j));
|
||||||
SHA1Transform<BlkFun>(context->state, context->buffer);
|
SHA1transform<BlkFun>(context->state, context->buffer);
|
||||||
for ( ; i + 63 < len; i += 64)
|
for ( ; i + 63 < len; i += 64)
|
||||||
{
|
{
|
||||||
SHA1Transform<BlkFun>(context->state, &data[i]);
|
SHA1transform<BlkFun>(context->state, &data[i]);
|
||||||
}
|
}
|
||||||
j = 0;
|
j = 0;
|
||||||
}
|
}
|
||||||
|
@ -185,7 +187,7 @@ namespace
|
||||||
|
|
||||||
// SHA1Init - Initialize new context
|
// SHA1Init - Initialize new context
|
||||||
|
|
||||||
void SHA1_Init(SHA_CTX* context)
|
void SHA1_init(sha_ctx* context)
|
||||||
{
|
{
|
||||||
// SHA1 initialization constants
|
// SHA1 initialization constants
|
||||||
context->state[0] = 0x67452301;
|
context->state[0] = 0x67452301;
|
||||||
|
@ -199,7 +201,7 @@ void SHA1_Init(SHA_CTX* context)
|
||||||
|
|
||||||
// Run your data through this.
|
// Run your data through this.
|
||||||
|
|
||||||
void SHA1_Update(SHA_CTX* context, u8 const* data, u32 len)
|
void SHA1_update(sha_ctx* context, u8 const* data, u32 len)
|
||||||
{
|
{
|
||||||
// GCC standard defines for endianness
|
// GCC standard defines for endianness
|
||||||
// test with: cpp -dM /dev/null
|
// test with: cpp -dM /dev/null
|
||||||
|
@ -220,7 +222,7 @@ void SHA1_Update(SHA_CTX* context, u8 const* data, u32 len)
|
||||||
|
|
||||||
// Add padding and return the message digest.
|
// Add padding and return the message digest.
|
||||||
|
|
||||||
void SHA1_Final(u8* digest, SHA_CTX* context)
|
void SHA1_final(u8* digest, sha_ctx* context)
|
||||||
{
|
{
|
||||||
u8 finalcount[8];
|
u8 finalcount[8];
|
||||||
|
|
||||||
|
@ -232,10 +234,10 @@ void SHA1_Final(u8* digest, SHA_CTX* context)
|
||||||
>> ((3-(i & 3)) * 8) ) & 255);
|
>> ((3-(i & 3)) * 8) ) & 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
SHA1_Update(context, (u8 const*)"\200", 1);
|
SHA1_update(context, (u8 const*)"\200", 1);
|
||||||
while ((context->count[0] & 504) != 448)
|
while ((context->count[0] & 504) != 448)
|
||||||
SHA1_Update(context, (u8 const*)"\0", 1);
|
SHA1_update(context, (u8 const*)"\0", 1);
|
||||||
SHA1_Update(context, finalcount, 8); // Should cause a SHA1Transform()
|
SHA1_update(context, finalcount, 8); // Should cause a SHA1transform()
|
||||||
|
|
||||||
for (u32 i = 0; i < 20; ++i)
|
for (u32 i = 0; i < 20; ++i)
|
||||||
{
|
{
|
||||||
|
@ -244,6 +246,8 @@ void SHA1_Final(u8* digest, SHA_CTX* context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // libtorrent namespace
|
||||||
|
|
||||||
/************************************************************
|
/************************************************************
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
|
|
Loading…
Reference in New Issue