24 #include "ndn-cxx/security/impl/openssl-helper.hpp"
26 #include <boost/lexical_cast.hpp>
32 class SignerFilter::Impl
40 : m_impl(make_unique<Impl>())
42 const EVP_MD* md = detail::digestAlgorithmToEvpMd(algo);
45 boost::lexical_cast<std::string>(algo)));
47 if (EVP_DigestSignInit(m_impl->ctx,
nullptr, md,
nullptr,
48 reinterpret_cast<EVP_PKEY*
>(key.getEvpPkey())) != 1)
50 boost::lexical_cast<std::string>(algo) +
" digest and " +
51 boost::lexical_cast<std::string>(key.
getKeyType()) +
" key"));
57 SignerFilter::convert(span<const uint8_t> buf)
59 if (EVP_DigestSignUpdate(m_impl->ctx, buf.data(), buf.size()) != 1)
66 SignerFilter::finalize()
69 if (EVP_DigestSignFinal(m_impl->ctx,
nullptr, &sigLen) != 1)
72 auto buffer = make_unique<OBuffer>(sigLen);
73 if (EVP_DigestSignFinal(m_impl->ctx, buffer->data(), &sigLen) != 1)
76 buffer->erase(buffer->begin() + sigLen, buffer->end());
85 return make_unique<SignerFilter>(algo, key);