marko001 Posted May 2, 2018 Share Posted May 2, 2018 (edited) Hi all guys, following hints found here I tried to manage the private methods to Kraken.com. Unfortunately I couldn't go over signature check, and I get the following: Balance: {"error":["EAPI:Invalid signature"]} This is the code: expandcollapse popup#include <Crypt.au3> #include <Base64.au3> #include <SHA224_256.au3> Global Const $CALG_SHA_512 = 0x0000800e #Region Kraken Const Global $g_sKrakenURL = "https://api.kraken.com" Global $g_sKrakenAPIVersion = "0" #EndRegion Kraken Const #Region keys Global Const $g_sAPIKey = "" Global Const $g_sAPISecret = "" #EndRegion keys #Region API Test _TestAPI() Func _TestAPI() $sResult = KrakenQueryPrivate("Balance") ;Get Balance ConsoleWrite("Balance: " & $sResult & @CRLF & @CRLF) EndFunc ;==>_TestAPI #EndRegion API Test #Region Kraken Query Func KrakenQueryPrivate($sMethod, $sParameters = "") Local $sNONCE = _GetNonce() $sParameters = "nonce=" & $sNONCE & $sParameters Local $sURL = StringFormat("/%s/private/%s", $g_sKrakenAPIVersion, $sMethod) Local $sSecretDecoded = _Base641Decode($g_sAPISecret) Local $sNonceParams = $sNONCE & $sParameters Local $bURLBytes = Binary($sURL) Local $sHashNonceParams = _SHA256($sNonceParams) Local $bMessage = $bURLBytes & $sHashNonceParams ;~ Local $sSignature = HMACSHA512($sSecretDecoded, $bMessage) Local $sSignature = HMACSHA512($bMessage, $sSecretDecoded) Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("POST", $g_sKrakenURL & $sURL, False) $oHTTP.SetRequestHeader("API-Key", $g_sAPIKey) $oHTTP.SetRequestHeader("API-Sign", _Base64EncodeMod($sSignature)) $oHTTP.Send(Binary($sParameters)) Local $sReceived = $oHTTP.ResponseText Return $sReceived EndFunc ;==>KrakenQueryPrivate #EndRegion Kraken Query Func _GetNonce() ;~ Return @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC Return 9 & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC ;added 9 at start due while testing I added a big nonce number > (@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC). With another APIkey Use line above (and comment this) EndFunc ;==>_GetNonce Func _Base64EncodeMod($sData) Return StringReplace(_Base641Encode($sData), @LF, "") EndFunc ;==>_Base64EncodeMod Func HMACSHA512($bKey, $bMessage) Local Const $iBlockSize = (512 / 8) Local Const $oconst = 0x5C, $iconst = 0x36 Local $a_opad[$iBlockSize], $a_ipad[$iBlockSize] Local $opad = Binary(''), $ipad = Binary('') If BinaryLen($bKey) > $iBlockSize Then $bKey = _Crypt_HashData($bKey, $CALG_SHA_512) For $i = 1 To BinaryLen($bKey) $a_ipad[$i - 1] = Number(BinaryMid($bKey, $i, 1)) $a_opad[$i - 1] = Number(BinaryMid($bKey, $i, 1)) Next For $i = 0 To $iBlockSize - 1 $a_opad[$i] = BitXOR($a_opad[$i], $oconst) $a_ipad[$i] = BitXOR($a_ipad[$i], $iconst) Next For $i = 0 To $iBlockSize - 1 $ipad &= Binary('0x' & Hex($a_ipad[$i], 2)) $opad &= Binary('0x' & Hex($a_opad[$i], 2)) Next Local $bRet = _Crypt_HashData($ipad & ($bMessage), $CALG_SHA_512) $bRet = _Crypt_HashData($opad & $bRet, $CALG_SHA_512) Return $bRet EndFunc ;==>HMACSHA512 I saw @Danyfirex solution but it seems it doesn't work, I removed now OTP and I created a test key. Thanks everyone, Marco Edited May 2, 2018 by marko001 Updated code Link to comment Share on other sites More sharing options...
Danyfirex Posted May 2, 2018 Share Posted May 2, 2018 Hello. Are you adding your API Secrect and Key? Saludos Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
marko001 Posted May 2, 2018 Author Share Posted May 2, 2018 Hi Dany, yes I added to the code my keys, you can see in the code. Link to comment Share on other sites More sharing options...
Danyfirex Posted May 2, 2018 Share Posted May 2, 2018 Dont share then :-S It was just a question... I gonna check maybe I find the Issue. Regards Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
marko001 Posted May 2, 2018 Author Share Posted May 2, 2018 Just now, Danyfirex said: Dont share then :-S It was just a question... I gonna check maybe I find the Issue. Regards These key can do almost nothing and once it's fixed I will close them. Thanks a lot, bro. Marco Link to comment Share on other sites More sharing options...
Danyfirex Posted May 2, 2018 Share Posted May 2, 2018 I'll try to check what's the issue. Saludos marko001 1 Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
DD44 Posted October 21, 2019 Share Posted October 21, 2019 Hi, I'm trying the same code to connect to the api of kraken, but I'm experiencing the same problems as above. Was this problem solved and if yes, are you willing to share the solution? Best regards, Dave Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now