1
0
mirror of https://github.com/pocoproject/poco.git synced 2025-01-13 14:56:10 +01:00
poco/Crypto/src/DigestEngine.cpp
Roger Meier b0581433a7 LICENSE: add info about SPDX-License-Identifier usage and use it
fix: remove executable flag and change back to 100644 (was 100755)

Signed-off-by: Roger Meier <r.meier@siemens.com>
2014-05-14 08:38:09 +02:00

78 lines
1.4 KiB
C++

//
// DigestEngine.cpp
//
// $Id: //poco/1.4/Crypto/src/DigestEngine.cpp#1 $
//
// 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)
{
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
if (!md) throw Poco::NotFoundException(_name);
_ctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(_ctx, md, NULL);
}
DigestEngine::~DigestEngine()
{
EVP_MD_CTX_destroy(_ctx);
}
int DigestEngine::nid() const
{
return EVP_MD_nid(_ctx->digest);
}
std::size_t DigestEngine::digestLength() const
{
return EVP_MD_CTX_size(_ctx);
}
void DigestEngine::reset()
{
EVP_MD_CTX_cleanup(_ctx);
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
if (!md) throw Poco::NotFoundException(_name);
EVP_DigestInit_ex(_ctx, md, NULL);
}
const Poco::DigestEngine::Digest& DigestEngine::digest()
{
_digest.clear();
unsigned len = EVP_MD_CTX_size(_ctx);
_digest.resize(len);
EVP_DigestFinal_ex(_ctx, &_digest[0], &len);
reset();
return _digest;
}
void DigestEngine::updateImpl(const void* data, std::size_t length)
{
EVP_DigestUpdate(_ctx, data, length);
}
} } // namespace Poco::Crypto