Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions bip-0093.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ It reuses the base-32 character set from BIP-0173, and consists of:
* A human-readable part, which is the string "ms" (or "MS").
* A separator, which is always "1".
* A data part which is in turn subdivided into:
** A threshold parameter, which MUST be a single digit between "2" and "9", or the digit "0".
*** If the threshold parameter is "0" then the share index, defined below, MUST have a value of "s" (or "S").
** A threshold digit (also called ''k'' in the codex book), which MUST be a single digit between "2" and "9", or the digit "0". This digit encodes the threshold (the number of shares required for recovery), where threshold 1 is encoded as "0" for unshared secrets, and thresholds 2-9 are encoded as digits "2"-"9" for shared secrets.
Copy link

@BenWestgate BenWestgate Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if we need to mention what the digit is called in the Codex32 book.

This digit does not always directly encode the threshold number of strings required for recovery.

Threshold 1 is denoted by share index "s" NOT the first data character being "0". "0" is merely a recommendation, and if used, forces the share index to "s".

*** If the threshold digit is "0" then the share index, defined below, MUST have a value of "s" (or "S").

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Digit vs parameter is probably bikeshedding

** An identifier consisting of 4 bech32 characters.
** A share index, which is any bech32 character. Note that a share index value of "s" (or "S") is special and denotes the unshared secret (see section "Unshared Secret").
** A payload which is a sequence of up to 74 bech32 characters. (However, see '''Long codex32 Strings''' below for an exception to this limit.)
Expand Down Expand Up @@ -146,14 +146,14 @@ The master seed is decoded by converting the payload to bytes:

Note that unlike the decoding process in BIP-0173, we do NOT require that the incomplete group be all zeros.

For an unshared secret, the threshold parameter (the first character of the data part) is ignored (beyond the fact it must be a digit for the codex32 string to be valid).
We recommend using the digit "0" for the threshold parameter in this case.
For an unshared secret, the threshold digit (the first character of the data part, also called ''k'') is ignored (beyond the fact it must be a digit for the codex32 string to be valid).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if @apoelstra believes BIP93 should clarify the Codex32 book uses a different term k for the threshold parameter. We definitely should not keep repeating both nomenclatures.

We recommend using the digit "0" for the threshold digit in this case, which encodes a threshold of 1 (no sharing).
Copy link

@BenWestgate BenWestgate Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technically share index "s" denotes a threshold 1unshared secret as the threshold parameter is ignored in this case and it should stay that way for interoperability.

The 4 character identifier also has no effect beyond aiding users in distinguishing between multiple different master seeds in cases where they have more than one.

===Recovering Master Seed===

When the share index of a valid codex32 string (converted to lowercase) is not the letter "s", we call the string an codex32 share.
The first character of the data part indicates the threshold of the share, and it is required to be a non-"0" digit.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is correct. Read the line above: when the share index is not "s". The threshold parameter cannot be "0" in that case, so we know that for a codex32 share, the threshold parameter is required to be 2-9.

The first character of the data part is the threshold digit (also called ''k'' in the codex book), which encodes the threshold (the number of shares required for recovery). For shares, the threshold digit is required to be a non-"0" digit (i.e., "2" through "9"), encoding thresholds 2 through 9 respectively.

In order to recover a master seed, one needs a set of valid codex32 shares such that:

Expand Down