LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/base - messagedigest.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 1 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : 
      11             : #ifndef WEBRTC_BASE_MESSAGEDIGEST_H_
      12             : #define WEBRTC_BASE_MESSAGEDIGEST_H_
      13             : 
      14             : #include <string>
      15             : 
      16             : namespace rtc {
      17             : 
      18             : // Definitions for the digest algorithms.
      19             : extern const char DIGEST_MD5[];
      20             : extern const char DIGEST_SHA_1[];
      21             : extern const char DIGEST_SHA_224[];
      22             : extern const char DIGEST_SHA_256[];
      23             : extern const char DIGEST_SHA_384[];
      24             : extern const char DIGEST_SHA_512[];
      25             : 
      26             : // A general class for computing hashes.
      27             : class MessageDigest {
      28             :  public:
      29             :   enum { kMaxSize = 64 };  // Maximum known size (SHA-512)
      30           0 :   virtual ~MessageDigest() {}
      31             :   // Returns the digest output size (e.g. 16 bytes for MD5).
      32             :   virtual size_t Size() const = 0;
      33             :   // Updates the digest with |len| bytes from |buf|.
      34             :   virtual void Update(const void* buf, size_t len) = 0;
      35             :   // Outputs the digest value to |buf| with length |len|.
      36             :   // Returns the number of bytes written, i.e., Size().
      37             :   virtual size_t Finish(void* buf, size_t len) = 0;
      38             : };
      39             : 
      40             : // A factory class for creating digest objects.
      41             : class MessageDigestFactory {
      42             :  public:
      43             :   static MessageDigest* Create(const std::string& alg);
      44             : };
      45             : 
      46             : // A whitelist of approved digest algorithms from RFC 4572 (FIPS 180).
      47             : bool IsFips180DigestAlgorithm(const std::string& alg);
      48             : 
      49             : // Functions to create hashes.
      50             : 
      51             : // Computes the hash of |in_len| bytes of |input|, using the |digest| hash
      52             : // implementation, and outputs the hash to the buffer |output|, which is
      53             : // |out_len| bytes long. Returns the number of bytes written to |output| if
      54             : // successful, or 0 if |out_len| was too small.
      55             : size_t ComputeDigest(MessageDigest* digest, const void* input, size_t in_len,
      56             :                      void* output, size_t out_len);
      57             : // Like the previous function, but creates a digest implementation based on
      58             : // the desired digest name |alg|, e.g. DIGEST_SHA_1. Returns 0 if there is no
      59             : // digest with the given name.
      60             : size_t ComputeDigest(const std::string& alg, const void* input, size_t in_len,
      61             :                      void* output, size_t out_len);
      62             : // Computes the hash of |input| using the |digest| hash implementation, and
      63             : // returns it as a hex-encoded string.
      64             : std::string ComputeDigest(MessageDigest* digest, const std::string& input);
      65             : // Like the previous function, but creates a digest implementation based on
      66             : // the desired digest name |alg|, e.g. DIGEST_SHA_1. Returns empty string if
      67             : // there is no digest with the given name.
      68             : std::string ComputeDigest(const std::string& alg, const std::string& input);
      69             : // Like the previous function, but returns an explicit result code.
      70             : bool ComputeDigest(const std::string& alg, const std::string& input,
      71             :                    std::string* output);
      72             : 
      73             : // Shorthand way to compute a hex-encoded hash using MD5.
      74             : inline std::string MD5(const std::string& input) {
      75             :   return ComputeDigest(DIGEST_MD5, input);
      76             : }
      77             : 
      78             : // Functions to compute RFC 2104 HMACs.
      79             : 
      80             : // Computes the HMAC of |in_len| bytes of |input|, using the |digest| hash
      81             : // implementation and |key_len| bytes of |key| to key the HMAC, and outputs
      82             : // the HMAC to the buffer |output|, which is |out_len| bytes long. Returns the
      83             : // number of bytes written to |output| if successful, or 0 if |out_len| was too
      84             : // small.
      85             : size_t ComputeHmac(MessageDigest* digest, const void* key, size_t key_len,
      86             :                    const void* input, size_t in_len,
      87             :                    void* output, size_t out_len);
      88             : // Like the previous function, but creates a digest implementation based on
      89             : // the desired digest name |alg|, e.g. DIGEST_SHA_1. Returns 0 if there is no
      90             : // digest with the given name.
      91             : size_t ComputeHmac(const std::string& alg, const void* key, size_t key_len,
      92             :                    const void* input, size_t in_len,
      93             :                    void* output, size_t out_len);
      94             : // Computes the HMAC of |input| using the |digest| hash implementation and |key|
      95             : // to key the HMAC, and returns it as a hex-encoded string.
      96             : std::string ComputeHmac(MessageDigest* digest, const std::string& key,
      97             :                         const std::string& input);
      98             : // Like the previous function, but creates a digest implementation based on
      99             : // the desired digest name |alg|, e.g. DIGEST_SHA_1. Returns empty string if
     100             : // there is no digest with the given name.
     101             : std::string ComputeHmac(const std::string& alg, const std::string& key,
     102             :                         const std::string& input);
     103             : // Like the previous function, but returns an explicit result code.
     104             : bool ComputeHmac(const std::string& alg, const std::string& key,
     105             :                  const std::string& input, std::string* output);
     106             : 
     107             : }  // namespace rtc
     108             : 
     109             : #endif  // WEBRTC_BASE_MESSAGEDIGEST_H_

Generated by: LCOV version 1.13