Files
txoko-dashboard/tests
pikaro 0bfe6dca14 fix: dos fallos en la detección del output de cambio
Uno: la señal A y la señal E eran la misma condición escrita dos veces, así que
un solo hecho llegaba al umbral de dos señales. Un pago corriente de bech32 a
taproot salía como cambio identificable con certeza PROBABLE, y el informe
mostraba las dos señales contradiciéndose entre sí.

Dos: sin señal fuerte, el índice caía en la salida menor. Pagando poco desde
una moneda grande el cambio es la mayor, así que la app señalaba el pago. El
detalle llegaba a decir 'el output redondo es el pago' y a continuación lo
marcaba como cambio. El peritaje usa ese índice, de modo que podía presentar
la dirección del destinatario como rastro del actor.

Ahora cada señal apunta a un output o admite que no puede, y si ninguna apunta
el índice queda vacío. tests/test5.js deja los dos casos como regresión.
2026-08-08 18:42:41 +02:00
..

Pruebas de la criptografía

Verifican la derivación watch-only (BIP32, secp256k1, RIPEMD-160, bech32) contra los vectores oficiales de los estándares, no contra resultados propios. Si un cambio rompe algo, estas pruebas lo dicen.

Cómo ejecutarlas

Extraer el bloque criptográfico de dashboard.html a crypto.js (las líneas que van desde const B32 = { hasta el final de deriveAddresses), añadir al principio const { webcrypto } = require("crypto"); const crypto = webcrypto; y al final la exportación:

module.exports = { B32, SECP, deriveChildPubkey, ripemd160, hash160, toBech32, deriveAddresses };

Después:

node test1.js   # RIPEMD-160 y aritmética de curva
node test2.js   # BIP32 y bech32 contra vectores oficiales
node test3.js   # búsqueda de casos borde (diagnóstico)
node test4.js   # regresión de los fallos ya corregidos

Qué cubren

  • test1 — RIPEMD-160 con los seis vectores del estándar (incluido el de un millón de caracteres), generador de secp256k1, múltiplos conocidos, y que comprimir y descomprimir un punto sea reversible.
  • test2 — BIP32: clave pública y chain code de la raíz, y derivación no endurecida m/0, contra los vectores 1 y 2 del propio BIP32. bech32: la dirección P2WPKH del generador, en mainnet y testnet (BIP173).
  • test3 — sondeo de casos borde. Fue el que encontró los cuatro fallos de validación corregidos el 2026-07-27.
  • test4 — comprueba que esos cuatro siguen cerrados: checksum rota, xpub truncado, índice endurecido, índice negativo. Y que un tpub genera direcciones de testnet, no de mainnet.

Lo que estas pruebas NO cubren

La matemática es correcta, pero eso no es una auditoría. No cubren análisis formal ni una revisión independiente: quien las escribió conoce la implementación y comparte sus supuestos, que es justo el sesgo que rompe un revisor externo. Siguen haciendo falta ojos de fuera antes de difundir el proyecto ampliamente.

Tampoco aplican aquí los ataques de canal lateral: todo esto maneja solo claves públicas. No hay secreto que filtrar; lo único que importa es que el resultado sea correcto, y eso es lo que se comprueba.