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

#pragma once#include <mw/models/crypto/BlindingFactor.h>#include <mw/models/crypto/Commitment.h>class Pedersen{public:    //    // Creates a pedersen commitment from a value with a zero blinding factor.    //    static Commitment CommitTransparent(const uint64_t value);    //    // Creates a pedersen commitment from a value with the supplied blinding factor.    //    static Commitment Commit(        const uint64_t value,        const BlindingFactor& blindingFactor    );    //    // Adds the homomorphic pedersen commitments together.    //    static Commitment AddCommitments(        const std::vector<Commitment>& positive,        const std::vector<Commitment>& negative = {}    );    //    // Adds blinding factors together (first negating those in the "negative" vector)    //    static BlindingFactor AddBlindingFactors(        const std::vector<BlindingFactor>& positive,        const std::vector<BlindingFactor>& negative = { }    );    //    // Calculates the blinding factor x' = x + SHA256(xG+vH | xJ), used in the switch commitment x'G+vH.    //    static BlindingFactor BlindSwitch(        const BlindingFactor& secretKey,        const uint64_t amount    );private:    static Commitment PedersenCommitSum(        const std::vector<Commitment>& positive,        const std::vector<Commitment>& negative);    static BlindingFactor PedersenBlindSum(        const std::vector<BlindingFactor>& positive,        const std::vector<BlindingFactor>& negative);};