git / moonbite-core / src/libmw/include/mw/models/crypto/BlindingFactor.h · raw

#pragma once// Copyright (c) 2018-2019 David Burkett// Distributed under the MIT software license, see the accompanying// file LICENSE or http://www.opensource.org/licenses/mit-license.php.#include <mw/common/Traits.h>#include <mw/models/crypto/BigInteger.h>#include <mw/models/crypto/SecretKey.h>class BlindingFactor : public Traits::ISerializable{public:    //    // Constructors    //    BlindingFactor() = default;    BlindingFactor(BigInt<32>&& value) : m_value(std::move(value)) { }    BlindingFactor(const BigInt<32>& value) : m_value(value) { }    BlindingFactor(const std::array<uint8_t, 32>& value) : m_value(value) { }    BlindingFactor(const SecretKey& key) : m_value(key.GetBigInt()) { }    BlindingFactor(const uint8_t* data) : m_value(data) { }    BlindingFactor(const BlindingFactor& other) = default;    BlindingFactor(BlindingFactor&& other) noexcept = default;    static BlindingFactor Random()    {        return BlindingFactor(SecretKey::Random());    }    //    // Operators    //    BlindingFactor& operator=(const BlindingFactor& other) = default;    BlindingFactor& operator=(BlindingFactor&& other) noexcept = default;    bool operator<(const BlindingFactor& rhs) const noexcept { return m_value < rhs.GetBigInt(); }    bool operator!=(const BlindingFactor& rhs) const noexcept { return m_value != rhs.GetBigInt(); }    bool operator==(const BlindingFactor& rhs) const noexcept { return m_value == rhs.GetBigInt(); }    //    // Getters    //    const BigInt<32>& GetBigInt() const noexcept { return m_value; }    const std::vector<uint8_t>& vec() const noexcept { return m_value.vec(); }    std::array<uint8_t, 32> array() const noexcept { return m_value.ToArray(); }    const uint8_t* data() const noexcept { return m_value.data(); }    uint8_t* data() noexcept { return m_value.data(); }    size_t size() const noexcept { return m_value.size(); }    bool IsZero() const noexcept { return m_value.IsZero(); }    //    // Serialization/Deserialization    //    IMPL_SERIALIZABLE(BlindingFactor, obj)    {        READWRITE(obj.m_value);    }    std::string ToHex() const { return m_value.ToHex(); }    static BlindingFactor FromHex(const std::string& hex) { return BlindingFactor(BigInt<32>::FromHex(hex)); }private:    // The 32 byte blinding factor.    BigInt<32> m_value;};