Skip to content

Commit 943a918

Browse files
committed
Support running enclave prover locally
1 parent 09e6032 commit 943a918

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

cmd/enclave/main.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"net/http"
45
"os"
56

67
"github.com/ethereum/go-ethereum/log"
@@ -12,11 +13,6 @@ import (
1213
func main() {
1314
log.SetDefault(log.NewLogger(log.LogfmtHandlerWithLevel(os.Stdout, log.LevelInfo)))
1415

15-
listener, err := vsock.Listen(1234, &vsock.Config{})
16-
if err != nil {
17-
log.Crit("Error opening vsock listener", "error", err)
18-
}
19-
2016
s := rpc.NewServer()
2117
serv, err := enclave.NewServer()
2218
if err != nil {
@@ -27,7 +23,13 @@ func main() {
2723
log.Crit("Error registering API", "error", err)
2824
}
2925

30-
err = s.ServeListener(listener)
26+
listener, err := vsock.Listen(1234, &vsock.Config{})
27+
if err != nil {
28+
log.Warn("Error opening vsock listener, running in HTTP mode", "error", err)
29+
err = http.ListenAndServe(":1234", s)
30+
} else {
31+
err = s.ServeListener(listener)
32+
}
3133
if err != nil {
3234
log.Crit("Error starting server", "error", err)
3335
}

enclave/server.go

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"bytes"
66
"context"
77
"crypto/ecdsa"
8+
"crypto/rand"
89
"crypto/rsa"
910
"crypto/sha256"
1011
"crypto/x509"
@@ -22,6 +23,7 @@ import (
2223
"github.com/ethereum/go-ethereum/core/stateless"
2324
"github.com/ethereum/go-ethereum/core/types"
2425
"github.com/ethereum/go-ethereum/crypto"
26+
"github.com/ethereum/go-ethereum/log"
2527
"github.com/ethereum/go-ethereum/rlp"
2628
"github.com/ethereum/go-ethereum/trie"
2729
"github.com/hf/nitrite"
@@ -79,35 +81,42 @@ type Server struct {
7981
var _ RPC = (*Server)(nil)
8082

8183
func NewServer() (*Server, error) {
84+
var random io.Reader
85+
var pcr0 []byte
8286
session, err := nsm.OpenDefaultSession()
8387
if err != nil {
84-
return nil, fmt.Errorf("failed to open session: %w", err)
88+
log.Warn("failed to open Nitro Secure Module session, running in local mode", "error", err)
89+
random = rand.Reader
90+
} else {
91+
defer func() {
92+
_ = session.Close()
93+
}()
94+
pcr, err := session.Send(&request.DescribePCR{
95+
Index: 0,
96+
})
97+
if err != nil {
98+
return nil, fmt.Errorf("failed to describe PCR: %w", err)
99+
}
100+
if pcr.Error != "" {
101+
return nil, fmt.Errorf("NSM device returned an error: %s", pcr.Error)
102+
}
103+
if pcr.DescribePCR == nil || pcr.DescribePCR.Data == nil || len(pcr.DescribePCR.Data) == 0 {
104+
return nil, errors.New("NSM device did not return PCR data")
105+
}
106+
pcr0 = pcr.DescribePCR.Data
107+
random = session
85108
}
86-
defer func() {
87-
_ = session.Close()
88-
}()
89-
decryptionKey, err := rsa.GenerateKey(session, 2048)
109+
110+
decryptionKey, err := rsa.GenerateKey(random, 2048)
90111
if err != nil {
91112
return nil, fmt.Errorf("failed to generate decryption key: %w", err)
92113
}
93-
signerKey, err := ecdsa.GenerateKey(crypto.S256(), session)
114+
signerKey, err := ecdsa.GenerateKey(crypto.S256(), random)
94115
if err != nil {
95116
return nil, fmt.Errorf("failed to generate signer key: %w", err)
96117
}
97-
pcr, err := session.Send(&request.DescribePCR{
98-
Index: 0,
99-
})
100-
if err != nil {
101-
return nil, fmt.Errorf("failed to describe PCR: %w", err)
102-
}
103-
if pcr.Error != "" {
104-
return nil, fmt.Errorf("NSM device returned an error: %s", pcr.Error)
105-
}
106-
if pcr.DescribePCR == nil || pcr.DescribePCR.Data == nil || len(pcr.DescribePCR.Data) == 0 {
107-
return nil, errors.New("NSM device did not return PCR data")
108-
}
109118
return &Server{
110-
pcr0: pcr.DescribePCR.Data,
119+
pcr0: pcr0,
111120
signerKey: signerKey,
112121
decryptionKey: decryptionKey,
113122
}, nil

0 commit comments

Comments
 (0)