#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 #include #include 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& 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& vec() const noexcept { return m_value.vec(); } std::array 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; };