Advertisement
tty025

BTC endereco/chave por string

Apr 18th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.09 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. ########################################################
  4. #                                                      #
  5. # Gerador determinístico de endereco BTC por string    #
  6. #                                                      #
  7. # Gera os dois enderecos (compresso e nao compresso)   #
  8. # qui 18 abr 2019 17:50 Gabriel Brito a.k.a tty025     #
  9. #                                                      #
  10. # Parte do projeto teste SLMC                          #
  11. #                                                      #
  12. ########################################################
  13. #################################
  14. #################################
  15.  
  16. if [ "$1" == "" ]; then true & exit; fi
  17. semente="$1"
  18.  
  19. #################################
  20. #################################
  21.  
  22. p() { echo -n "$1"|xxd -r -p; }; u() { local l; xxd -p|while read l; do echo -n "${l/\\/}"; done; };
  23. declare -a base58=(
  24.       1 2 3 4 5 6 7 8 9
  25.     A B C D E F G H   J K L M N   P Q R S T U V W X Y Z
  26.     a b c d e f g h i j k   m n o p q r s t u v w x y z
  27. ); unset dcr; for i in {0..57}; do dcr+="${i}s${base58[i]}"; done
  28. declare ec_dc='
  29. I16i7sb0sa[[_1*lm1-*lm%q]Std0>tlm%Lts#]s%[Smddl%x-lm/rl%xLms#]s~
  30. 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
  31. 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
  32. 2 100^d14551231950B75FC4402DA1732FC9BEBF-so1000003D1-ddspsm*+sGi
  33. [_1*l%x]s_[+l%x]s+[*l%x]s*[-l%x]s-[l%xsclmsd1su0sv0sr1st[q]SQ[lc
  34. 0=Qldlcl~xlcsdscsqlrlqlu*-ltlqlv*-lulvstsrsvsulXx]dSXxLXs#LQs#lr
  35. l%x]sI[lpSm[+q]S0d0=0lpl~xsydsxd*3*lal+x2ly*lIx*l%xdsld*2lx*l-xd
  36. lxrl-xlll*xlyl-xrlp*+Lms#L0s#]sD[lpSm[+q]S0[2;AlDxq]Sdd0=0rd0=0d
  37. 2:Alp~1:A0:Ad2:Blp~1:B0:B2;A2;B=d[0q]Sx2;A0;B1;Bl_xrlm*+=x0;A0;B
  38. l-xlIxdsi1;A1;Bl-xl*xdsld*0;Al-x0;Bl-xd0;Arl-xlll*x1;Al-xrlp*+L0
  39. s#Lds#Lxs#Lms#]sA[rs.0r[rl.lAxr]SP[q]sQ[d0!<Qd2%1=P2/l.lDxs.lLx]
  40. dSLxs#LPs#LQs#]sM[lpd1+4/r|]sR
  41. ';
  42.  
  43. #################################
  44. #################################
  45.  
  46. eB58() { local n; echo -n "$1"|sed -e's/^\(\(00\)*\).*/\1/' -e's/00/1/g'|tr -d '\n';
  47. dc -e "16i ${1^^} [3A ~r d0<x]dsxx +f"|while read -r n; do echo -n "${base58[n]}"; done; }
  48. chksum() { p "$1"|openssl dgst -sha256 -binary|openssl dgst -sha256 -binary|u|head -c 8; }
  49. h160() { openssl dgst -sha256 -binary|openssl dgst -rmd160 -binary|u; }
  50. endereco() { local x="$(printf "%2s%${3:-40}s" ${2:-00} $1|sed 's/ /0/g')";
  51. eB58 "$x$(chksum "$x")"; echo ""; }
  52. hash="$(echo -n "$semente"|sha256sum|cut -d" " -f1)";
  53. unc_wif="$(endereco "$hash" 80 64)"
  54. cmp_wif="$(endereco "${hash}01" 80 66)"
  55. dc -e "$ec_dc lG I16i${hash^^}ri lMx 16olm~ n[ ]nn"| { read y x; X="$(printf "%64s" $x| sed 's/ /0/g')";
  56. Y="$(printf "%64s" $y| sed 's/ /0/g')"; if [[ "$y" =~ [02468ACE]$ ]]; then y_parity="02"; else y_parity="03"; fi
  57. unc_end="$(endereco "$(p "04$X$Y"|h160)")"; cmp_end="$(endereco "$(p "$y_parity$X"|h160)")"
  58.  
  59. #################################
  60. #################################
  61.  
  62. #echo "$1"
  63. #echo "$hash"
  64. #echo "[Chave publica X,Y]"
  65. #echo "$X"
  66. #echo "$Y"
  67. echo "$cmp_end;$cmp_wif"
  68. echo "$unc_end;$unc_wif"
  69. }
  70.  
  71. #################################
  72. #################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement