From c2b8c502df07dc083fe34e13a98359d737a50819 Mon Sep 17 00:00:00 2001 From: y-omicron Date: Wed, 10 Aug 2022 16:04:20 +0800 Subject: [PATCH] fix bug --- Crypto/Aes.go | 118 ++++++++++++++++++++++++++ Crypto/Ecc.go | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++ Util/func.go | 16 ++++ go.mod | 12 +-- go.sum | 30 +++++-- 5 files changed, 392 insertions(+), 13 deletions(-) create mode 100644 Crypto/Aes.go create mode 100644 Crypto/Ecc.go diff --git a/Crypto/Aes.go b/Crypto/Aes.go new file mode 100644 index 0000000..5960955 --- /dev/null +++ b/Crypto/Aes.go @@ -0,0 +1,118 @@ +package Crypto + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "encoding/base64" + "fmt" + "os" +) + +type Aes struct { + Key []byte + Iv []byte +} + +func (a *Aes) AESGetKey() { + keyIv := make([]byte, 0x20) + _, _ = rand.Read(keyIv) + a.Key = keyIv[:0x10] + a.Iv = keyIv[0x10:] +} +func (a *Aes) String() string { + return base64.StdEncoding.EncodeToString(a.Bytes()) +} +func (a *Aes) Bytes() []byte { + return append(a.Key, a.Iv...) +} + +// Padding 对明文进行填充 +func Padding(plainText []byte, blockSize int) []byte { + //计算要填充的长度 + n := blockSize - len(plainText)%blockSize + //对原来的明文填充n个n + temp := bytes.Repeat([]byte{byte(n)}, n) + plainText = append(plainText, temp...) + return plainText +} + +// UnPadding 对密文删除填充 +func UnPadding(cipherText []byte) []byte { + //取出密文最后一个字节end + end := cipherText[len(cipherText)-1] + //删除填充 + cipherText = cipherText[:len(cipherText)-int(end)] + return cipherText +} + +// AesCbcEncrypt AEC加密(CBC模式) +func (a *Aes) AesCbcEncrypt(plainText []byte) ([]byte, error) { + //指定加密算法,返回一个AES算法的Block接口对象 + block, err := aes.NewCipher(a.Key) + if err != nil { + return nil, err + } + //进行填充 + plainText = Padding(plainText, block.BlockSize()) + //指定分组模式,返回一个BlockMode接口对象 + blockMode := cipher.NewCBCEncrypter(block, a.Iv) + //加密连续数据库 + cipherText := make([]byte, len(plainText)) + blockMode.CryptBlocks(cipherText, plainText) + //返回密文 + return cipherText, nil +} + +// AesCbcDecrypt AEC解密(CBC模式) +func (a *Aes) AesCbcDecrypt(cipherText []byte) ([]byte, error) { + //指定解密算法,返回一个AES算法的Block接口对象 + block, err := aes.NewCipher(a.Key) + if err != nil { + return nil, err + } + //指定分组模式,返回一个BlockMode接口对象 + blockMode := cipher.NewCBCDecrypter(block, a.Iv) + //解密 + plainText := make([]byte, len(cipherText)) + blockMode.CryptBlocks(plainText, cipherText) + //删除填充 + plainText = UnPadding(plainText) + return plainText, nil +} + +func (a *Aes) DecryptToFile(cipherText []byte, FilePath string) (int, error) { + // 解密数据 + plainText, err := a.AesCbcDecrypt(cipherText) + if err != nil { + return 0, err + } + // 写入文件 + return len(plainText), os.WriteFile(FilePath, plainText, 0644) +} + +func (a *Aes) EncryptToBase64(plainText []byte) (string, error) { + cbcEncrypt, err := a.AesCbcEncrypt(plainText) + if err != nil { + return "", err + } + return base64.StdEncoding.EncodeToString(cbcEncrypt), nil +} + +func TestAes() { + var SelfAes = Aes{} + var Plain = []byte("hello world!") + var Cipher []byte + var err error + SelfAes.AESGetKey() + Cipher, err = SelfAes.AesCbcEncrypt(Plain) + if err != nil { + panic(err) + } + Plain, err = SelfAes.AesCbcDecrypt(Cipher) + if err != nil { + panic(err) + } + fmt.Printf("Cipher: %v\nPlain: %s\n", Cipher, Plain) +} diff --git a/Crypto/Ecc.go b/Crypto/Ecc.go new file mode 100644 index 0000000..413bbf5 --- /dev/null +++ b/Crypto/Ecc.go @@ -0,0 +1,229 @@ +package Crypto + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "encoding/hex" + "errors" + "fmt" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/ecies" + "io" + "io/ioutil" + "math/big" + "os" +) + +type Ecc struct { + EcdsaPrivateKey *ecdsa.PrivateKey + EcdsaPublicKey *ecdsa.PublicKey + EciesPrivateKey *ecies.PrivateKey + EciesPublicKey *ecies.PublicKey +} + +// EccGetKey 生成一个ecc(ecdsa)私钥, 并且将其转换为ecc(ecies)私钥 +func (e *Ecc) EccGetKey() error { + // 初始化椭圆曲线 + PublicCurve := crypto.S256() + + // 随机挑选基点,生成私钥 + p, err := ecdsa.GenerateKey(PublicCurve, rand.Reader) + if err != nil { + return err + } + e.EcdsaPrivateKey = p + + e.EcdsaPublicKey = &e.EcdsaPrivateKey.PublicKey + // 将标准包生成私钥转化为ecies私钥 + e.EciesPrivateKey = ecies.ImportECDSA(p) + e.EciesPublicKey = &e.EciesPrivateKey.PublicKey + return nil +} + +// ECCEncrypt ecc(ecies)加密 +func (e *Ecc) ECCEncrypt(pt []byte) ([]byte, error) { + ct, err := ecies.Encrypt(rand.Reader, e.EciesPublicKey, pt, nil, nil) + return ct, err +} + +// ECCDecrypt ecc(ecies)解密 +func (e *Ecc) ECCDecrypt(ct []byte) ([]byte, error) { + pt, err := e.EciesPrivateKey.Decrypt(ct, nil, nil) + return pt, err +} + +func (e *Ecc) EccSign(pt []byte) (sign []byte, err error) { + // 根据明文plaintext和私钥,生成两个big.Ing + r, s, err := ecdsa.Sign(rand.Reader, e.EcdsaPrivateKey, pt) + if err != nil { + return nil, err + } + rs, err := r.MarshalText() + if err != nil { + return nil, err + } + ss, err := s.MarshalText() + if err != nil { + return nil, err + } + // 将r,s合并(以“+”分割),作为签名返回 + var b bytes.Buffer + b.Write(rs) + b.Write([]byte(`+`)) + b.Write(ss) + return b.Bytes(), nil +} +func (e *Ecc) EccSignVer(pt, sign []byte) bool { + var rInt, sInt big.Int + // 根据sign,解析出r,s + rs := bytes.Split(sign, []byte("+")) + rInt.UnmarshalText(rs[0]) + sInt.UnmarshalText(rs[1]) + // 根据公钥,明文,r,s验证签名 + v := ecdsa.Verify(e.EcdsaPublicKey, pt, &rInt, &sInt) + return v +} + +// GetEcdsaPrivateKey 私钥 -> []byte +func (e *Ecc) GetEcdsaPrivateKey() []byte { + if e.EcdsaPrivateKey == nil { + return nil + } + privy := e.EcdsaPrivateKey + return math.PaddedBigBytes(privy.D, privy.Params().BitSize/8) +} + +// SetEcdsaPrivateKey []byte -> 私钥 +func (e *Ecc) SetEcdsaPrivateKey(d []byte) (err error) { + e.EcdsaPrivateKey, err = crypto.ToECDSA(d) + e.EcdsaPublicKey = &e.EcdsaPrivateKey.PublicKey + e.EciesPrivateKey = ecies.ImportECDSA(e.EcdsaPrivateKey) + e.EciesPublicKey = &e.EciesPrivateKey.PublicKey + return err +} + +// GetEcdsaPublicKey 公钥 -> []byte +func (e *Ecc) GetEcdsaPublicKey() []byte { + pub := &e.EcdsaPrivateKey.PublicKey + if pub == nil || pub.X == nil || pub.Y == nil { + return nil + } + return elliptic.Marshal(crypto.S256(), pub.X, pub.Y) +} + +// SetEcdsaPublicKey []byte -> 公钥 +func (e *Ecc) SetEcdsaPublicKey(pub []byte) error { + if len(pub) == 0 { + return errors.New("pub len is 0") + } + x, y := elliptic.Unmarshal(crypto.S256(), pub) + e.EcdsaPublicKey = &ecdsa.PublicKey{Curve: crypto.S256(), X: x, Y: y} + e.EciesPublicKey = ecies.ImportECDSAPublic(e.EcdsaPublicKey) + return nil +} + +func exKey(prv string) *ecies.PrivateKey { + key, err := crypto.HexToECDSA(prv) + if err != nil { + panic(err) + } + return ecies.ImportECDSA(key) +} + +// SaveECDSA 私钥 -> 文件 +// SaveECDSA saves a secp256k1 private key to the given file with +// restrictive permissions. The key data is saved hex-encoded. +func (e *Ecc) SaveECDSA(file string) error { + k := hex.EncodeToString(e.GetEcdsaPrivateKey()) + return ioutil.WriteFile(file, []byte(k), 0600) +} + +// LoadECDSA 文件 -> 私钥 +func (e *Ecc) LoadECDSA(file string) error { + buf := make([]byte, 64) + fd, err := os.Open(file) + if err != nil { + return err + } + defer fd.Close() + if _, err := io.ReadFull(fd, buf); err != nil { + return err + } + + key, err := hex.DecodeString(string(buf)) + if err != nil { + return err + } + + return e.SetEcdsaPrivateKey(key) +} +func TestEcc() { + var err error + var SelfEcc = Ecc{} + var YouEcc = Ecc{} + var SignPlain = []byte("yemu") + var SignCipher []byte + var BytesEcdsaPublicKey []byte + var Plain = []byte("hello world!") + var Cipher []byte + + // 生成一对 ECC S256 的 key + err = SelfEcc.EccGetKey() + if err != nil { + panic(err) + } + // 导出公钥,并且设置到另一个结构体上 + BytesEcdsaPublicKey = SelfEcc.GetEcdsaPublicKey() + fmt.Printf("BytesEcdsaPublicKey: %v\n", BytesEcdsaPublicKey) + err = YouEcc.SetEcdsaPublicKey(BytesEcdsaPublicKey) + if err != nil { + panic(err) + } + // 签名和验签 + SignCipher, err = SelfEcc.EccSign(SignPlain) + if err != nil { + panic(err) + } + fmt.Printf("sign: %v\n", YouEcc.EccSignVer(SignPlain, SignCipher)) + // 加密与解密 + Cipher, err = YouEcc.ECCEncrypt(Plain) + if err != nil { + panic(err) + } + Plain, err = SelfEcc.ECCDecrypt(Cipher) + fmt.Printf("%s\n", Plain) + // 私钥保存 + err = SelfEcc.SaveECDSA("ecc.key") + if err != nil { + panic(err) + } + // 私钥读取 + var NewEcc = Ecc{} + err = NewEcc.LoadECDSA("ecc.key") + // 公钥设置 + var New2Ecc = Ecc{} + err = New2Ecc.SetEcdsaPublicKey([]uint8{4, 136, 76, 169, 50, 219, 86, 251, 42, 210, 193, 174, 161, 229, 226, 177, 94, 177, 86, 1, 224, 132, 80, 145, 168, 124, 130, 66, 176, 5, 140, 186, 73, 19, 226, 205, 234, 10, 44, 65, 8, 108, 205, 64, 2, 157, 63, 5, 79, 184, 110, 225, 197, 187, 78, 255, 27, 83, 169, 209, 3, 146, 211, 130, 230}) + if err != nil { + panic(err) + } + // 新的加解密 + Cipher, err = New2Ecc.ECCEncrypt(Plain) + if err != nil { + panic(err) + } + Plain, err = NewEcc.ECCDecrypt(Cipher) + if err != nil { + panic(err) + } + fmt.Printf("%s\n", Plain) + // 新的签名验签 + SignCipher, err = NewEcc.EccSign(SignPlain) + if err != nil { + panic(err) + } + fmt.Printf("sign: %v\n", New2Ecc.EccSignVer(SignPlain, SignCipher)) + +} diff --git a/Util/func.go b/Util/func.go index 46b888e..190409c 100644 --- a/Util/func.go +++ b/Util/func.go @@ -8,6 +8,7 @@ import ( "io/ioutil" "math/rand" "os" + "os/exec" "regexp" "time" ) @@ -110,3 +111,18 @@ func HttpXFileVerify(isFile bool, TagName string, Proxy string, Thread int, out } return ret } +func UnixShell(s string) (string, error) { + //这里是一个小技巧, 以 '/bin/bash -c xx' 的方式调用shell命令, 则可以在命令中使用管道符,组合多个命令 + cmd := exec.Command("/bin/sh", "-c", s) + var out bytes.Buffer + cmd.Stdout = &out //把执行命令的标准输出定向到out + cmd.Stderr = &out //把命令的错误输出定向到out + + //启动一个子进程执行命令,阻塞到子进程结束退出 + err := cmd.Run() + if err != nil { + return "", err + } + + return out.String(), err +} diff --git a/go.mod b/go.mod index 88ad770..cebd829 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/y-omicron/util go 1.18 require ( - github.com/alecthomas/kong v0.6.1 + github.com/ethereum/go-ethereum v1.10.21 github.com/gookit/color v1.5.1 github.com/projectdiscovery/httpx v1.2.3 ) @@ -18,8 +18,10 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/bluele/gcache v0.0.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 // indirect github.com/corpix/uarand v0.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/css v1.0.0 // indirect @@ -60,7 +62,7 @@ require ( github.com/rs/xid v1.4.0 // indirect github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/syndtr/goleveldb v1.0.0 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 // indirect github.com/weppos/publicsuffix-go v0.15.1-0.20210928183822-5ee35905bd95 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect @@ -71,12 +73,12 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2 // indirect - golang.org/x/mod v0.4.2 // indirect + golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 // indirect golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 137323c..7481cba 100644 --- a/go.sum +++ b/go.sum @@ -6,10 +6,6 @@ github.com/RumbleDiscovery/rumble-tools v0.0.0-20201105153123-f2adbb3244d2/go.mo github.com/akrylysov/pogreb v0.10.0/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI= github.com/akrylysov/pogreb v0.10.1 h1:FqlR8VR7uCbJdfUob916tPM+idpKgeESDXOA1K0DK4w= github.com/akrylysov/pogreb v0.10.1/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI= -github.com/alecthomas/kong v0.6.1 h1:1kNhcFepkR+HmasQpbiKDLylIL8yh5B5y1zPp5bJimA= -github.com/alecthomas/kong v0.6.1/go.mod h1:JfHWDzLmbh/puW6I3V7uWenoh56YNVONW+w8eKeUr9I= -github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 h1:8Uy0oSf5co/NZXje7U1z8Mpep++QJOldL2hs/sBQf48= -github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= github.com/ammario/ipisp/v2 v2.0.0 h1:/aRMp5srZViiBfOUGzl/Esqae4s0MDDzm9buhGcZ0XU= github.com/ammario/ipisp/v2 v2.0.0/go.mod h1:bQ6KAL5LnYYEj6olUn+Bzv/im/4Esa5oGkbv9b+uOjo= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= @@ -22,6 +18,9 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw= github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ= github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= github.com/corpix/uarand v0.2.0 h1:U98xXwud/AVuCpkpgfPF7J5TQgr7R5tqT8VZP5KWbzE= @@ -30,8 +29,14 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/ethereum/go-ethereum v1.10.21 h1:5lqsEx92ZaZzRyOqBEXux4/UR06m296RGzN3ol3teJY= +github.com/ethereum/go-ethereum v1.10.21/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -110,6 +115,7 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -224,8 +230,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 h1:TtyC78WMafNW8QFfv3TeP3yWNDG+uxNkk9vOrnDu6JA= github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6/go.mod h1:h8272+G2omSmi30fBXiZDMkmHuOgonplfKIKjQWzlfs= github.com/weppos/publicsuffix-go v0.15.1-0.20210928183822-5ee35905bd95 h1:DyAZOw3JsVd6LJHqhl4MpKQdYQEmat0C6pPPwom39Ow= @@ -260,8 +267,9 @@ golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2 h1:XdAboW3BNMv9ocSCOk/u1M golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -270,6 +278,7 @@ golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -300,7 +309,9 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201113233024-12cec1faf1ba/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -321,6 +332,7 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= @@ -330,13 +342,15 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=