/* */ #include "messageDigest.h" #include "Util.h" namespace aria2 { const std::string MessageDigestContext::SHA1("sha1"); const std::string MessageDigestContext::SHA256("sha256"); const std::string MessageDigestContext::MD5("md5"); static MessageDigestContext::DigestAlgoMap::value_type digests[] = { #ifdef HAVE_LIBSSL MessageDigestContext::DigestAlgoMap::value_type("md5", EVP_md5()), MessageDigestContext::DigestAlgoMap::value_type("sha1", EVP_sha1()), # ifdef HAVE_EVP_SHA256 MessageDigestContext::DigestAlgoMap::value_type("sha256", EVP_sha256()), # endif // HAVE_EVP_SHA256 #elif HAVE_LIBGCRYPT MessageDigestContext::DigestAlgoMap::value_type("md5", GCRY_MD_MD5), MessageDigestContext::DigestAlgoMap::value_type("sha1", GCRY_MD_SHA1), MessageDigestContext::DigestAlgoMap::value_type("sha256", GCRY_MD_SHA256), #endif // HAVE_LIBGCRYPT }; MessageDigestContext::DigestAlgoMap MessageDigestContext::digestAlgos(&digests[0], &digests[sizeof(digests)/sizeof(DigestAlgoMap::value_type)]); std::string MessageDigestContext::digestFinal() { size_t length = digestLength(algo); unsigned char* rawMD = new unsigned char[length]; digestFinal(rawMD); std::string rawMDString(&rawMD[0], &rawMD[length]); delete [] rawMD; return rawMDString; } std::string MessageDigestContext::getSupportedAlgoString() { std::string algos; for(DigestAlgoMap::const_iterator itr = digestAlgos.begin(); itr != digestAlgos.end(); ++itr) { algos += (*itr).first+", "; } return Util::trim(algos, ", "); } } // namespace aria2