Jump to content

Recommended Posts

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:

#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 by marko001
Updated code
Link to post
Share on other sites
Link to post
Share on other sites

Dont share then :-S It was just a question... I gonna check maybe I find the Issue.

 

Regards

Link to post
Share on other sites
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 post
Share on other sites
  • 1 year later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...