mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-03 04:52:10 +00:00
b79ead9c84
* Replicate poco into base/poco/ * De-register poco submodule * Build poco from ClickHouse * Exclude poco from stylecheck * Exclude poco from whitespace check * Exclude poco from typo check * Remove x bit from sources/headers (the style check complained) * Exclude poco from duplicate include check * Fix fasttest * Remove contrib/poco-cmake/* * Simplify poco build descriptions * Remove poco stuff not used by ClickHouse * Glob poco sources * Exclude poco from clang-tidy
81 lines
1.5 KiB
C++
81 lines
1.5 KiB
C++
//
|
|
// DigestEngine.cpp
|
|
//
|
|
// Library: Crypto
|
|
// Package: Digest
|
|
// Module: DigestEngine
|
|
//
|
|
// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#include "Poco/Crypto/DigestEngine.h"
|
|
#include "Poco/Exception.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace Crypto {
|
|
|
|
|
|
DigestEngine::DigestEngine(const std::string& name):
|
|
_name(name),
|
|
_pContext(EVP_MD_CTX_create())
|
|
{
|
|
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
|
if (!md) throw Poco::NotFoundException(_name);
|
|
EVP_DigestInit_ex(_pContext, md, NULL);
|
|
}
|
|
|
|
|
|
DigestEngine::~DigestEngine()
|
|
{
|
|
EVP_MD_CTX_destroy(_pContext);
|
|
}
|
|
|
|
int DigestEngine::nid() const
|
|
{
|
|
return EVP_MD_type(EVP_MD_CTX_md(_pContext));
|
|
}
|
|
|
|
std::size_t DigestEngine::digestLength() const
|
|
{
|
|
return EVP_MD_CTX_size(_pContext);
|
|
}
|
|
|
|
|
|
void DigestEngine::reset()
|
|
{
|
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
|
EVP_MD_CTX_free(_pContext);
|
|
_pContext = EVP_MD_CTX_create();
|
|
#else
|
|
EVP_MD_CTX_cleanup(_pContext);
|
|
#endif
|
|
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
|
if (!md) throw Poco::NotFoundException(_name);
|
|
EVP_DigestInit_ex(_pContext, md, NULL);
|
|
}
|
|
|
|
|
|
const Poco::DigestEngine::Digest& DigestEngine::digest()
|
|
{
|
|
_digest.clear();
|
|
unsigned len = EVP_MD_CTX_size(_pContext);
|
|
_digest.resize(len);
|
|
EVP_DigestFinal_ex(_pContext, &_digest[0], &len);
|
|
reset();
|
|
return _digest;
|
|
}
|
|
|
|
|
|
void DigestEngine::updateImpl(const void* data, std::size_t length)
|
|
{
|
|
EVP_DigestUpdate(_pContext, data, length);
|
|
}
|
|
|
|
|
|
} } // namespace Poco::Crypto
|