32
32
* files in the program, then also delete it here.
34
34
/* copyright --> */
35
#include "AppleMessageDigestImpl.h"
36
#include "MessageDigestImpl.h"
37
38
#include <CommonCrypto/CommonDigest.h>
39
#include "array_fun.h"
40
#include "a2functional.h"
41
#include "HashFuncEntry.h"
45
43
template<size_t dlen,
61
62
virtual void update(const void* data, size_t length) CXX11_OVERRIDE {
63
auto bytes = reinterpret_cast<const char*>(data);
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);
68
71
virtual void digest(unsigned char* md) CXX11_OVERRIDE {
110
113
MessageDigestSHA512;
112
117
std::unique_ptr<MessageDigestImpl> MessageDigestImpl::sha1()
114
119
return std::unique_ptr<MessageDigestImpl>(new MessageDigestSHA1());
117
std::unique_ptr<MessageDigestImpl> MessageDigestImpl::create
118
(const std::string& hashType)
120
if (hashType == "sha-1") {
121
return make_unique<MessageDigestSHA1>();
123
if (hashType == "sha-224") {
124
return make_unique<MessageDigestSHA224>();
126
if (hashType == "sha-256") {
127
return make_unique<MessageDigestSHA256>();
129
if (hashType == "sha-384") {
130
return make_unique<MessageDigestSHA384>();
132
if (hashType == "sha-512") {
133
return make_unique<MessageDigestSHA512>();
135
if (hashType == "md5") {
136
return make_unique<MessageDigestMD5>();
141
bool MessageDigestImpl::supports(const std::string& hashType)
143
return hashType == "sha-1" || hashType == "sha-224" ||
144
hashType == "sha-256" || hashType == "sha-384" ||
145
hashType == "sha-512" || hashType == "md5";
148
size_t MessageDigestImpl::getDigestLength(const std::string& hashType)
150
std::unique_ptr<MessageDigestImpl> impl = create(hashType);
154
return impl->getDigestLength();
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>() },
157
131
} // namespace aria2