Graças a meuh eu descobri a questão. Como posso imaginar outras pessoas sendo tão tolas quanto eu, responderei a minha própria pergunta:
O problema é que estou usando strings ao invés de bytes. Eu não tenho tempo para descobrir a linha de comando e cURL (talvez alguém queira fazer isso e eu aceito essa resposta).
Para o cliente em que estava trabalhando, em vez de concatenar /0/private/Balance
e a string hexadecimal SHA256 353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
, deveria concatenar os bytes para "/ 0 / private / Balance" ( 47 48 47 112 114 105 118 97 116 101 47 66 97 108 97 110 99 101
) e SHA256 ("123nonce = 123 ") ( 53 63 157 249 42 177 213 229 175 224 107 183 209 187 66 168 239 102 84 182 51 217 72 24 0 122 234 251 175 3 202 61
) (mostrado como valores decimais desta vez).
O mesmo para o SHA512 HMAC.
Editar:
Como alguém perguntou no Twitter, estas são as etapas reais para fazer isso na linha de comando:
-
echo -n "/0/private/Balance" > tmp.bin
-
echo -n "123nonce=123" | openssl sha256 -binary >> tmp.bin
-
cat tmp.bin | openssl sha512 -binary -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d) | base64
("wqtzZWNyZXTCuw ==" é "segredo" "BASE64 codificado, isso deve ser, sem dúvida, o seu segredo ) -
curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: «output-from-step-3»" -d "nonce=123" https://api.kraken.com/0/private/Balance
Como você pode ver acima, a única coisa que foi esquecida na pergunta original era usar a opção -binary
.
Observação: sua chave e segredo da API terminarão na linha de comando (visível com ps aux
) e no histórico do shell!