|
|
@ -36,100 +36,34 @@ namespace libtorrent |
|
|
|
{ |
|
|
|
{ |
|
|
|
hasher::hasher() |
|
|
|
hasher::hasher() |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
gcry_md_open(&m_context, GCRY_MD_SHA1, 0); |
|
|
|
|
|
|
|
#elif TORRENT_USE_COMMONCRYPTO |
|
|
|
|
|
|
|
CC_SHA1_Init(&m_context); |
|
|
|
|
|
|
|
#elif defined TORRENT_USE_OPENSSL |
|
|
|
|
|
|
|
SHA1_Init(&m_context); |
|
|
|
SHA1_Init(&m_context); |
|
|
|
#else |
|
|
|
|
|
|
|
SHA1_init(&m_context); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
hasher::hasher(const char* data, int len) |
|
|
|
hasher::hasher(const char* data, int len) |
|
|
|
{ |
|
|
|
{ |
|
|
|
TORRENT_ASSERT(data != 0); |
|
|
|
TORRENT_ASSERT(data != 0); |
|
|
|
TORRENT_ASSERT(len > 0); |
|
|
|
TORRENT_ASSERT(len > 0); |
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
gcry_md_open(&m_context, GCRY_MD_SHA1, 0); |
|
|
|
|
|
|
|
gcry_md_write(m_context, data, len); |
|
|
|
|
|
|
|
#elif TORRENT_USE_COMMONCRYPTO |
|
|
|
|
|
|
|
CC_SHA1_Init(&m_context); |
|
|
|
|
|
|
|
CC_SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
|
|
|
|
#elif defined TORRENT_USE_OPENSSL |
|
|
|
|
|
|
|
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); |
|
|
|
#else |
|
|
|
|
|
|
|
SHA1_init(&m_context); |
|
|
|
|
|
|
|
SHA1_update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
hasher::hasher(hasher const& h) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
gcry_md_copy(&m_context, h.m_context); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hasher& hasher::operator=(hasher const& h) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
gcry_md_close(m_context); |
|
|
|
|
|
|
|
gcry_md_copy(&m_context, h.m_context); |
|
|
|
|
|
|
|
return *this; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void hasher::update(const char* data, int len) |
|
|
|
void hasher::update(const char* data, int len) |
|
|
|
{ |
|
|
|
{ |
|
|
|
TORRENT_ASSERT(data != 0); |
|
|
|
TORRENT_ASSERT(data != 0); |
|
|
|
TORRENT_ASSERT(len > 0); |
|
|
|
TORRENT_ASSERT(len > 0); |
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
gcry_md_write(m_context, data, len); |
|
|
|
|
|
|
|
#elif TORRENT_USE_COMMONCRYPTO |
|
|
|
|
|
|
|
CC_SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
|
|
|
|
#elif defined TORRENT_USE_OPENSSL |
|
|
|
|
|
|
|
SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
#else |
|
|
|
|
|
|
|
SHA1_update(&m_context, reinterpret_cast<unsigned char const*>(data), len); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
sha1_hash hasher::final() |
|
|
|
sha1_hash hasher::final() |
|
|
|
{ |
|
|
|
{ |
|
|
|
sha1_hash digest; |
|
|
|
sha1_hash digest; |
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
gcry_md_final(m_context); |
|
|
|
|
|
|
|
digest.assign((const char*)gcry_md_read(m_context, 0)); |
|
|
|
|
|
|
|
#elif TORRENT_USE_COMMONCRYPTO |
|
|
|
|
|
|
|
CC_SHA1_Final(digest.begin(), &m_context); |
|
|
|
|
|
|
|
#elif defined TORRENT_USE_OPENSSL |
|
|
|
|
|
|
|
SHA1_Final(digest.begin(), &m_context); |
|
|
|
SHA1_Final(digest.begin(), &m_context); |
|
|
|
#else |
|
|
|
|
|
|
|
SHA1_final(digest.begin(), &m_context); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
return digest; |
|
|
|
return digest; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void hasher::reset() |
|
|
|
void hasher::reset() |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
gcry_md_reset(m_context); |
|
|
|
|
|
|
|
#elif TORRENT_USE_COMMONCRYPTO |
|
|
|
|
|
|
|
CC_SHA1_Init(&m_context); |
|
|
|
|
|
|
|
#elif defined TORRENT_USE_OPENSSL |
|
|
|
|
|
|
|
SHA1_Init(&m_context); |
|
|
|
SHA1_Init(&m_context); |
|
|
|
#else |
|
|
|
|
|
|
|
SHA1_init(&m_context); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef TORRENT_USE_GCRYPT |
|
|
|
|
|
|
|
hasher::~hasher() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
gcry_md_close(m_context); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|