#elif defined TORRENT_USE_LIBCRYPTO SHA1_Update(&m_context, reinterpret_cast<unsigned char const*>(data.data()), data.size()); #else SHA1_update(&m_context, reinterpret_cast<unsigned char const*>(data.data()), data.size()); #endif return *this; } sha1_hash hasher::final() { sha1_hash digest; #ifdef TORRENT_USE_LIBGCRYPT gcry_md_final(m_context); digest.assign((char const*)gcry_md_read(m_context, 0)); #elif TORRENT_USE_COMMONCRYPTO CC_SHA1_Final(reinterpret_cast<unsigned char*>(digest.data()), &m_context); #elif TORRENT_USE_CRYPTOAPI m_context.get_hash(digest.data(), digest.size()); #elif defined TORRENT_USE_LIBCRYPTO SHA1_Final(reinterpret_cast<unsigned char*>(digest.data()), &m_context); #else SHA1_final(reinterpret_cast<unsigned char*>(digest.data()), &m_context); #endif return digest; } void hasher::reset() { #ifdef TORRENT_USE_LIBGCRYPT gcry_md_reset(m_context); #elif TORRENT_USE_COMMONCRYPTO