1
#pragma once
2

            
3
#include "source/common/crypto/crypto_impl.h"
4
#include "source/common/crypto/utility.h"
5

            
6
#include "absl/types/span.h"
7
#include "openssl/bio.h"
8
#include "openssl/bytestring.h"
9
#include "openssl/hmac.h"
10
#include "openssl/sha.h"
11

            
12
namespace Envoy {
13
namespace Common {
14
namespace Crypto {
15

            
16
class UtilityImpl : public Envoy::Common::Crypto::Utility {
17
public:
18
  std::vector<uint8_t> getSha256Digest(const Buffer::Instance& buffer) override;
19
  std::vector<uint8_t> getSha256Hmac(absl::Span<const uint8_t> key,
20
                                     absl::string_view message) override;
21
  absl::Status verifySignature(absl::string_view hash_function, PKeyObject& key,
22
                               absl::Span<const uint8_t> signature,
23
                               absl::Span<const uint8_t> text) override;
24
  absl::StatusOr<std::vector<uint8_t>> sign(absl::string_view hash_function, PKeyObject& key,
25
                                            absl::Span<const uint8_t> text) override;
26
  PKeyObjectPtr importPublicKeyPEM(absl::string_view key) override;
27
  PKeyObjectPtr importPublicKeyDER(absl::Span<const uint8_t> key) override;
28
  PKeyObjectPtr importPrivateKeyPEM(absl::string_view key) override;
29
  PKeyObjectPtr importPrivateKeyDER(absl::Span<const uint8_t> key) override;
30

            
31
private:
32
  const EVP_MD* getHashFunction(absl::string_view name);
33
};
34

            
35
} // namespace Crypto
36
} // namespace Common
37
} // namespace Envoy