diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-05-14 14:11:56 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-05-14 14:11:56 +0000 |
| commit | b305edd7c5ccd2c0ca78ecb3e92f9840065b5c31 (patch) | |
| tree | c2af0bb7f71522652ea1cf71f915345e1889b691 /src | |
| parent | 88475a6aa092f402ca8bad19378e7e030480c533 (diff) | |
2010-05-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Left only IANA hash function textual name in messageDigest.cc.
Assign only IANA hash function textual name to Checksum and
ChunkChecksum. Fixed the value of MessageDigestContext::MD5.
* src/Checksum.h
* src/MetalinkParserController.cc
* src/messageDigest.cc
* src/messageDigest.h
* test/IteratableChecksumValidatorTest.cc
* test/IteratableChunkChecksumValidatorTest.cc
* test/MessageDigestHelperTest.cc
* test/Metalink2RequestGroupTest.cc
* test/MetalinkProcessorTest.cc
Diffstat (limited to 'src')
| -rw-r--r-- | src/Checksum.h | 7 | ||||
| -rw-r--r-- | src/MetalinkParserController.cc | 32 | ||||
| -rw-r--r-- | src/messageDigest.cc | 33 | ||||
| -rw-r--r-- | src/messageDigest.h | 8 |
4 files changed, 50 insertions, 30 deletions
diff --git a/src/Checksum.h b/src/Checksum.h index 31e66d07..e51dfcc9 100644 --- a/src/Checksum.h +++ b/src/Checksum.h @@ -36,9 +36,12 @@ #define _D_CHECKSUM_H_ #include "common.h" -#include "SharedHandle.h" + #include <string> +#include "SharedHandle.h" +#include "messageDigest.h" + namespace aria2 { class Checksum { @@ -50,7 +53,7 @@ public: Checksum(const std::string& algo, const std::string& messageDigest): _algo(algo), _messageDigest(messageDigest) {} Checksum(): - _algo("sha1") {} + _algo(MessageDigestContext::SHA1) {} ~Checksum() {} diff --git a/src/MetalinkParserController.cc b/src/MetalinkParserController.cc index 9c228a56..6944fbb5 100644 --- a/src/MetalinkParserController.cc +++ b/src/MetalinkParserController.cc @@ -53,15 +53,6 @@ namespace aria2 { -#ifdef ENABLE_MESSAGE_DIGEST -static bool isValidHash(const std::string& algo, const std::string& hash) -{ - return util::isHexDigit(hash) && - MessageDigestContext::supports(algo) && - MessageDigestContext::digestLength(algo)*2 == hash.size(); -} -#endif // ENABLE_MESSAGE_DIGEST - MetalinkParserController::MetalinkParserController(): _metalinker(new Metalinker()) {} @@ -272,8 +263,9 @@ void MetalinkParserController::setTypeOfChecksum(const std::string& type) if(_tChecksum.isNull()) { return; } - if(MessageDigestContext::supports(type)) { - _tChecksum->setAlgo(type); + std::string calgo = MessageDigestContext::getCanonicalAlgo(type); + if(MessageDigestContext::supports(calgo)) { + _tChecksum->setAlgo(calgo); } else { cancelChecksumTransaction(); } @@ -286,7 +278,7 @@ void MetalinkParserController::setHashOfChecksum(const std::string& md) if(_tChecksum.isNull()) { return; } - if(isValidHash(_tChecksum->getAlgo(), md)) { + if(MessageDigestContext::isValidHash(_tChecksum->getAlgo(), md)) { _tChecksum->setMessageDigest(md); } else { cancelChecksumTransaction(); @@ -333,8 +325,9 @@ void MetalinkParserController::setTypeOfChunkChecksumV4(const std::string& type) if(_tChunkChecksumV4.isNull()) { return; } - if(MessageDigestContext::supports(type)) { - _tChunkChecksumV4->setAlgo(type); + std::string calgo = MessageDigestContext::getCanonicalAlgo(type); + if(MessageDigestContext::supports(calgo)) { + _tChunkChecksumV4->setAlgo(calgo); } else { cancelChunkChecksumTransactionV4(); } @@ -361,7 +354,7 @@ void MetalinkParserController::addHashOfChunkChecksumV4(const std::string& md) if(_tChunkChecksumV4.isNull()) { return; } - if(isValidHash(_tChunkChecksumV4->getAlgo(), md)) { + if(MessageDigestContext::isValidHash(_tChunkChecksumV4->getAlgo(), md)) { _tempChunkChecksumsV4.push_back(md); } else { cancelChunkChecksumTransactionV4(); @@ -411,8 +404,9 @@ void MetalinkParserController::setTypeOfChunkChecksum(const std::string& type) if(_tChunkChecksum.isNull()) { return; } - if(MessageDigestContext::supports(type)) { - _tChunkChecksum->setAlgo(type); + std::string calgo = MessageDigestContext::getCanonicalAlgo(type); + if(MessageDigestContext::supports(calgo)) { + _tChunkChecksum->setAlgo(calgo); } else { cancelChunkChecksumTransaction(); } @@ -439,7 +433,7 @@ void MetalinkParserController::addHashOfChunkChecksum(size_t order, const std::s if(_tChunkChecksum.isNull()) { return; } - if(isValidHash(_tChunkChecksum->getAlgo(), md)) { + if(MessageDigestContext::isValidHash(_tChunkChecksum->getAlgo(), md)) { _tempChunkChecksums.push_back(std::make_pair(order, md)); } else { cancelChunkChecksumTransaction(); @@ -463,7 +457,7 @@ void MetalinkParserController::setMessageDigestOfChunkChecksum(const std::string if(_tChunkChecksum.isNull()) { return; } - if(isValidHash(_tChunkChecksum->getAlgo(), md)) { + if(MessageDigestContext::isValidHash(_tChunkChecksum->getAlgo(), md)) { _tempHashPair.second = md; } else { cancelChunkChecksumTransaction(); diff --git a/src/messageDigest.cc b/src/messageDigest.cc index ce860f89..02e7bfbf 100644 --- a/src/messageDigest.cc +++ b/src/messageDigest.cc @@ -42,7 +42,7 @@ const std::string MessageDigestContext::SHA1("sha-1"); const std::string MessageDigestContext::SHA256("sha-256"); -const std::string MessageDigestContext::MD5("md-5"); +const std::string MessageDigestContext::MD5("md5"); namespace { struct DigestAlgoEntry { @@ -68,13 +68,9 @@ static const DigestAlgoMap& getDigestAlgos() DigestAlgoMap::value_type("md5", DigestAlgoEntry(EVP_md5(), STRENGTH_MD5)), DigestAlgoMap::value_type ("sha-1", DigestAlgoEntry(EVP_sha1(), STRENGTH_SHA_1)), - DigestAlgoMap::value_type - ("sha1", DigestAlgoEntry(EVP_sha1(), STRENGTH_SHA_1)), # ifdef HAVE_EVP_SHA256 DigestAlgoMap::value_type ("sha-256", DigestAlgoEntry(EVP_sha256(), STRENGTH_SHA_256)), - DigestAlgoMap::value_type - ("sha256", DigestAlgoEntry(EVP_sha256(), STRENGTH_SHA_256)), # endif // HAVE_EVP_SHA256 #elif HAVE_LIBGCRYPT DigestAlgoMap::value_type @@ -82,17 +78,29 @@ static const DigestAlgoMap& getDigestAlgos() DigestAlgoMap::value_type ("sha-1", DigestAlgoEntry(GCRY_MD_SHA1, STRENGTH_SHA_1)), DigestAlgoMap::value_type - ("sha1", DigestAlgoEntry(GCRY_MD_SHA1, STRENGTH_SHA_1)), - DigestAlgoMap::value_type ("sha-256", DigestAlgoEntry(GCRY_MD_SHA256, STRENGTH_SHA_256)), - DigestAlgoMap::value_type - ("sha256", DigestAlgoEntry(GCRY_MD_SHA256, STRENGTH_SHA_256)), #endif // HAVE_LIBGCRYPT }; static const DigestAlgoMap algomap(vbegin(digests), vend(digests)); return algomap; } +std::string MessageDigestContext::getCanonicalAlgo +(const std::string& algostring) +{ + if(strcasecmp("sha-1", algostring.c_str()) == 0 || + strcasecmp("sha1", algostring.c_str()) == 0) { + return SHA1; + } else if(strcasecmp("sha-256", algostring.c_str()) == 0 || + strcasecmp("sha256", algostring.c_str()) == 0) { + return SHA256; + } else if(strcasecmp("md5", algostring.c_str()) == 0) { + return MD5; + } else { + return algostring; + } +} + std::string MessageDigestContext::digestFinal() { size_t length = digestLength(algo); @@ -151,4 +159,11 @@ bool MessageDigestContext::isStronger return (*lhsitr).second.strength > (*rhsitr).second.strength; } +bool MessageDigestContext::isValidHash +(const std::string& algostring, const std::string& hashstring) +{ + return util::isHexDigit(hashstring) && + supports(algostring) && digestLength(algostring)*2 == hashstring.size(); +} + } // namespace aria2 diff --git a/src/messageDigest.h b/src/messageDigest.h index 789b3a03..2e42faf3 100644 --- a/src/messageDigest.h +++ b/src/messageDigest.h @@ -106,6 +106,14 @@ public: // or both are not supported, returns false. static bool isStronger(const std::string& lhs, const std::string& rhs); + static bool isValidHash + (const std::string& algostring, const std::string& hashstring); + + // Returns canonical hash algorithm name of given algostring. If + // given algostring is not supported, then returns algostring + // unchanged. + static std::string getCanonicalAlgo(const std::string& algostring); + std::string digestFinal(); #if defined(HAVE_OLD_LIBSSL) |
