# Threshold Secret Sharing

New in version 1.9.1.

Threshold secret sharing allows splitting a secret into `N` shares such that `M` (for specified `M` <= `N`) is sufficient to recover the secret, but an attacker with `M - 1` shares cannot derive any information about the secret.

The implementation in Botan follows an expired Internet draft “draft-mcgrew-tss-03”. Several other implementations of this TSS format exist.

class `RTSS_Share`
  static std::vector<RTSS_Share> `split`(uint8_t M, uint8_t N, const uint8_t secret[], uint16_t secret_len, const std::vector<uint8_t> &identifier, const std::string &hash_fn, RandomNumberGenerator &rng)

    Split a secret. The identifier is an optional key identifier which may be up to 16 bytes long. Shorter identifiers are padded with zeros.

    The hash function must be either “SHA-1”, “SHA-256”, or “None” to disable the checksum.

    This will return a vector of length `N`, any `M` of these shares is sufficient to reconstruct the data.

  static secure_vector<uint8_t> `reconstruct`(const std::vector<RTSS_Share> &shares)

    Given a sufficient number of shares, reconstruct a secret.

  `RTSS_Share`(const uint8_t data[], size_t len)

    Read a TSS share as a sequence of bytes.

  const secure_vector<uint8> &`data`() const

    Return the data of this share.

  uint8_t `share_id`() const

    Return the share ID which will be in the range 1…255