7#include <initializer_list>
12#include <userver/utils/flags.hpp>
14#include <userver/crypto/basic_types.hpp>
15#include <userver/crypto/certificate.hpp>
16#include <userver/crypto/exception.hpp>
17#include <userver/crypto/private_key.hpp>
19USERVER_NAMESPACE_BEGIN
26 explicit Signer(
const std::string& name);
30 virtual std::string
Sign(std::initializer_list<std::string_view> data)
const = 0;
34class SignerNone
final :
public Signer {
39 std::string
Sign(std::initializer_list<std::string_view> data)
const override;
43template <DigestSize Bits>
44class HmacShaSigner
final :
public Signer {
48 ~HmacShaSigner()
override;
51 std::string
Sign(std::initializer_list<std::string_view> data)
const override;
59using SignerHs1 = HmacShaSigner<DigestSize::k160>;
60using SignerHs256 = HmacShaSigner<DigestSize::k256>;
61using SignerHs384 = HmacShaSigner<DigestSize::k384>;
62using SignerHs512 = HmacShaSigner<DigestSize::k512>;
66template <DsaType Type, DigestSize Bits>
67class DsaSigner
final :
public Signer {
70 explicit DsaSigner(
const std::string& privkey,
const std::string& password = {});
73 std::string
Sign(std::initializer_list<std::string_view> data)
const override;
86using SignerRs256 = DsaSigner<DsaType::kRsa, DigestSize::k256>;
87using SignerRs384 = DsaSigner<DsaType::kRsa, DigestSize::k384>;
88using SignerRs512 = DsaSigner<DsaType::kRsa, DigestSize::k512>;
96using SignerEs256 = DsaSigner<DsaType::kEc, DigestSize::k256>;
97using SignerEs384 = DsaSigner<DsaType::kEc, DigestSize::k384>;
98using SignerEs512 = DsaSigner<DsaType::kEc, DigestSize::k512>;
106using SignerPs256 = DsaSigner<DsaType::kRsaPss, DigestSize::k256>;
107using SignerPs384 = DsaSigner<DsaType::kRsaPss, DigestSize::k384>;
108using SignerPs512 = DsaSigner<DsaType::kRsaPss, DigestSize::k512>;
112class CmsSigner
final :
public NamedAlgo {
138 ~CmsSigner()
override;
141 std::string
Sign(std::initializer_list<std::string_view> data, utils::Flags<
Flags> flags,
OutForm out_form)
const;
151using SignerRs1 = DsaSigner<DsaType::kRsa, DigestSize::k160>;
157using SignerPs1 = DsaSigner<DsaType::kRsaPss, DigestSize::k160>;