git / moonbite-core / src/crypto/siphash.h · raw

// Copyright (c) 2016-2018 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_CRYPTO_SIPHASH_H#define BITCOIN_CRYPTO_SIPHASH_H#include <stdint.h>#include <uint256.h>/** SipHash-2-4 */class CSipHasher{private:    uint64_t v[4];    uint64_t tmp;    uint8_t count; // Only the low 8 bits of the input size matter.public:    /** Construct a SipHash calculator initialized with 128-bit key (k0, k1) */    CSipHasher(uint64_t k0, uint64_t k1);    /** Hash a 64-bit integer worth of data     *  It is treated as if this was the little-endian interpretation of 8 bytes.     *  This function can only be used when a multiple of 8 bytes have been written so far.     */    CSipHasher& Write(uint64_t data);    /** Hash arbitrary bytes. */    CSipHasher& Write(const unsigned char* data, size_t size);    /** Compute the 64-bit SipHash-2-4 of the data written so far. The object remains untouched. */    uint64_t Finalize() const;};/** Optimized SipHash-2-4 implementation for uint256. * *  It is identical to: *    SipHasher(k0, k1) *      .Write(val.GetUint64(0)) *      .Write(val.GetUint64(1)) *      .Write(val.GetUint64(2)) *      .Write(val.GetUint64(3)) *      .Finalize() */uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256& val);uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256& val, uint32_t extra);#endif // BITCOIN_CRYPTO_SIPHASH_H