mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 15:09:42 +00:00
* codebase: Rid base64/hex to string common funcs * codebase: Rid local scope variable usage and other improvements * codebase: Refactor currency pair usage across multiple exchanges - Updated HitBTC tests to use the new currency pair format. - Modified Kraken futures types to use currency.Pair instead of string for Symbol. - Adjusted Kraken wrapper methods to handle currency pairs correctly. - Refined OKX tests and types to utilize currency.Pair for instrument IDs. - Enhanced Poloniex tests to consistently use predefined currency pairs. - Streamlined order and orderbook tests to replace string pairs with currency.NewBTCUSD(). - Improved Yobit tests to utilize a standardized currency pair format. - Updated validator wrapper to use currency pairs directly instead of string conversions. * codebase: Use types.Number where possible * refactor: update PayoutFee type to types.Number for consistency * Refactor: Remove crypto functions to use standard library and other minor changes - Removed custom crypto functions for SHA256, SHA512, and MD5 from the common/crypto package. - Replaced usages of removed functions with standard library implementations in various files including: - cmd/websocket_client/main.go - engine/apiserver.go - exchanges/kraken/kraken.go - exchanges/lbank/lbank.go - exchanges/okx/okx_business_websocket.go - exchanges/kucoin/kucoin_websocket.go - gctscript/vm/vm.go - Updated tests to reflect changes in the crypto functions. - Renamed several functions for clarity, particularly in the context of order book updates across multiple exchanges. * refactor: replace assert with require for consistency in test assertions * refactor: Improve Binance futures candlestick test, standardise orderbook update function names and improve test parallelism * refactor: Replace require.Len with require.Equal for better output in TestGetFuturesKlineData
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package crypto
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/md5" //nolint:gosec // Used for exchanges
|
|
"crypto/rand"
|
|
"crypto/sha1" //nolint:gosec // Used for exchanges
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
"errors"
|
|
"hash"
|
|
"io"
|
|
)
|
|
|
|
// Const declarations for common.go operations
|
|
const (
|
|
HashSHA1 = iota
|
|
HashSHA256
|
|
HashSHA512
|
|
HashSHA512_384
|
|
HashMD5
|
|
)
|
|
|
|
// GetRandomSalt returns a random salt
|
|
func GetRandomSalt(input []byte, saltLen int) ([]byte, error) {
|
|
if saltLen <= 0 {
|
|
return nil, errors.New("salt length is too small")
|
|
}
|
|
salt := make([]byte, saltLen)
|
|
if _, err := io.ReadFull(rand.Reader, salt); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var result []byte
|
|
if input != nil {
|
|
result = input
|
|
}
|
|
result = append(result, salt...)
|
|
return result, nil
|
|
}
|
|
|
|
// GetHMAC returns a keyed-hash message authentication code using the desired
|
|
// hashtype
|
|
func GetHMAC(hashType int, input, key []byte) ([]byte, error) {
|
|
var hasher func() hash.Hash
|
|
|
|
switch hashType {
|
|
case HashSHA1:
|
|
hasher = sha1.New
|
|
case HashSHA256:
|
|
hasher = sha256.New
|
|
case HashSHA512:
|
|
hasher = sha512.New
|
|
case HashSHA512_384:
|
|
hasher = sha512.New384
|
|
case HashMD5:
|
|
hasher = md5.New
|
|
}
|
|
|
|
h := hmac.New(hasher, key)
|
|
_, err := h.Write(input)
|
|
return h.Sum(nil), err
|
|
}
|