Hay un json para pruebas unitarias de caracteres japoneses que quiero validar usando Python, específicamente con esta bifurcación de pybitcointools , que tiene la funcionalidad bip39.
Las pruebas unitarias de los vectores de prueba python-mnemonic de Trezor funcionan bien (en Python 2.7 IME), sin embargo, esto es sencillo ya que no hay normalización de la dialéctica Unicode y demás, ya que todos los mnemotécnicos están en minúsculas en inglés.
Los campos japoneses son:
xprv
Entonces entropy
semillas mnemonic (bip39?)
, entonces mnemonic
| password
hash a Seed
; Seed
luego actúa como la llave maestra para el bip32 xprv? (¿¡Corrígeme si estoy equivocado!?)
Entonces, suponiendo que sea tan sencillo...
Entonces, la entropía genera mnemónico (¿bip39?), luego mnemónico | hashes de contraseña para Seed; Seed entonces actúa como la llave maestra para el bip32 xprv? (¿¡Corrígeme si estoy equivocado!?)
Eso suena bien. La mayor parte del proceso está bien detallado en BIP-39 .
entropy_len_in_bits / 32
bits de este hash se agregan al final de la entropía. La cadena de bits de entropía resultante es divisible en fragmentos de 11 bits (ya no es un número entero de bytes).'\u3000'
. Si no hay necesidad de mostrar el mnemotécnico al usuario, pueden ser ESPACIOS "normales" ( '\u0020'
).¿Es solo la normalización NKFD Unicode, que hace Electrum 2.0?
Electrum 2.x usa la normalización NFKD, pero también realiza pasos adicionales, como eliminar espacios entre palabras japonesas después del paso 4. También usa una cadena de clave diferente en el paso 6 y un proceso completamente diferente antes del paso 4. Ver esto respuesta para una implementación del procedimiento mnemónico-palabras-a-semilla de Electrum 2.x en Python.
mago de ozzie
mago de ozzie
Christopher Gurnee
Christopher Gurnee
mago de ozzie
norm = lambda d: (' '.join(unicodedata.('NFKD', unicode(d)).split('\u3000'))).encode('utf-8')
Christopher Gurnee
d
es una oración mnemotécnica de cadena de tipo Python2 o un unicode? Pensaría algo como esto para la mayoría de los idiomas (diferente para el chino, que podría no tener espaciosd
):norm = lambda d: (u' '.join(unicodedata.normalize('NFKD', unicode(d)).split())).encode('utf-8')
(agregué el "normalizar" que faltaba y cambié dividir para dividir en todos los espacios en blanco). Tenga en cuenta que si está aceptando la entrada de un usuario, BIP-39 requiere que verifique la suma de verificación.mago de ozzie
mago de ozzie
bip39_hex_to_mn
conVECTOR['mnemonic']
, ya que la función devuelve un espacio estándar (es decir\u0020
), mientras que los vectores de prueba usan\u3000
. Electrum (2.x) resuelve el problema del espacio ideográfico (\u3000
) concatenando todas las palabras CJK sin espacios. Consulte github.com/simcity4242/pybitcointools/blob/master/… (Solo tengo que trabajar conu' '.join(v['mnemonic'].split())
, mientras que debería serv['mnemonic']
mago de ozzie
'\xe7\x9a\x84'
?Christopher Gurnee
Christopher Gurnee
with io.open(language+'.txt', encoding='utf_8_sig') as words_file: words[language] = tuple(word.strip() for word in words_file)
.mago de ozzie
%store var >> file.py
. Actualizaré ambas recomendaciones, ¡gracias!