Voltando ao subject do tópico, já nem sei porque coloquei "python" quando estou a usar C e a GMP library!
Por falar nisto, ontem consegui "descobrir" um bug que tinha no código e agora acho que consigo avançar mais um pouco. No entanto, é algo que deve ter explicação e não um bug propriamente dito. Eu é que não sei explicar! Mas logo vou fazer mais uns testes a ver se chego a alguma conclusão!
Isso normalmente acontece, quando seguimos um caminho que depois descobrimos que não era preciso seguir. As vezes isso deixa portas abertas para outras situações.
Mas, depois partilha a conclusão. A investigação também faz parte da aprendizagem.
Estou desvastado! Duplamente! lol... Hoje, foram precisos olhos alheios para descobrir o que estava de errado no meu código até agora.
Resumindo, eu tinha 4 funções para implementar:
mod_inv() (que eu pensava que já estava implementada na GMP library por defeito, só que não!!!),
add(),
double() e
multiply() (que é uma junção da
add() e da
double()).
Primeiro tive um problema com a mod_inv() e percebi que a que vem por defeito na GMP library, não fazia exactamente o que era necessário, portanto, pedi ajuda a um amigo para construírmos uma. Depois disso, para alguns casos, continuei a ter resultados errados com a função
multiply(). Andei vários dias sem conseguir perceber porquê.
Ontem ao fazer alguns testes, reparei que estava a cometer um erro ao assumir que tinha convertido correctamente o seguinte valor em decimal para hexadecimal:
2 ** 256 - 2 ** 32 - 2 ** 9 - 2 ** 8 - 2 ** 7 - 2 ** 6 - 2 ** 4 - 1
=
115792089237316195423570985008687907853269984665640564039457584007908834671663
=
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
Não sei como, copiei aquele número em hexadecimal mal para o código:
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f
e por isso estava a obter valores errados. Depois de descobrir isto e de resolver, agora venho a perceber que esta library não tem condições suficientemente "boas" para gerar números aleatórios suficientemente bons para private keys de Bitcoin.
Nem sei o que faça... Se continue mesmo só por gozo mas sem perspectivas de alguma vez poder usar o código para gerar uma PK e respectiva address com ele, ou se simplesmente abandone este pequeno projecto e pense noutra coisita para fazer!