Estoy tratando de recrear la dirección de Ripple desde la página wiki de Account Family y tengo algunos problemas.
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
, y el generador público hexadecimal de 0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828
.71ED064155FFADFA38782C5E0158CB260000000000000000
, lo que genera 9F407F7EC35B9AB44831BF0D47CDDAEF7BC11107CE1D10A65368A12B9338F82E
: este resultado es más grande que el generador, así que incremento la subsecuencia71ED064155FFADFA38782C5E0158CB260000000000000001
, lo que genera 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
- lo que es bueno.7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
a lo que acabo de generar 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
y obtengo el resultado.B2416F4D9CC7326B405CCA0AA755BE3B401BD6E7DFA5CC7F2F5AD0BC433DD113
02FA95E05F5DA5A433F7B1EE4682DAB44AF28FBC04B485993EC2E516C1D3C30D73
, pero en el ejemplo la clave pública comprimida es03fa25b68da6ff6832e4462fdfb9a2aaa58888c0ed17285ffe92e4465e0c6e782a
¿Dónde cometí un error?
Puede hacer referencia a los casos de prueba en mi implementación de Go a la que me vinculé en una respuesta a una pregunta similar .
Para el caso dado en la página wiki, los valores deben ser:
Muchos de ellos están en la codificación base58 de Ripple. Puedo proporcionar el equivalente hexadecimal si es necesario, pero probablemente sea más fácil para las personas obtener el paquete Go vinculado anteriormente y ejecutar los casos de prueba ellos mismos. Debería ser trivial para cualquier programador (ya sea que conozcan Go o no) ajustar el código de prueba para mostrarles los detalles que necesitan.
Editar: con los generadores privados/públicos que especifique (0x7CFBA64F... y 0x0388E5BA...) debería estar haciendo hash 0x0388e5ba87a000cb807240df8c848eb0b5ffa5c8e5a521bc8e105c0f0a442178280000000000000000
en 0x28f3e125edb203022c7d22c486284706058c209dbf4a98c3923705a4e5347c7a
lo que es bueno y no requiere incrementar la subsecuencia. Eso se agrega al generador privado mod N para dar como resultado una clave privada de 0xa5ef877564d096ea445e72fda77c77bb45002261087c69d57cea56b008102d52
.
sum = hash.Sum(sum[:0])
no tiene mucho sentido para mí. Aparte de eso, parece que la clave privada está configurada como anexa private generator
y idx
. subseq
Entonces, ¿la clave privada debería ser 71ED064155FFADFA38782C5E0158CB260000000000000000
?hash.Sum()
resultante para que sum=hash.Sum(sum[:0])
se usa en el bucle para que el hash sobrescriba el sum
segmento existente y evite reasignaciones.Resulta que estaba usando semilla maestra + secuencia + subsecuencia, mientras que debería haber estado usando generador público + secuencia + subsecuencia. Así que en mi ejemplo:
0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A442178280000000000000000
y la mitad de SHA512 hash, obtengo28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
(generador privado) y 28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
obtengo A5EF877564D096EA445E72FDA77C77BB45002261087C69D57CEA56B008102D52
- la clave privadarhcfR9Cg98qCxHpCcPBmMonbDBXo84wyTn
, que es exactamente lo que necesitaba generar.
dchapes