|
|
@@ -100,28 +100,27 @@ bool ProcessInner(const std::string &message, const int &bias, uint32_t *digest, |
|
|
w[i] = sigma3(w[i - 2]) + w[i - 7] + sigma2(w[i - 15]) + w[i - 16]; |
|
|
w[i] = sigma3(w[i - 2]) + w[i - 7] + sigma2(w[i - 15]) + w[i - 16]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::shared_ptr<uint32_t> hash(new uint32_t[digest_size], std::default_delete<uint32_t[]>()); |
|
|
|
|
|
|
|
|
std::shared_ptr<uint32_t[]> hash(new uint32_t[digest_size]()); |
|
|
size_t mem_size = digest_size * sizeof(uint32_t); |
|
|
size_t mem_size = digest_size * sizeof(uint32_t); |
|
|
auto ret = memcpy_s(hash.get(), mem_size, digest, mem_size); |
|
|
auto ret = memcpy_s(hash.get(), mem_size, digest, mem_size); |
|
|
if (ret != EOK) { |
|
|
if (ret != EOK) { |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
for (int i = 0; i < kIterationNumber; ++i) { |
|
|
for (int i = 0; i < kIterationNumber; ++i) { |
|
|
uint32_t t1 = |
|
|
|
|
|
w[i] + constant[i] + hash.get()[7] + sigma1(hash.get()[4]) + ch(hash.get()[4], hash.get()[5], hash.get()[6]); |
|
|
|
|
|
uint32_t t2 = sigma0(hash.get()[0]) + ma(hash.get()[0], hash.get()[1], hash.get()[2]); |
|
|
|
|
|
|
|
|
uint32_t t1 = w[i] + constant[i] + hash[7] + sigma1(hash[4]) + ch(hash[4], hash[5], hash[6]); |
|
|
|
|
|
uint32_t t2 = sigma0(hash[0]) + ma(hash[0], hash[1], hash[2]); |
|
|
for (int j = digest_size - 1; j >= 0; --j) { |
|
|
for (int j = digest_size - 1; j >= 0; --j) { |
|
|
if (j == 4) { |
|
|
if (j == 4) { |
|
|
hash.get()[j] = hash.get()[j - 1] + t1; |
|
|
|
|
|
|
|
|
hash[j] = hash[j - 1] + t1; |
|
|
} else if (j == 0) { |
|
|
} else if (j == 0) { |
|
|
hash.get()[j] = t1 + t2; |
|
|
|
|
|
|
|
|
hash[j] = t1 + t2; |
|
|
} else { |
|
|
} else { |
|
|
hash.get()[j] = hash.get()[j - 1]; |
|
|
|
|
|
|
|
|
hash[j] = hash[j - 1]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
for (int i = 0; i < digest_size; ++i) { |
|
|
for (int i = 0; i < digest_size; ++i) { |
|
|
digest[i] += hash.get()[i]; |
|
|
|
|
|
|
|
|
digest[i] += hash[i]; |
|
|
} |
|
|
} |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
|