¿Cómo calcula Electrum el byte semilla justo antes de BIP-32?

Como novato en Bitcoin y programándolo, estoy tratando de generar direcciones BTC a partir de mnemotécnicos. Así que leí sobre los BIP y encontré códigos en Github que los implementan.

¡Descubrí que Electrum no implementa BIP-39 (por defecto si no me he equivocado), porque Electrum acepta mnemónicos que no son válidos en BIP-39!

Entonces mi pregunta es: ¿ Cómo hace Electrum su propia sección "De mnemónico a semilla" (al menos para la billetera estándar)? Este "byte semilla" es el que se utilizará en BIP-32 para generar claves, si no me he equivocado.

Probé el siguiente psuedocódigo de Python (de "Electrum Seed Version System"):

hmac = hmac.digest(b"Seed version", b"...(12 word mnemonic)...", hashlib.sha512)
bip32_thing = Bip32(secret = hmac[:32], chain = hmac[32:]) # default: Bip32 main net version (idk what this means)

Pero mi clave pública maestra generada y la de Electrum no coinciden (lo más probable es que no haya entendido bien el "Sistema de versión de semillas"). ¡Gracias por responder!

En caso de que ayude: estoy usando bip-utilsen Python.

Respuestas (1)

Después de muchas horas, lo encontré! ¡ Es exactamente lo que Mnemonic.mnemonic_to_seed()hace en mnemonic.py! ( enlace )

La parte más relevante es lo que devuelve:

seed_byte = hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'), b'electrum' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS)

donde PBKDF2_ROUNDS = 2048_ Entonces, acabo de hacer...

bip32_node = Bip32.FromSeed(seed_byte)   # Derivation path: "m/"