LCOV - code coverage report
Current view: top level - source/common/crypto - utility.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 1 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 1 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <cstdint>
       4             : #include <vector>
       5             : 
       6             : #include "envoy/buffer/buffer.h"
       7             : #include "envoy/common/crypto/crypto.h"
       8             : 
       9             : #include "source/common/singleton/threadsafe_singleton.h"
      10             : 
      11             : #include "absl/strings/string_view.h"
      12             : 
      13             : namespace Envoy {
      14             : namespace Common {
      15             : namespace Crypto {
      16             : 
      17             : struct VerificationOutput {
      18             :   /**
      19             :    * Verification result. If result_ is true, error_message_ is empty.
      20             :    */
      21             :   bool result_;
      22             : 
      23             :   /**
      24             :    * Error message when verification failed.
      25             :    * TODO(crazyxy): switch to absl::StatusOr when available
      26             :    */
      27             :   std::string error_message_;
      28             : };
      29             : 
      30             : class Utility {
      31             : public:
      32           0 :   virtual ~Utility() = default;
      33             : 
      34             :   /**
      35             :    * Computes the SHA-256 digest of a buffer.
      36             :    * @param buffer the buffer.
      37             :    * @return a vector of bytes for the computed digest.
      38             :    */
      39             :   virtual std::vector<uint8_t> getSha256Digest(const Buffer::Instance& buffer) PURE;
      40             : 
      41             :   /**
      42             :    * Computes the SHA-256 HMAC for a given key and message.
      43             :    * @param key the HMAC function key.
      44             :    * @param message string_view message data for the HMAC function.
      45             :    * @return a vector of bytes for the computed HMAC.
      46             :    */
      47             :   virtual std::vector<uint8_t> getSha256Hmac(const std::vector<uint8_t>& key,
      48             :                                              absl::string_view message) PURE;
      49             : 
      50             :   /**
      51             :    * Verify cryptographic signatures.
      52             :    * @param hash hash function(including SHA1, SHA224, SHA256, SHA384, SHA512)
      53             :    * @param key pointer to EVP_PKEY public key
      54             :    * @param signature signature
      55             :    * @param text clear text
      56             :    * @return If the result_ is true, the error_message_ is empty; otherwise,
      57             :    * the error_message_ stores the error message
      58             :    */
      59             :   virtual const VerificationOutput verifySignature(absl::string_view hash, CryptoObject& key,
      60             :                                                    const std::vector<uint8_t>& signature,
      61             :                                                    const std::vector<uint8_t>& text) PURE;
      62             : 
      63             :   /**
      64             :    * Import public key.
      65             :    * @param key key string
      66             :    * @return pointer to EVP_PKEY public key
      67             :    */
      68             :   virtual CryptoObjectPtr importPublicKey(const std::vector<uint8_t>& key) PURE;
      69             : };
      70             : 
      71             : using UtilitySingleton = InjectableSingleton<Utility>;
      72             : using ScopedUtilitySingleton = ScopedInjectableLoader<Utility>;
      73             : 
      74             : } // namespace Crypto
      75             : } // namespace Common
      76             : } // namespace Envoy

Generated by: LCOV version 1.15