Skip to content

src/crypto/bip39/entropy_accumulator.hpp

Namespaces

Name
sgns
sgns::crypto
sgns::crypto::bip39

Classes

Name
struct sgns::crypto::bip39::EntropyToken
class sgns::crypto::bip39::EntropyAccumulator
Accumulates entropy tokens and exposes entropy + checksum.

Types

Name
enum class Bip39EntropyError

Functions

Name
OUTCOME_HPP_DECLARE_ERROR_2(sgns::crypto::bip39 , Bip39EntropyError )

Types Documentation

enum Bip39EntropyError

Enumerator Value Description
WRONG_WORDS_COUNT 1
STORAGE_NOT_COMPLETE
STORAGE_IS_FULL

Functions Documentation

function OUTCOME_HPP_DECLARE_ERROR_2

OUTCOME_HPP_DECLARE_ERROR_2(
    sgns::crypto::bip39 ,
    Bip39EntropyError 
)

Source code

#ifndef SUPERGENIUS_CRYPTO_BIP39_ENTROPY_HPP
#define SUPERGENIUS_CRYPTO_BIP39_ENTROPY_HPP

#include "outcome/outcome.hpp"

#include <bitset>
#include <vector>

namespace sgns::crypto::bip39 {

  enum class Bip39EntropyError {
    WRONG_WORDS_COUNT = 1,
    STORAGE_NOT_COMPLETE,
    STORAGE_IS_FULL,
  };

  struct EntropyToken : public std::bitset<11> {
    using Parent = std::bitset<11>;
    using Parent::bitset;
  };

  class EntropyAccumulator {
   public:
    static outcome::result<EntropyAccumulator> create(size_t words_count);

    outcome::result<void> append(const EntropyToken &value);

    outcome::result<std::vector<uint8_t>> getEntropy() const;

    outcome::result<uint8_t> getChecksum() const;

    outcome::result<uint8_t> calculateChecksum() const;

   private:
    EntropyAccumulator(size_t bits_count, size_t checksum_bits_count);

    std::vector<uint8_t> bits_;
    const size_t total_bits_count_;
    const size_t checksum_bits_count_;
  };
}  // namespace sgns::crypto::bip39

OUTCOME_HPP_DECLARE_ERROR_2(sgns::crypto::bip39, Bip39EntropyError);

#endif  // SUPERGENIUS_CRYPTO_BIP39_ENTROPY_HPP

Updated on 2026-03-04 at 13:10:44 -0800