Ah oui. Y’a pas d’hélice, hélas, c’est là qu’est l’os.
11111111111111111111111pubKey49311 fait 34 caractères. Elle ne devrait pas être valide. Pourtant, sa conversion en bytes fait bien 32 bytes.
Je ne comprends pas
J’ai écrit un petit script Python pour tester toutes les clefs pub valides entre pubKey49311
et 11111111111111111111111111111111pubKey49311
(43 caractères) :
script
import hashlib
import base58
MAX_PUBKEY_LENGTH = 44
str_pubkey = "pubKey49311"
def ck_from_pk_bytes(pk_bytes):
hash = hashlib.sha256(hashlib.sha256(pk_bytes).digest()).digest()
return base58.b58encode(hash)[:3].decode("utf-8")
#script
print ("len, len_bytes_tortue, ck_tortue, len_bytes_rfc, ck_rfc_0016, pubkey")
for n in range(0, (MAX_PUBKEY_LENGTH - len(str_pubkey))):
# add ones before pubkey
pubkey = n * "1" + str_pubkey
# convert to bytes
pk_b_tortue = base58.b58decode(pubkey)
pk_b_rfc_0016 = bytearray(pk_b_tortue)
while len(pk_b_rfc_0016) < 32:
pk_b_rfc_0016 = bytearray(b"\x00") + pk_b_rfc_0016
# compute checksums
ck_tortue = ck_from_pk_bytes(pk_b_tortue)
ck_rfc_0016 = ck_from_pk_bytes(pk_b_rfc_0016)
# display result
print(str(len(pubkey)) + ":", len (pk_b_tortue), ck_tortue, len(pk_b_rfc_0016) , ck_rfc_0016, pubkey)
résultat, une clef pub de longueur 43 n’est pas valide, elle fait 41 octets. De même pour une de longueur 40, qui fait 38 octets. Le loup est-il dans mon script ? Y’a un truc que je ne comprends pas, là, sans doute sur la conversion de la réprésentation base58 vers les bytes.
len, len_bytes_tortue, ck_tortue, len_bytes_rfc, ck_rfc_0016, pubkey
11: 9 12p 32 14R pubKey49311
12: 10 Gym 32 14R 1pubKey49311
13: 11 6Rg 32 14R 11pubKey49311
14: 12 J8X 32 14R 111pubKey49311
15: 13 C7x 32 14R 1111pubKey49311
16: 14 AYi 32 14R 11111pubKey49311
17: 15 8HQ 32 14R 111111pubKey49311
18: 16 Dvz 32 14R 1111111pubKey49311
19: 17 EVs 32 14R 11111111pubKey49311
20: 18 vnd 32 14R 111111111pubKey49311
21: 19 3Bk 32 14R 1111111111pubKey49311
22: 20 Bqg 32 14R 11111111111pubKey49311
23: 21 4et 32 14R 111111111111pubKey49311
24: 22 HhR 32 14R 1111111111111pubKey49311
25: 23 JB3 32 14R 11111111111111pubKey49311
26: 24 9Zs 32 14R 111111111111111pubKey49311
27: 25 CM2 32 14R 1111111111111111pubKey49311
28: 26 FFP 32 14R 11111111111111111pubKey49311
29: 27 GB5 32 14R 111111111111111111pubKey49311
30: 28 GsF 32 14R 1111111111111111111pubKey49311
31: 29 AMh 32 14R 11111111111111111111pubKey49311
32: 30 7MZ 32 14R 111111111111111111111pubKey49311
33: 31 4Za 32 14R 1111111111111111111111pubKey49311
34: 32 14R 32 14R 11111111111111111111111pubKey49311
35: 33 865 33 865 111111111111111111111111pubKey49311
36: 34 2M4 34 2M4 1111111111111111111111111pubKey49311
37: 35 Ay9 35 Ay9 11111111111111111111111111pubKey49311
38: 36 FuA 36 FuA 111111111111111111111111111pubKey49311
39: 37 2cv 37 2cv 1111111111111111111111111111pubKey49311
40: 38 8j1 38 8j1 11111111111111111111111111111pubKey49311
41: 39 68r 39 68r 111111111111111111111111111111pubKey49311
42: 40 Eqt 40 Eqt 1111111111111111111111111111111pubKey49311
43: 41 BhW 41 BhW 11111111111111111111111111111111pubKey49311
NB : Duniter a déjà accepté la clef pub 11111111111111111111111111111111111111111111 en dépense.
$ silkaj balance 11111111111111111111111111111111111111111111
╒══════════════════════════════╤══════════════════════════════════════════════════╕
│ Balance of pubkey │ 11111111111111111111111111111111111111111111:G3N │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ Total amount (unit|relative) │ 50.75 Ğ1 | 4.92 UD Ğ1 │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ Total relative to M/N │ 0.01 x M/N │
╘══════════════════════════════╧══════════════════════════════════════════════════╛