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

#pragma once#include <mw/crypto/PublicKeys.h>#include <mw/models/crypto/BlindingFactor.h>#include <mw/models/crypto/Commitment.h>#include <mw/models/crypto/PublicKey.h>#include <mw/models/crypto/SecretKey.h>// FUTURE: Make this more efficientclass Keys{public:    static Keys From(const PublicKey& public_key)    {        return Keys(public_key);    }    static Keys From(const SecretKey& secret_key)    {        return Keys(PublicKey::From(secret_key));    }    static Keys Random()    {        return Keys(PublicKey::From(SecretKey::Random()));    }    const PublicKey& PubKey() const noexcept { return m_pubkey; }    Keys& Add(const PublicKey& public_key)    {        m_pubkey = PublicKeys::Add({m_pubkey, public_key});        return *this;    }    Keys& Add(const SecretKey& secret_key)    {        m_pubkey = PublicKeys::Add({m_pubkey, PublicKey::From(secret_key)});        return *this;    }    Keys& Add(const std::vector<PublicKey>& public_keys)    {        std::vector<PublicKey> pubkeys = public_keys;        pubkeys.push_back(m_pubkey);        m_pubkey = PublicKeys::Add(pubkeys);        return *this;    }    Keys& Mul(const SecretKey& secret_key)    {        m_pubkey = PublicKeys::MultiplyKey(m_pubkey, secret_key);        return *this;    }private:    Keys(const PublicKey& pubkey)        : m_pubkey(pubkey) { }    PublicKey m_pubkey;};