summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-05-14 14:11:56 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-05-14 14:11:56 +0000
commitb305edd7c5ccd2c0ca78ecb3e92f9840065b5c31 (patch)
treec2af0bb7f71522652ea1cf71f915345e1889b691 /src
parent88475a6aa092f402ca8bad19378e7e030480c533 (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.h7
-rw-r--r--src/MetalinkParserController.cc32
-rw-r--r--src/messageDigest.cc33
-rw-r--r--src/messageDigest.h8
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)