~ubuntu-branches/ubuntu/trusty/aria2/trusty-proposed

« back to all changes in this revision

Viewing changes to src/AppleMessageDigestImpl.cc

  • Committer: Package Import Robot
  • Author(s): Kartik Mistry
  • Date: 2013-12-16 18:41:03 UTC
  • mfrom: (2.5.21 sid)
  • Revision ID: package-import@ubuntu.com-20131216184103-xzah3019zwut429g
Tags: 1.18.1-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 * files in the program, then also delete it here.
33
33
 */
34
34
/* copyright --> */
35
 
#include "AppleMessageDigestImpl.h"
 
35
 
 
36
#include "MessageDigestImpl.h"
36
37
 
37
38
#include <CommonCrypto/CommonDigest.h>
38
39
 
39
 
#include "array_fun.h"
40
 
#include "a2functional.h"
41
 
#include "HashFuncEntry.h"
42
 
 
43
40
namespace aria2 {
 
41
namespace {
44
42
 
45
43
template<size_t dlen,
46
44
         typename ctx_t,
52
50
  MessageDigestBase() { reset(); }
53
51
  virtual ~MessageDigestBase() {}
54
52
 
 
53
  static  size_t length() {
 
54
    return dlen;
 
55
  }
55
56
  virtual size_t getDigestLength() const CXX11_OVERRIDE {
56
57
    return dlen;
57
58
  }
59
60
    init_fn(&ctx_);
60
61
  }
61
62
  virtual void update(const void* data, size_t length) CXX11_OVERRIDE {
 
63
    auto bytes = reinterpret_cast<const char*>(data);
62
64
    while (length) {
63
65
      CC_LONG l = std::min(length, (size_t)std::numeric_limits<uint32_t>::max());
64
 
      update_fn(&ctx_, data, l);
 
66
      update_fn(&ctx_, bytes, l);
65
67
      length -= l;
 
68
      bytes += l;
66
69
    }
67
70
  }
68
71
  virtual void digest(unsigned char* md) CXX11_OVERRIDE {
109
112
                          CC_SHA512_Final>
110
113
MessageDigestSHA512;
111
114
 
 
115
} // namespace
 
116
 
112
117
std::unique_ptr<MessageDigestImpl> MessageDigestImpl::sha1()
113
118
{
114
119
  return std::unique_ptr<MessageDigestImpl>(new MessageDigestSHA1());
115
120
}
116
121
 
117
 
std::unique_ptr<MessageDigestImpl> MessageDigestImpl::create
118
 
(const std::string& hashType)
119
 
{
120
 
  if (hashType == "sha-1") {
121
 
    return make_unique<MessageDigestSHA1>();
122
 
  }
123
 
  if (hashType == "sha-224") {
124
 
    return make_unique<MessageDigestSHA224>();
125
 
  }
126
 
  if (hashType == "sha-256") {
127
 
    return make_unique<MessageDigestSHA256>();
128
 
  }
129
 
  if (hashType == "sha-384") {
130
 
    return make_unique<MessageDigestSHA384>();
131
 
  }
132
 
  if (hashType == "sha-512") {
133
 
    return make_unique<MessageDigestSHA512>();
134
 
  }
135
 
  if (hashType == "md5") {
136
 
    return make_unique<MessageDigestMD5>();
137
 
  }
138
 
  return nullptr;
139
 
}
140
 
 
141
 
bool MessageDigestImpl::supports(const std::string& hashType)
142
 
{
143
 
  return hashType == "sha-1" || hashType == "sha-224" ||
144
 
    hashType == "sha-256" || hashType == "sha-384" ||
145
 
    hashType == "sha-512" || hashType == "md5";
146
 
}
147
 
 
148
 
size_t MessageDigestImpl::getDigestLength(const std::string& hashType)
149
 
{
150
 
  std::unique_ptr<MessageDigestImpl> impl = create(hashType);
151
 
  if (!impl) {
152
 
    return 0;
153
 
  }
154
 
  return impl->getDigestLength();
155
 
}
 
122
MessageDigestImpl::hashes_t MessageDigestImpl::hashes = {
 
123
  { "sha-1", make_hi<MessageDigestSHA1>() },
 
124
  { "sha-224", make_hi<MessageDigestSHA224>() },
 
125
  { "sha-256", make_hi<MessageDigestSHA256>() },
 
126
  { "sha-384", make_hi<MessageDigestSHA384>() },
 
127
  { "sha-512", make_hi<MessageDigestSHA512>() },
 
128
  { "md5", make_hi<MessageDigestMD5>() },
 
129
};
156
130
 
157
131
} // namespace aria2