mirror of
https://github.com/luxfi/go-bip32.git
synced 2026-07-27 01:14:41 +00:00
remove FactomProject dependencies
Replace FactomProject/basen and FactomProject/btcutilecc with: - Custom base58 encoding/decoding implementation - github.com/decred/dcrd/dcrec/secp256k1/v4 for curve operations Eliminates ancient, unmaintained dependencies from binary.
This commit is contained in:
@@ -1,21 +1,15 @@
|
||||
module github.com/luxfi/go-bip32
|
||||
|
||||
go 1.25.5
|
||||
go 1.23.5
|
||||
|
||||
require (
|
||||
github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e
|
||||
github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0
|
||||
github.com/stretchr/testify v1.10.0
|
||||
golang.org/x/crypto v0.40.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect
|
||||
)
|
||||
|
||||
replace launchpad.net/gocheck => gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc=
|
||||
github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw=
|
||||
github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc=
|
||||
github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U=
|
||||
github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw=
|
||||
github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
@@ -19,7 +10,5 @@ golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
|
||||
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
|
||||
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -8,17 +8,16 @@ import (
|
||||
"io"
|
||||
"math/big"
|
||||
|
||||
"github.com/FactomProject/basen"
|
||||
"github.com/FactomProject/btcutilecc"
|
||||
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||
"golang.org/x/crypto/ripemd160"
|
||||
)
|
||||
|
||||
var (
|
||||
curve = btcutil.Secp256k1()
|
||||
curve = secp256k1.S256()
|
||||
curveParams = curve.Params()
|
||||
|
||||
// BitcoinBase58Encoding is the encoding used for bitcoin addresses
|
||||
BitcoinBase58Encoding = basen.NewEncoding("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")
|
||||
// Base58 alphabet used for Bitcoin addresses
|
||||
base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
|
||||
)
|
||||
|
||||
//
|
||||
@@ -70,6 +69,87 @@ func hash160(data []byte) ([]byte, error) {
|
||||
return hash2, nil
|
||||
}
|
||||
|
||||
//
|
||||
// Base58 Encoding (Bitcoin style)
|
||||
//
|
||||
|
||||
func base58Encode(data []byte) string {
|
||||
// Count leading zeros
|
||||
var zeros int
|
||||
for _, b := range data {
|
||||
if b == 0 {
|
||||
zeros++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Convert to big integer
|
||||
num := new(big.Int).SetBytes(data)
|
||||
base := big.NewInt(58)
|
||||
zero := big.NewInt(0)
|
||||
mod := new(big.Int)
|
||||
|
||||
var result []byte
|
||||
for num.Cmp(zero) > 0 {
|
||||
num.DivMod(num, base, mod)
|
||||
result = append(result, base58Alphabet[mod.Int64()])
|
||||
}
|
||||
|
||||
// Add leading '1's for each leading zero byte
|
||||
for i := 0; i < zeros; i++ {
|
||||
result = append(result, '1')
|
||||
}
|
||||
|
||||
// Reverse the result
|
||||
for i, j := 0, len(result)-1; i < j; i, j = i+1, j-1 {
|
||||
result[i], result[j] = result[j], result[i]
|
||||
}
|
||||
|
||||
return string(result)
|
||||
}
|
||||
|
||||
func base58Decode(data string) ([]byte, error) {
|
||||
// Count leading '1's (zeros in output)
|
||||
var zeros int
|
||||
for _, c := range data {
|
||||
if c == '1' {
|
||||
zeros++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Build alphabet index map
|
||||
alphabetMap := make(map[rune]int64)
|
||||
for i, c := range base58Alphabet {
|
||||
alphabetMap[c] = int64(i)
|
||||
}
|
||||
|
||||
// Convert from base58
|
||||
num := big.NewInt(0)
|
||||
base := big.NewInt(58)
|
||||
for _, c := range data {
|
||||
idx, ok := alphabetMap[c]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid base58 character: %c", c)
|
||||
}
|
||||
num.Mul(num, base)
|
||||
num.Add(num, big.NewInt(idx))
|
||||
}
|
||||
|
||||
// Convert to bytes
|
||||
result := num.Bytes()
|
||||
|
||||
// Add leading zeros
|
||||
if zeros > 0 {
|
||||
prefix := make([]byte, zeros)
|
||||
result = append(prefix, result...)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
//
|
||||
// Encoding
|
||||
//
|
||||
@@ -91,23 +171,17 @@ func addChecksumToBytes(data []byte) ([]byte, error) {
|
||||
return append(data, checksum...), nil
|
||||
}
|
||||
|
||||
func base58Encode(data []byte) string {
|
||||
return BitcoinBase58Encoding.EncodeToString(data)
|
||||
}
|
||||
|
||||
func base58Decode(data string) ([]byte, error) {
|
||||
return BitcoinBase58Encoding.DecodeString(data)
|
||||
}
|
||||
|
||||
// Keys
|
||||
func publicKeyForPrivateKey(key []byte) []byte {
|
||||
return compressPublicKey(curve.ScalarBaseMult(key))
|
||||
x, y := curve.ScalarBaseMult(key)
|
||||
return compressPublicKey(x, y)
|
||||
}
|
||||
|
||||
func addPublicKeys(key1 []byte, key2 []byte) []byte {
|
||||
x1, y1 := expandPublicKey(key1)
|
||||
x2, y2 := expandPublicKey(key2)
|
||||
return compressPublicKey(curve.Add(x1, y1, x2, y2))
|
||||
x, y := curve.Add(x1, y1, x2, y2)
|
||||
return compressPublicKey(x, y)
|
||||
}
|
||||
|
||||
func addPrivateKeys(key1 []byte, key2 []byte) []byte {
|
||||
|
||||
Reference in New Issue
Block a user