кодирование/декодирование sha512 и base64

Требуется реализовать то же самое, но на языке golang:

Node js:

var key = Buffer(secret, "base64");
var message = path + nonce;
var hmac = crypto.createHmac("sha512", key);
var signature = hmac.update(message).digest("base64");

Python:

key = base64.b64decode(secret)
message = str.encode(path + str(nonce), "utf-8")
hmac = hmac.new(key, message, sha512)
signature = base64.b64encode(hmac.digest()).decode()

Что делаю я:

0)в req я передаю строку нужного вида (то есть req это message, A.apiSecret это secret)

1)раскодировать ApiSecret с помощью base64

2)получаю hex шифуя req ключем из пункта 1)

3)кодирую hex в base64

То есть в итоге должен получиться код base64, построенный из

Вот мой код функции, но она кажется дает неверный ответ.

func (A *Crex24Api) signData(req string) string {
    fmt.Println(req)
    // decoded apiSecret with base64
    encoding := base64.StdEncoding
    data := []byte(A.apiSecret)
    decoded := make([]byte, encoding.DecodedLen(len(data)))
    n, err := encoding.Decode(decoded, data)
    if err != nil {
        log.Fatal(err)
    }
    decoded = decoded[:n]
    fmt.Println("decoded: ", string(decoded))

    // encod sgn with sha512
    mac := hmac.New(sha512.New, decoded)
    mac.Write([]byte(req))
    sum := mac.Sum(nil)
    hex := hex.EncodeToString(sum)
    fmt.Println("hex: ", hex)

    // encode hex with base64
    encoded := make([]byte, encoding.EncodedLen(len(hex)))
    base64.StdEncoding.Encode(encoded, []byte(hex))
    sgn := string(encoded)
    fmt.Println("sgn: ", sgn)
    A.signature = sgn
    return sgn
}

Ответы (0 шт):