tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SHA1.h (1687B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 /* Simple class for computing SHA1. */
      8 
      9 #ifndef mozilla_SHA1_h
     10 #define mozilla_SHA1_h
     11 
     12 #include "mozilla/Types.h"
     13 
     14 #include <stddef.h>
     15 #include <stdint.h>
     16 
     17 namespace mozilla {
     18 
     19 /**
     20 * This class computes the SHA1 hash of a byte sequence, or of the concatenation
     21 * of multiple sequences.  For example, computing the SHA1 of two sequences of
     22 * bytes could be done as follows:
     23 *
     24 *   void SHA1(const uint8_t* buf1, uint32_t size1,
     25 *             const uint8_t* buf2, uint32_t size2,
     26 *             SHA1Sum::Hash& hash)
     27 *   {
     28 *     SHA1Sum s;
     29 *     s.update(buf1, size1);
     30 *     s.update(buf2, size2);
     31 *     s.finish(hash);
     32 *   }
     33 *
     34 * The finish method may only be called once and cannot be followed by calls
     35 * to update.
     36 */
     37 class SHA1Sum {
     38  union {
     39    uint32_t mW[16]; /* input buffer */
     40    uint8_t mB[64];
     41  } mU;
     42  uint64_t mSize;  /* count of hashed bytes. */
     43  unsigned mH[22]; /* 5 state variables, 16 tmp values, 1 extra */
     44  bool mDone;
     45 
     46 public:
     47  MFBT_API SHA1Sum();
     48 
     49  static constexpr size_t kHashSize = 20;
     50  typedef uint8_t Hash[kHashSize];
     51 
     52  /* Add len bytes of dataIn to the data sequence being hashed. */
     53  MFBT_API void update(const void* aData, uint32_t aLength);
     54 
     55  /* Compute the final hash of all data into hashOut. */
     56  MFBT_API void finish(SHA1Sum::Hash& aHashOut);
     57 };
     58 
     59 } /* namespace mozilla */
     60 
     61 #endif /* mozilla_SHA1_h */