mirror of
https://github.com/luxfi/crypto.git
synced 2026-07-27 01:54:50 +00:00
chore: update deps to latest
This commit is contained in:
@@ -1,172 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/luxfi/crypto/hash"
|
||||
)
|
||||
|
||||
const (
|
||||
hexPrefix = "0x"
|
||||
checksumLen = 4
|
||||
)
|
||||
|
||||
var (
|
||||
errEncodingOverFlow = errors.New("encoding overflow")
|
||||
errInvalidEncoding = errors.New("invalid encoding")
|
||||
errUnsupportedEncodingInMethod = errors.New("unsupported encoding in method")
|
||||
errMissingChecksum = errors.New("input string is smaller than the checksum size")
|
||||
errBadChecksum = errors.New("invalid input checksum")
|
||||
errMissingHexPrefix = errors.New("missing 0x prefix to hex encoding")
|
||||
)
|
||||
|
||||
// Encoding defines how bytes are converted to a string and vice versa
|
||||
type Encoding uint8
|
||||
|
||||
const (
|
||||
// Hex specifies a hex plus 4 byte checksum encoding format
|
||||
Hex Encoding = iota
|
||||
// HexNC specifies a hex encoding format
|
||||
HexNC
|
||||
// HexC specifies a hex plus 4 byte checksum encoding format
|
||||
HexC
|
||||
// JSON specifies the JSON encoding format
|
||||
JSON
|
||||
)
|
||||
|
||||
func (enc Encoding) String() string {
|
||||
switch enc {
|
||||
case Hex:
|
||||
return "hex"
|
||||
case HexNC:
|
||||
return "hexnc"
|
||||
case HexC:
|
||||
return "hexc"
|
||||
case JSON:
|
||||
return "json"
|
||||
default:
|
||||
return errInvalidEncoding.Error()
|
||||
}
|
||||
}
|
||||
|
||||
func (enc Encoding) valid() bool {
|
||||
switch enc {
|
||||
case Hex, HexNC, HexC, JSON:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (enc Encoding) MarshalJSON() ([]byte, error) {
|
||||
if !enc.valid() {
|
||||
return nil, errInvalidEncoding
|
||||
}
|
||||
return []byte(`"` + enc.String() + `"`), nil
|
||||
}
|
||||
|
||||
func (enc *Encoding) UnmarshalJSON(b []byte) error {
|
||||
str := string(b)
|
||||
if str == "null" {
|
||||
return nil
|
||||
}
|
||||
switch strings.ToLower(str) {
|
||||
case `"hex"`:
|
||||
*enc = Hex
|
||||
case `"hexnc"`:
|
||||
*enc = HexNC
|
||||
case `"hexc"`:
|
||||
*enc = HexC
|
||||
case `"json"`:
|
||||
*enc = JSON
|
||||
default:
|
||||
return errInvalidEncoding
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Encode [bytes] to a string using the given encoding format [bytes] may be
|
||||
// nil, in which case it will be treated the same as an empty slice.
|
||||
func Encode(encoding Encoding, bytes []byte) (string, error) {
|
||||
if !encoding.valid() {
|
||||
return "", errInvalidEncoding
|
||||
}
|
||||
|
||||
switch encoding {
|
||||
case Hex, HexC:
|
||||
bytesLen := len(bytes)
|
||||
if bytesLen > math.MaxInt32-checksumLen {
|
||||
return "", errEncodingOverFlow
|
||||
}
|
||||
checked := make([]byte, bytesLen+checksumLen)
|
||||
copy(checked, bytes)
|
||||
copy(checked[len(bytes):], hash.Checksum(bytes, checksumLen))
|
||||
bytes = checked
|
||||
}
|
||||
|
||||
switch encoding {
|
||||
case Hex, HexNC, HexC:
|
||||
return fmt.Sprintf("0x%x", bytes), nil
|
||||
case JSON:
|
||||
// JSON Marshal does not support []byte input and we rely on the
|
||||
// router's json marshalling to marshal our interface{} into JSON
|
||||
// in response. Therefore it is not supported in this call.
|
||||
return "", errUnsupportedEncodingInMethod
|
||||
default:
|
||||
return "", errInvalidEncoding
|
||||
}
|
||||
}
|
||||
|
||||
// Decode [str] to bytes using the given encoding
|
||||
// If [str] is the empty string, returns a nil byte slice and nil error
|
||||
func Decode(encoding Encoding, str string) ([]byte, error) {
|
||||
switch {
|
||||
case !encoding.valid():
|
||||
return nil, errInvalidEncoding
|
||||
case len(str) == 0:
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var (
|
||||
decodedBytes []byte
|
||||
err error
|
||||
)
|
||||
switch encoding {
|
||||
case Hex, HexNC, HexC:
|
||||
if !strings.HasPrefix(str, hexPrefix) {
|
||||
return nil, errMissingHexPrefix
|
||||
}
|
||||
decodedBytes, err = hex.DecodeString(str[2:])
|
||||
case JSON:
|
||||
// JSON unmarshalling requires interface and has no return values
|
||||
// contrary to this method, therefore it is not supported in this call
|
||||
return nil, errUnsupportedEncodingInMethod
|
||||
default:
|
||||
return nil, errInvalidEncoding
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch encoding {
|
||||
case Hex, HexC:
|
||||
if len(decodedBytes) < checksumLen {
|
||||
return nil, errMissingChecksum
|
||||
}
|
||||
// Verify the checksum
|
||||
rawBytes := decodedBytes[:len(decodedBytes)-checksumLen]
|
||||
checksum := decodedBytes[len(decodedBytes)-checksumLen:]
|
||||
if !bytes.Equal(checksum, hash.Checksum(rawBytes, checksumLen)) {
|
||||
return nil, errBadChecksum
|
||||
}
|
||||
decodedBytes = rawBytes
|
||||
}
|
||||
return decodedBytes, nil
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/luxfi/constants"
|
||||
)
|
||||
|
||||
func BenchmarkEncodings(b *testing.B) {
|
||||
benchmarks := []struct {
|
||||
encoding Encoding
|
||||
size int
|
||||
}{
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 1 * constants.KiB, // 1kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 4 * constants.KiB, // 4kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 32 * constants.KiB, // 32kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 128 * constants.KiB, // 128kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 256 * constants.KiB, // 256kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 512 * constants.KiB, // 512kb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 1 * constants.MiB, // 1mb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 2 * constants.MiB, // 2mb
|
||||
},
|
||||
{
|
||||
encoding: Hex,
|
||||
size: 4 * constants.MiB, // 4mb
|
||||
},
|
||||
}
|
||||
for _, benchmark := range benchmarks {
|
||||
bytes := make([]byte, benchmark.size)
|
||||
_, _ = rand.Read(bytes) // #nosec G404
|
||||
b.Run(fmt.Sprintf("%s-%d bytes", benchmark.encoding, benchmark.size), func(b *testing.B) {
|
||||
for n := 0; n < b.N; n++ {
|
||||
_, err := Encode(benchmark.encoding, bytes)
|
||||
require.NoError(b, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestEncodingMarshalJSON(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
enc := Hex
|
||||
jsonBytes, err := enc.MarshalJSON()
|
||||
require.NoError(err)
|
||||
require.JSONEq(`"hex"`, string(jsonBytes))
|
||||
}
|
||||
|
||||
func TestEncodingUnmarshalJSON(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
jsonBytes := []byte(`"hex"`)
|
||||
var enc Encoding
|
||||
require.NoError(json.Unmarshal(jsonBytes, &enc))
|
||||
require.Equal(Hex, enc)
|
||||
|
||||
var serr *json.SyntaxError
|
||||
jsonBytes = []byte("")
|
||||
require.ErrorAs(json.Unmarshal(jsonBytes, &enc), &serr)
|
||||
|
||||
jsonBytes = []byte(`""`)
|
||||
err := json.Unmarshal(jsonBytes, &enc)
|
||||
require.ErrorIs(err, errInvalidEncoding)
|
||||
}
|
||||
|
||||
func TestEncodingString(t *testing.T) {
|
||||
enc := Hex
|
||||
require.Equal(t, "hex", enc.String())
|
||||
}
|
||||
|
||||
// Test encoding bytes to a string and decoding back to bytes
|
||||
func TestEncodeDecode(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
type test struct {
|
||||
encoding Encoding
|
||||
bytes []byte
|
||||
str string
|
||||
}
|
||||
|
||||
id := [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}
|
||||
tests := []test{
|
||||
{
|
||||
Hex,
|
||||
[]byte{},
|
||||
"0x7852b855",
|
||||
},
|
||||
{
|
||||
Hex,
|
||||
[]byte{0},
|
||||
"0x0017afa01d",
|
||||
},
|
||||
{
|
||||
Hex,
|
||||
[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255},
|
||||
"0x00010203040506070809ff4482539c",
|
||||
},
|
||||
{
|
||||
Hex,
|
||||
id[:],
|
||||
"0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20b7a612c9",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
// Encode the bytes
|
||||
strResult, err := Encode(test.encoding, test.bytes)
|
||||
require.NoError(err)
|
||||
// Make sure the string repr. is what we expected
|
||||
require.Equal(test.str, strResult)
|
||||
// Decode the string
|
||||
bytesResult, err := Decode(test.encoding, strResult)
|
||||
require.NoError(err)
|
||||
// Make sure we got the same bytes back
|
||||
require.Equal(test.bytes, bytesResult)
|
||||
}
|
||||
}
|
||||
|
||||
// Test that encoding nil bytes works
|
||||
func TestEncodeNil(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
str, err := Encode(Hex, nil)
|
||||
require.NoError(err)
|
||||
require.Equal("0x7852b855", str)
|
||||
}
|
||||
|
||||
func TestDecodeHexInvalid(t *testing.T) {
|
||||
tests := []struct {
|
||||
inputStr string
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
inputStr: "0",
|
||||
expectedErr: errMissingHexPrefix,
|
||||
},
|
||||
{
|
||||
inputStr: "x",
|
||||
expectedErr: errMissingHexPrefix,
|
||||
},
|
||||
{
|
||||
inputStr: "0xg",
|
||||
expectedErr: hex.InvalidByteError('g'),
|
||||
},
|
||||
{
|
||||
inputStr: "0x0017afa0Zd",
|
||||
expectedErr: hex.InvalidByteError('Z'),
|
||||
},
|
||||
{
|
||||
inputStr: "0xafafafafaf",
|
||||
expectedErr: errBadChecksum,
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
_, err := Decode(Hex, test.inputStr)
|
||||
require.ErrorIs(t, err, test.expectedErr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeNil(t *testing.T) {
|
||||
require := require.New(t)
|
||||
result, err := Decode(Hex, "")
|
||||
require.NoError(err)
|
||||
require.Empty(result)
|
||||
}
|
||||
|
||||
func FuzzEncodeDecode(f *testing.F) {
|
||||
f.Fuzz(func(t *testing.T, bytes []byte) {
|
||||
require := require.New(t)
|
||||
|
||||
str, err := Encode(Hex, bytes)
|
||||
require.NoError(err)
|
||||
|
||||
decoded, err := Decode(Hex, str)
|
||||
require.NoError(err)
|
||||
|
||||
require.Equal(bytes, decoded)
|
||||
})
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
func IntFormat(maxValue int) string {
|
||||
log := 1
|
||||
if maxValue > 0 {
|
||||
log = int(math.Ceil(math.Log10(float64(maxValue + 1))))
|
||||
}
|
||||
return fmt.Sprintf("%%0%dd", log)
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestIntFormat(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
require.Equal("%01d", IntFormat(0))
|
||||
require.Equal("%01d", IntFormat(9))
|
||||
require.Equal("%02d", IntFormat(10))
|
||||
require.Equal("%02d", IntFormat(99))
|
||||
require.Equal("%03d", IntFormat(100))
|
||||
require.Equal("%03d", IntFormat(999))
|
||||
require.Equal("%04d", IntFormat(1000))
|
||||
require.Equal("%04d", IntFormat(9999))
|
||||
require.Equal("%05d", IntFormat(10000))
|
||||
require.Equal("%05d", IntFormat(99999))
|
||||
require.Equal("%06d", IntFormat(100000))
|
||||
require.Equal("%06d", IntFormat(999999))
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
||||
// See the file LICENSE for licensing terms.
|
||||
|
||||
package formatting
|
||||
|
||||
import "fmt"
|
||||
|
||||
// PrefixedStringer extends a stringer that adds a prefix
|
||||
type PrefixedStringer interface {
|
||||
fmt.Stringer
|
||||
|
||||
PrefixedString(prefix string) string
|
||||
}
|
||||
@@ -20,9 +20,8 @@ require (
|
||||
github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7
|
||||
github.com/leanovate/gopter v0.2.11
|
||||
github.com/luxfi/cache v1.1.0
|
||||
github.com/luxfi/constants v1.4.2
|
||||
github.com/luxfi/gpu v0.30.0
|
||||
github.com/luxfi/ids v1.2.7
|
||||
github.com/luxfi/ids v1.2.9
|
||||
github.com/luxfi/log v1.2.1
|
||||
github.com/luxfi/mock v0.1.0
|
||||
github.com/mr-tron/base58 v1.2.0
|
||||
@@ -33,23 +32,20 @@ require (
|
||||
golang.org/x/crypto v0.46.0
|
||||
golang.org/x/sync v0.19.0
|
||||
golang.org/x/sys v0.39.0
|
||||
lukechampine.com/blake3 v1.2.1
|
||||
lukechampine.com/blake3 v1.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/bits-and-blooms/bitset v1.24.4 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/gorilla/rpc v1.2.1 // indirect
|
||||
github.com/holiman/uint256 v1.3.2 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
||||
github.com/luxfi/math v0.1.4 // indirect
|
||||
github.com/luxfi/node v1.20.3 // indirect
|
||||
github.com/luxfi/utils v1.1.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/zeebo/assert v1.3.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.uber.org/zap v1.27.1 // indirect
|
||||
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect
|
||||
gonum.org/v1/gonum v0.16.0 // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
@@ -197,8 +197,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
|
||||
github.com/gorilla/rpc v1.2.1 h1:yC+LMV5esttgpVvNORL/xX4jvTTEUE30UZhZ5JF7K9k=
|
||||
github.com/gorilla/rpc v1.2.1/go.mod h1:uNpOihAlF5xRFLuTYhfR0yfCTm0WTQSQttkMSptRfGk=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
|
||||
@@ -253,20 +251,14 @@ github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzW
|
||||
github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c=
|
||||
github.com/luxfi/cache v1.1.0 h1:6LUyGGZ+rrMAJBbAU6+UwkcamXj3zsboRUodIof2Ong=
|
||||
github.com/luxfi/cache v1.1.0/go.mod h1:9GvlEEE9rFPaaWxvVpSPwW8ZMo2+8VMNNcuPa4AwzPg=
|
||||
github.com/luxfi/constants v1.4.2 h1:hxp2cITYxNCKG3xOdjnEesOoCR4GI9Lb5RQ4120ke6E=
|
||||
github.com/luxfi/constants v1.4.2/go.mod h1:xk+0eA7UY1GkHrmI7yqR+9LDe4TUe3p1VfRvs6cJbNM=
|
||||
github.com/luxfi/gpu v0.30.0 h1:k+7EDp/WHTa0176zXet1UXTl8IcZcp1ZkS8GUJ5l2iU=
|
||||
github.com/luxfi/gpu v0.30.0/go.mod h1:7pFsHqra1Vrmy2aGXVEPKeKsPR+Bn+QmBXuByK3fdPA=
|
||||
github.com/luxfi/ids v1.2.7 h1:3B42EbzR2cdY3veo1yOFOOIeEE+HULnCye2Ye32nXqI=
|
||||
github.com/luxfi/ids v1.2.7/go.mod h1:svLsj7e6ixJVfRYaQqv9RWjBIW11Vz738+d08BVpeCg=
|
||||
github.com/luxfi/ids v1.2.9 h1:+yjdhXW99drnd2Zlp1u/p8k3G23W3/1btJQ4ogHawUI=
|
||||
github.com/luxfi/ids v1.2.9/go.mod h1:khJOEdOPxd22yn0jcVrnbX1ADa0GHn5Y74gvCzN5BYc=
|
||||
github.com/luxfi/log v1.2.1 h1:L2JM8MjGPF8rBnY+EXODS9x5OQTGSgeQ1SPFmeB+oPY=
|
||||
github.com/luxfi/log v1.2.1/go.mod h1:0vJzb4Hl9fvgwWDMKcbCD/SYH3bO0iSmgZMcYdfdl1o=
|
||||
github.com/luxfi/math v0.1.4 h1:yPoXwHttm2M0HQ8a+SNZcN0MDz617en4+tyiQ9Iq8cA=
|
||||
github.com/luxfi/math v0.1.4/go.mod h1:hGzbdMPfhX6zobJXz+Crja7AY9kHMqIL2L60kYUzyUc=
|
||||
github.com/luxfi/mock v0.1.0 h1:IwElfNu+T9sXvzFX6tudPDx1vqPuACRSRdxpD5lxW+o=
|
||||
github.com/luxfi/mock v0.1.0/go.mod h1:izF+9K0gGzFC9zERn6Po37v46eLdPB+EIsDjL3GLk+U=
|
||||
github.com/luxfi/node v1.20.3 h1:T8zo9Q5hBDJ31t42t6SDHYhQcvIjfx0iIUAHQqTSYwo=
|
||||
github.com/luxfi/node v1.20.3/go.mod h1:8+nlZVYI8dDBYxC4Bj7mqeL4rHrIQfoB+atVZhABtEA=
|
||||
github.com/luxfi/utils v1.1.0 h1:ti7HvjNwJd4ILDMERJtOAWE9mF8l+zqDVkgWnF7Agic=
|
||||
github.com/luxfi/utils v1.1.0/go.mod h1:ABqhBdGNig0CaDcnNYldv1byS0BTNi5IKPbJSPF1p98=
|
||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
@@ -312,8 +304,6 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||
github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU=
|
||||
github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
|
||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
||||
@@ -348,16 +338,14 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69
|
||||
github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE=
|
||||
github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
|
||||
github.com/thepudds/fzgen v0.4.3 h1:srUP/34BulQaEwPP/uHZkdjUcUjIzL7Jkf4CBVryiP8=
|
||||
github.com/thepudds/fzgen v0.4.3/go.mod h1:BhhwtRhzgvLWAjjcHDJ9pEiLD2Z9hrVIFjBCHJ//zJ4=
|
||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY=
|
||||
github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
|
||||
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
|
||||
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
|
||||
github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
|
||||
github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=
|
||||
github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
|
||||
@@ -636,8 +624,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
||||
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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||
@@ -769,8 +755,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
|
||||
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
|
||||
lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w=
|
||||
lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
|
||||
Reference in New Issue
Block a user