Skip to content

title: multisig/MultiSig.hpp summary: Standalone multi-signature primitive: payload signature verification and N-of-M quorum evaluation over a signer set. No CRDT, node, or pubsub dependency (MSIG-03).


multisig/MultiSig.hpp

Standalone multi-signature primitive: payload signature verification and N-of-M quorum evaluation over a signer set. No CRDT, node, or pubsub dependency (MSIG-03). More...

Namespaces

Name
sgns
sgns::multisig

Classes

Name
struct sgns::multisig::QuorumResult
Result of an N-of-M quorum evaluation.
class sgns::multisig::MultiSig
Configured N-of-M signature evaluator.

Types

Name
using std::vector< uint8_t > SignatureBytes
using std::vector< std::pair< std::string, SignatureBytes > > CollectedSignatures

Functions

Name
bool VerifyPayloadSignature(const std::string & address, const SignatureBytes & signature, const std::vector< uint8_t > & payload)
Verifies a signature over an arbitrary raw-byte payload. Delegates entirely to GeniusAccount::VerifySignature; no custom crypto or signing-bytes construction is performed here (the payload is assumed already-canonical).

Detailed Description

Standalone multi-signature primitive: payload signature verification and N-of-M quorum evaluation over a signer set. No CRDT, node, or pubsub dependency (MSIG-03).

Date: 2026-07-21 Henrique A. Klein ([email protected])

Types Documentation

using SignatureBytes

using sgns::multisig::SignatureBytes = typedef std::vector<uint8_t>;

using CollectedSignatures

using sgns::multisig::CollectedSignatures = typedef std::vector<std::pair<std::string, SignatureBytes> >;

Functions Documentation

function VerifyPayloadSignature

bool VerifyPayloadSignature(
    const std::string & address,
    const SignatureBytes & signature,
    const std::vector< uint8_t > & payload
)

Verifies a signature over an arbitrary raw-byte payload. Delegates entirely to GeniusAccount::VerifySignature; no custom crypto or signing-bytes construction is performed here (the payload is assumed already-canonical).

Parameters:

  • address Public address (hex-encoded public key) the signature is claimed to be from.
  • signature Raw signature bytes to verify.
  • payload Raw payload bytes the signature is claimed to cover.

Return: true if the signature is valid for the given address and payload, false otherwise (including malformed address or incorrectly sized signature).

Source code

#ifndef SGNS_MULTISIG_MULTISIG_HPP
#define SGNS_MULTISIG_MULTISIG_HPP

#include <cstddef>
#include <cstdint>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>

namespace sgns::multisig
{
    using SignatureBytes      = std::vector<uint8_t>;
    using CollectedSignatures = std::vector<std::pair<std::string, SignatureBytes>>;

    bool VerifyPayloadSignature( const std::string          &address,
                                 const SignatureBytes       &signature,
                                 const std::vector<uint8_t> &payload );

    struct QuorumResult
    {
        bool     has_quorum         = false; 
        uint64_t valid_unique_count = 0;      
    };

    class MultiSig
    {
    public:
        MultiSig( const std::vector<std::string> &signer_set, uint64_t required_signatures );

        [[nodiscard]] bool IsValid() const;
        [[nodiscard]] uint64_t RequiredSignatures() const;
        [[nodiscard]] size_t AuthorizedSignerCount() const;

        QuorumResult EvaluateQuorum( const CollectedSignatures  &collected_signatures,
                                     const std::vector<uint8_t> &payload ) const;

    private:
        std::unordered_set<std::string> signer_set_;
        uint64_t                        required_signatures_ = 0;
    };
} // namespace sgns::multisig

#endif // SGNS_MULTISIG_MULTISIG_HPP

Updated on 2026-08-06 at 13:59:19 +0000