Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement EIP-712 Typed Data #51

Merged
merged 30 commits into from
Dec 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f580294
First pass at adding typed data signing
awrichar Sep 21, 2023
9e233c2
Work to integrate EIP-712 code with ABI code (wip)
peterbroadhurst Oct 22, 2023
cc6a2c9
Work through ABI->EIP-712 direction
peterbroadhurst Oct 23, 2023
5e1d6d7
Significant additional refactoring of typed data V3 encoding
peterbroadhurst Oct 23, 2023
f830806
More varation of scenarios
peterbroadhurst Oct 23, 2023
74b550b
Work through nil handling
peterbroadhurst Oct 23, 2023
64b28ee
Updated tests on ABI->TypedData interface
peterbroadhurst Oct 23, 2023
9bd1df9
Work through tests on encoding
peterbroadhurst Oct 24, 2023
e47d7f8
Work through changes in signer interface
peterbroadhurst Oct 24, 2023
319a085
Merge tag 'v1.1.10' into HEAD
awrichar Oct 24, 2023
9700e14
Merge remote-tracking branch 'origin/main' into HEAD
awrichar Oct 24, 2023
38bcfa6
Update linter
peterbroadhurst Oct 24, 2023
a5db248
Provide individual parts of signature in Go utility
peterbroadhurst Oct 25, 2023
1e59fbf
Use simple structure for signature
peterbroadhurst Oct 25, 2023
1e82757
RLP signature too
peterbroadhurst Oct 25, 2023
fd5b5d1
Fix docs on ABI structure
peterbroadhurst Oct 31, 2023
4060859
Avoid clashes
peterbroadhurst Oct 31, 2023
f46dee6
Work around odd issue
peterbroadhurst Oct 31, 2023
b1f5b39
Add YAML support
peterbroadhurst Nov 1, 2023
be73017
Update common
peterbroadhurst Nov 1, 2023
5f677b4
Do not assert version (confusion in TypeScript lib)
peterbroadhurst Nov 2, 2023
df2f89e
Correct double hashing issue
peterbroadhurst Nov 9, 2023
f06d0f7
Update interface to split sign/sign-direct
peterbroadhurst Nov 9, 2023
187d458
More fiddling with interface
peterbroadhurst Nov 9, 2023
ada360f
Use Eth convention for signature
peterbroadhurst Nov 10, 2023
8108a60
Ensure documentation of field values
peterbroadhurst Nov 10, 2023
a302f6e
Also document TypedData structure
peterbroadhurst Nov 10, 2023
ba68367
Upgrade common and use consistent resty with common
peterbroadhurst Nov 29, 2023
f470ea1
Pick up PR-112 from common
peterbroadhurst Nov 29, 2023
04de049
Remove duplicate message
peterbroadhurst Dec 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.19
go-version: '1.20'

- name: Build and Test
run: make
Expand Down
1 change: 0 additions & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ linters:
- structcheck
enable:
- bodyclose
- deadcode
- dogsled
- errcheck
- goconst
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
FROM golang:1.19-buster AS builder
FROM golang:1.20-bullseye AS builder
ARG BUILD_VERSION
ENV BUILD_VERSION=${BUILD_VERSION}
ADD . /ffsigner
WORKDIR /ffsigner
RUN make

FROM debian:buster-slim
FROM debian:bullseye-slim
WORKDIR /ffsigner
RUN apt update -y \
&& apt install -y curl jq \
Expand Down
11 changes: 6 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ lint: ${LINT}
${MOCKERY}:
$(VGO) install github.com/vektra/mockery/cmd/mockery@latest
${LINT}:
$(VGO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.47.0
$(VGO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.0


define makemock
Expand All @@ -30,10 +30,11 @@ mocks-$(strip $(1))-$(strip $(2)): ${MOCKERY}
${MOCKERY} --case underscore --dir $(1) --name $(2) --outpkg $(3) --output mocks/$(strip $(3))
endef

$(eval $(call makemock, pkg/ethsigner, Wallet, ethsignermocks))
$(eval $(call makemock, pkg/secp256k1, Signer, secp256k1mocks))
$(eval $(call makemock, internal/rpcserver, Server, rpcservermocks))
$(eval $(call makemock, pkg/rpcbackend, Backend, rpcbackendmocks))
$(eval $(call makemock, pkg/ethsigner, Wallet, ethsignermocks))
$(eval $(call makemock, pkg/secp256k1, Signer, secp256k1mocks))
$(eval $(call makemock, pkg/secp256k1, SignerDirect, secp256k1mocks))
$(eval $(call makemock, internal/rpcserver, Server, rpcservermocks))
$(eval $(call makemock, pkg/rpcbackend, Backend, rpcbackendmocks))

firefly-signer: ${GOFILES}
$(VGO) build -o ./firefly-signer -ldflags "-X main.buildDate=`date -u +\"%Y-%m-%dT%H:%M:%SZ\"` -X main.buildVersion=$(BUILD_VERSION)" -tags=prod -tags=prod -v ./ffsigner
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ A set of Ethereum transaction signing utilities designed for use across projects
- Original
- EIP-155
- EIP-1559
- EIP-712 (see below)
- See `pkg/ethsigner` [go doc](https://pkg.go.dev/github.com/hyperledger/firefly-signer/pkg/ethsigner)
- EIP-712 Typed Data implementation
- See `pkg/eip712` [go doc](https://pkg.go.dev/github.com/hyperledger/firefly-signer/pkg/eip712)
- Keystore V3 key file implementation
- Scrypt - read/write
- pbkdf2 - read
Expand All @@ -30,6 +33,10 @@ A set of Ethereum transaction signing utilities designed for use across projects
- Files can be Keystore V3 files directly, with accompanying `{{ADDRESS}}.pass` files
- Detects newly added files automatically
- See `pkg/fswallet` [go doc](https://pkg.go.dev/github.com/hyperledger/firefly-signer/pkg/fswallet)
- JSON/RPC client
- HTTP
- WebSockets - with `eth_subscribe` support
- See `pkg/rpcbackend` [go doc](https://pkg.go.dev/github.com/hyperledger/firefly-signer/pkg/rpcbackend)

## JSON/RPC proxy server

Expand Down
3 changes: 3 additions & 0 deletions config.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ nav_order: 2
|certFile|The path to the certificate file for TLS on this API|`string`|`<nil>`
|clientAuth|Enables or disables client auth for TLS on this API|`string`|`<nil>`
|enabled|Enables or disables TLS on this API|`boolean`|`false`
|insecureSkipHostVerify|When to true in unit test development environments to disable TLS verification. Use with extreme caution|`boolean`|`<nil>`
|keyFile|The path to the private key file for TLS on this API|`string`|`<nil>`
|requiredDNAttributes|A set of required subject DN attributes. Each entry is a regular expression, and the subject certificate must have a matching attribute of the specified type (CN, C, O, OU, ST, L, STREET, POSTALCODE, SERIALNUMBER are valid attributes)|`map[string]string`|`<nil>`

Expand All @@ -76,6 +77,7 @@ nav_order: 2
|initialConnectAttempts|The number of attempts FireFly will make to connect to the WebSocket when starting up, before failing|`int`|`5`
|path|The WebSocket sever URL to which FireFly should connect|WebSocket URL `string`|`<nil>`
|readBufferSize|The size in bytes of the read buffer for the WebSocket connection|[`BytesSize`](https://pkg.go.dev/github.com/docker/go-units#BytesSize)|`16Kb`
|url|URL to use for WebSocket - overrides url one level up (in the HTTP config)|`string`|`<nil>`
|writeBufferSize|The size in bytes of the write buffer for the WebSocket connection|[`BytesSize`](https://pkg.go.dev/github.com/docker/go-units#BytesSize)|`16Kb`

## cors
Expand Down Expand Up @@ -183,5 +185,6 @@ nav_order: 2
|certFile|The path to the certificate file for TLS on this API|`string`|`<nil>`
|clientAuth|Enables or disables client auth for TLS on this API|`string`|`<nil>`
|enabled|Enables or disables TLS on this API|`boolean`|`false`
|insecureSkipHostVerify|When to true in unit test development environments to disable TLS verification. Use with extreme caution|`boolean`|`<nil>`
|keyFile|The path to the private key file for TLS on this API|`string`|`<nil>`
|requiredDNAttributes|A set of required subject DN attributes. Each entry is a regular expression, and the subject certificate must have a matching attribute of the specified type (CN, C, O, OU, ST, L, STREET, POSTALCODE, SERIALNUMBER are valid attributes)|`map[string]string`|`<nil>`
87 changes: 45 additions & 42 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,75 +1,78 @@
module github.com/hyperledger/firefly-signer

go 1.19
go 1.20

require (
github.com/btcsuite/btcd/btcec/v2 v2.1.3
github.com/fsnotify/fsnotify v1.6.0
github.com/btcsuite/btcd/btcec/v2 v2.3.2
github.com/fsnotify/fsnotify v1.7.0
github.com/go-resty/resty/v2 v2.7.0
github.com/gorilla/mux v1.8.0
github.com/hyperledger/firefly-common v1.3.1-0.20231003142556-37246a8c5e72
github.com/hyperledger/firefly-common v1.4.1-0.20231129162504-c603e8182052
github.com/karlseguin/ccache v2.0.3+incompatible
github.com/pelletier/go-toml v1.9.5
github.com/santhosh-tekuri/jsonschema/v5 v5.0.2
github.com/sirupsen/logrus v1.9.0
github.com/spf13/cobra v1.6.1
github.com/spf13/viper v1.14.0
github.com/stretchr/testify v1.8.1
golang.org/x/crypto v0.1.0
golang.org/x/text v0.8.0
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.7.0
github.com/spf13/viper v1.17.0
github.com/stretchr/testify v1.8.4
golang.org/x/crypto v0.14.0
golang.org/x/text v0.13.0
gopkg.in/yaml.v2 v2.4.0
)

require (
github.com/aidarkhanov/nanoid v1.0.8 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/getkin/kin-openapi v0.116.0 // indirect
github.com/getkin/kin-openapi v0.120.0 // indirect
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/go-openapi/jsonpointer v0.20.0 // indirect
github.com/go-openapi/swag v0.22.4 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/yaml v0.2.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/magiconair/properties v1.8.6 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
github.com/perimeterx/marshmallow v1.1.4 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/perimeterx/marshmallow v1.1.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.11.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.30.0 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/rs/cors v1.8.2 // indirect
github.com/spf13/afero v1.9.2 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/sagikazarmark/locafero v0.3.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/subosito/gotenv v1.4.1 // indirect
github.com/stretchr/objx v0.5.1 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 // indirect
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
gitlab.com/hfuss/mux-prometheus v0.0.5 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/term v0.6.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect; indirectå
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/term v0.13.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading
Loading