When a user switches clients or machines, they typically transfer keys via ink media. For interoperability, clients should display keys (the seeds for the private keys) in the following manner.

The reference code is, of course, more precise.

Raw seeds are always 112 bits. To encode, clients xor all the bytes together and append that byte to the end, then use the following base 32 encoding -

2 - 000003 - 000014 - 000105 - 00011
6 - 001007 - 001018 - 001109 - 00111
A - 01000B - 01001C - 01010D - 01011
E - 01100F - 01101G - 01110H - 01111
I - 10000J - 10001K - 10010M - 10011
N - 10100P - 10101Q - 10110R - 10111
S - 11000T - 11001U - 11010V - 11011
W - 11100X - 11101Y - 11110Z - 11111

This encoding avoids the easily confused 0, O, 1 and L characters, and sorts in the same order as the binary version.

Keys are always displayed all caps, grouped into six groups of four letters, like this: EXU8 IG3T 8TV9 4FV5 GBSQ NUSX.

When keys are entered, upper and lower case are treated the same. Whitespace is stripped before using.

If the key entered is the wrong length or the checksum (it's last byte) doesn't match, it's rejected. This is to detect typos and discourage users from using keys they make up themselves rather than are auto-generated.

Back to index