Skip to content

Commit 3589bb0

Browse files
committed
cmd/sunlight-keygen: support printing witness verifier key
1 parent a1e8dd0 commit 3589bb0

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

cmd/sunlight-keygen/keygen.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717

1818
"filippo.io/keygen"
1919
"filippo.io/sunlight/internal/immutable"
20+
"filippo.io/torchwood"
2021
"golang.org/x/crypto/hkdf"
2122
"golang.org/x/mod/sumdb/note"
2223
)
@@ -25,6 +26,7 @@ func main() {
2526
fs := flag.NewFlagSet("keygen", flag.ExitOnError)
2627
fileFlag := fs.String("f", "", "path to the seed file")
2728
prefixFlag := fs.String("prefix", "", "submission prefix for the log, to output a witness verifier key")
29+
witnessFlag := fs.String("witness", "", "witness name, for generating a witness secret instead")
2830
fs.Parse(os.Args[1:])
2931
if fs.NArg() != 0 || *fileFlag == "" {
3032
fmt.Fprintln(os.Stderr, "usage: sunlight-keygen -f <seed file>")
@@ -57,6 +59,21 @@ func main() {
5759
log.Fatal("seed file must be exactly 32 bytes")
5860
}
5961

62+
if *witnessFlag != "" {
63+
ed25519Secret := make([]byte, ed25519.SeedSize)
64+
if _, err := io.ReadFull(hkdf.New(sha256.New, seed, []byte("sunlight Ed25519 witness key"),
65+
[]byte(*witnessFlag)), ed25519Secret); err != nil {
66+
log.Fatal("failed to derive Ed25519 key:", err)
67+
}
68+
wk := ed25519.NewKeyFromSeed(ed25519Secret)
69+
s, err := torchwood.NewCosignatureSigner(*witnessFlag, wk)
70+
if err != nil {
71+
log.Fatal("failed to create witness signer:", err)
72+
}
73+
fmt.Printf("Witness vkey: %s\n", s.Verifier())
74+
return
75+
}
76+
6077
ecdsaSecret := make([]byte, 32)
6178
if _, err := io.ReadFull(hkdf.New(sha256.New, seed, []byte("sunlight"), []byte("ECDSA P-256 log key")), ecdsaSecret); err != nil {
6279
log.Fatal("failed to derive ECDSA secret:", err)

cmd/sunlight/sunlight.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ type Config struct {
146146
//
147147
// To generate a new seed, run:
148148
//
149-
// $ sunlight-keygen -f seed.bin
149+
// $ sunlight-keygen -f seed.bin -witness <name>
150150
//
151151
Secret string
152152

0 commit comments

Comments
 (0)