/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
contrib/libs/poco/Crypto/src/ECDSADigestEngine.cpp
100 строк
2 KB
qkrorlqr
Initial NBS OpenSource export
28 апр 2023, 21:54
28 апр 2023, 21:54
783a858
Код
Авторство
О чём код?
// // ECDSADigestEngine.cpp // // // Library: Crypto // Package: ECDSA // Module: ECDSADigestEngine // // Copyright (c) 2008, Applied Informatics Software Engineering GmbH. // and Contributors. // // SPDX-License-Identifier: BSL-1.0 // #include "Poco/Crypto/ECDSADigestEngine.h" #include <openssl/ecdsa.h> namespace Poco { namespace Crypto { ECDSADigestEngine::ECDSADigestEngine(const ECKey& key, const std::string &name): _key(key), _engine(name) { } ECDSADigestEngine::~ECDSADigestEngine() { } std::size_t ECDSADigestEngine::digestLength() const { return _engine.digestLength(); } void ECDSADigestEngine::reset() { _engine.reset(); _digest.clear(); _signature.clear(); } const DigestEngine::Digest& ECDSADigestEngine::digest() { if (_digest.empty()) { _digest = _engine.digest(); } return _digest; } const DigestEngine::Digest& ECDSADigestEngine::signature() { if (_signature.empty()) { digest(); _signature.resize(_key.size()); unsigned sigLen = static_cast<unsigned>(_signature.size()); if (!ECDSA_sign(0, &_digest[0], static_cast<unsigned>(_digest.size()), &_signature[0], &sigLen, _key.impl()->getECKey())) { throw OpenSSLException(); } if (sigLen < _signature.size()) _signature.resize(sigLen); } return _signature; } bool ECDSADigestEngine::verify(const DigestEngine::Digest& sig) { digest(); EC_KEY* pKey = _key.impl()->getECKey(); if (pKey) { int ret = ECDSA_verify(0, &_digest[0], static_cast<unsigned>(_digest.size()), &sig[0], static_cast<unsigned>(sig.size()), pKey); if (1 == ret) return true; else if (0 == ret) return false; } throw OpenSSLException(); } void ECDSADigestEngine::updateImpl(const void* data, std::size_t length) { _engine.update(data, length); } } } // namespace Poco::Crypto