From 7889cf072d6cd5be25fb8c2a3e93327b456abb6b Mon Sep 17 00:00:00 2001 From: Martin Hutchinson Date: Tue, 28 Jul 2026 15:39:31 +0000 Subject: [PATCH 1/3] Added tlog-verify to verify tlog-proof bundles This verifies c2sp proof bundles on the commandline. --- .gitignore | 2 +- cmd/tlog-verify/README.md | 87 ++++++++ cmd/tlog-verify/main.go | 186 ++++++++++++++++++ cmd/tlog-verify/main_test.go | 183 +++++++++++++++++ .../testdata/tessera-v1.0.0.tlog-proof | 34 ++++ 5 files changed, 491 insertions(+), 1 deletion(-) create mode 100644 cmd/tlog-verify/README.md create mode 100644 cmd/tlog-verify/main.go create mode 100644 cmd/tlog-verify/main_test.go create mode 100644 cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof diff --git a/.gitignore b/.gitignore index 4711883..8f46747 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Go binaries -/cmd +/tlog-verify /proxy /client /ct diff --git a/cmd/tlog-verify/README.md b/cmd/tlog-verify/README.md new file mode 100644 index 0000000..1337d94 --- /dev/null +++ b/cmd/tlog-verify/README.md @@ -0,0 +1,87 @@ +# tlog-verify + +`tlog-verify` is a command-line tool that performs offline verification of transparency log proofs formatted according to the [c2sp.org/tlog-proof](https://c2sp.org/tlog-proof) specification. + +## Motivation + +Transparency logs allow verifiers to ensure that data has been publicly logged. A `tlog-proof` file bundles all the information needed to verify that a specific leaf exists in the log at a specific checkpoint: +1. The log checkpoint (signed by the log). +2. The index of the entry. +3. The Merkle inclusion proof. + +This tool allows verifying these proofs offline, given the log's public verifier key and the expected leaf data (or its hash). + +## Usage + +```shell +go run ./cmd/tlog-verify --log-key [flags] [proof-file] +``` + +If `proof-file` is omitted, the proof is read from standard input. + +### Flags + +* `--log-key`: (Required) Log verifier key (format: `name+hash+key`). +* `--origin`: (Optional) Expected log origin in checkpoint. Defaults to the name in the log key. +* `--leaf-hash`: Pre-computed leaf hash (hex or base64 encoded). +* `--leaf`: Raw leaf data string. +* `--leaf-file`: Path to file containing raw leaf data. + +Exactly one of `--leaf-hash`, `--leaf`, or `--leaf-file` must be specified. +If raw leaf data is provided (`--leaf` or `--leaf-file`), it is hashed using the RFC6962 leaf hashing strategy: `SHA256(0x00 || data)`. + +### Example: Go Checksum DB (SumDB) + +The Go Checksum DB (`sum.golang.org`) is a transparency log. We can verify that `github.com/transparency-dev/tessera@v1.0.0` is included in it using the saved proof in `testdata/tessera-v1.0.0.tlog-proof`. + +The public key for `sum.golang.org` is: +`sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8` + +Since Go SumDB uses `go.sum database tree` as the origin name in its checkpoints (which differs from the key name `sum.golang.org`), we must pass the `--origin` flag. + +#### Verification using pre-computed leaf hash + +The RFC6962 leaf hash for the Tessera entry is: +* Hex: `0fa57c511c3b2ffcc0a05ad63172568d265aaf9844e9b636a0978795396f2ab1` +* Base64: `D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=` + +```shell +go run ./cmd/tlog-verify \ + --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ + --origin "go.sum database tree" \ + --leaf-hash "D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=" \ + cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof +``` + +#### Verification using raw leaf data + +The raw leaf data in SumDB for this entry is: +``` +github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE= +github.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU= +``` +Note: The data must include the trailing newline. + +Using `--leaf` with literal newlines in quotes (to prevent shell from stripping the trailing newline): +```shell +go run ./cmd/tlog-verify \ + --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ + --origin "go.sum database tree" \ + --leaf "github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE= +github.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU= +" \ + cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof +``` + +Or using `--leaf-file`: +```shell +# Create a file containing the raw leaf data (including the trailing newline) +printf "github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE=\ngithub.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU=\n" > /tmp/leaf.txt + +go run ./cmd/tlog-verify \ + --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ + --origin "go.sum database tree" \ + --leaf-file /tmp/leaf.txt \ + cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof +``` + diff --git a/cmd/tlog-verify/main.go b/cmd/tlog-verify/main.go new file mode 100644 index 0000000..2a2dea5 --- /dev/null +++ b/cmd/tlog-verify/main.go @@ -0,0 +1,186 @@ +// Copyright 2026 Google LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "bytes" + "encoding/base64" + "encoding/hex" + "flag" + "fmt" + "io" + "os" + "strings" + + "github.com/transparency-dev/formats/log" + "github.com/transparency-dev/formats/proof" + merkleproof "github.com/transparency-dev/merkle/proof" + "github.com/transparency-dev/merkle/rfc6962" + "golang.org/x/mod/sumdb/note" +) + +var ( + logKey = flag.String("log-key", "", "Log verifier key (required).") + origin = flag.String("origin", "", "Expected log origin in checkpoint (optional, defaults to name in log-key).") + leafHash = flag.String("leaf-hash", "", "Pre-computed leaf hash (hex or base64).") + leaf = flag.String("leaf", "", "Raw leaf data string.") + leafFile = flag.String("leaf-file", "", "Path to file containing raw leaf data.") +) + +func main() { + flag.Parse() + + if err := run(); err != nil { + fmt.Fprintf(os.Stderr, "Error: %v\n", err) + os.Exit(1) + } + fmt.Println("OK") +} + +func run() error { + if *logKey == "" { + return fmt.Errorf("--log-key is required") + } + + // Validate leaf inputs + leafInputs := 0 + if *leafHash != "" { + leafInputs++ + } + if *leaf != "" { + leafInputs++ + } + if *leafFile != "" { + leafInputs++ + } + + if leafInputs != 1 { + return fmt.Errorf("exactly one of --leaf-hash, --leaf, or --leaf-file must be provided") + } + + // Determine leaf hash + var computedLeafHash []byte + var err error + + if *leafHash != "" { + computedLeafHash, err = decodeLeafHash(*leafHash) + if err != nil { + return fmt.Errorf("invalid --leaf-hash: %w", err) + } + } else { + var leafData []byte + if *leaf != "" { + leafData = []byte(*leaf) + } else { + leafData, err = os.ReadFile(*leafFile) + if err != nil { + return fmt.Errorf("failed to read leaf file: %w", err) + } + } + // Apply RFC6962 leaf hashing: SHA256(0x00 || data) + h := rfc6962.DefaultHasher.HashLeaf(leafData) + computedLeafHash = h + } + + // Read proof + var proofBytes []byte + args := flag.Args() + if len(args) > 1 { + return fmt.Errorf("too many arguments; expected at most one proof file") + } + + if len(args) == 1 { + proofBytes, err = os.ReadFile(args[0]) + if err != nil { + return fmt.Errorf("failed to read proof file: %w", err) + } + } else { + proofBytes, err = io.ReadAll(os.Stdin) + if err != nil { + return fmt.Errorf("failed to read proof from stdin: %w", err) + } + } + + return verifyProof(*logKey, *origin, proofBytes, computedLeafHash) +} + +func decodeLeafHash(s string) ([]byte, error) { + // Try hex first (64 chars for SHA256) + if len(s) == 64 { + h, err := hex.DecodeString(s) + if err == nil && len(h) == 32 { + return h, nil + } + } + + // Try base64 + h, err := base64.StdEncoding.DecodeString(s) + if err == nil && len(h) == 32 { + return h, nil + } + + // Try base64 raw (unpadded) + h, err = base64.RawStdEncoding.DecodeString(s) + if err == nil && len(h) == 32 { + return h, nil + } + + return nil, fmt.Errorf("must be 32-byte hex or base64 encoded string") +} + +func verifyProof(logKeyStr, originStr string, proofBytes []byte, leafHash []byte) error { + // 1. Parse log key + verifier, err := note.NewVerifier(strings.TrimSpace(logKeyStr)) + if err != nil { + return fmt.Errorf("failed to parse log key: %w", err) + } + + // 2. Unmarshal proof + var p proof.TLogProof + if err := p.Unmarshal(proofBytes); err != nil { + return fmt.Errorf("failed to unmarshal proof: %w", err) + } + + expectedOrigin := originStr + if expectedOrigin == "" { + expectedOrigin = verifier.Name() + } + + // 3. Verify checkpoint signature + // note.Open is strict about trailing newlines. Clean them up. + cpBytes := bytes.TrimRight(p.Checkpoint, "\r\n ") + cpBytes = append(cpBytes, '\n') + + checkpoint, _, _, err := log.ParseCheckpoint(cpBytes, expectedOrigin, verifier) + if err != nil { + return fmt.Errorf("failed to verify checkpoint: %w", err) + } + + // 4. Verify inclusion proof + hashes := make([][]byte, len(p.Hashes)) + for i, h := range p.Hashes { + hashes[i] = h[:] + } + + // Convert root hash to slice + rootHash := checkpoint.Hash + + err = merkleproof.VerifyInclusion(rfc6962.DefaultHasher, p.Index, checkpoint.Size, leafHash, hashes, rootHash) + if err != nil { + return fmt.Errorf("inclusion proof verification failed: %w", err) + } + + return nil +} diff --git a/cmd/tlog-verify/main_test.go b/cmd/tlog-verify/main_test.go new file mode 100644 index 0000000..bce2595 --- /dev/null +++ b/cmd/tlog-verify/main_test.go @@ -0,0 +1,183 @@ +// Copyright 2026 Google LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "os" + "path/filepath" + "testing" + + "github.com/transparency-dev/merkle/rfc6962" +) + +const ( + testLogKey = "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" + testOrigin = "go.sum database tree" + // RFC6962 leaf hash for tessera@v1.0.0 + testLeafHashHex = "0fa57c511c3b2ffcc0a05ad63172568d265aaf9844e9b636a0978795396f2ab1" +) + +func TestVerifyProof(t *testing.T) { + proofPath := filepath.Join("testdata", "tessera-v1.0.0.tlog-proof") + proofBytes, err := os.ReadFile(proofPath) + if err != nil { + t.Fatalf("failed to read test proof file: %v", err) + } + + leafHash, err := decodeLeafHash(testLeafHashHex) + if err != nil { + t.Fatalf("failed to decode leaf hash: %v", err) + } + + wrongLeafHash := make([]byte, len(leafHash)) + copy(wrongLeafHash, leafHash) + wrongLeafHash[0] ^= 0xFF + + wrongLogKey := "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn9" + + corruptedProof := make([]byte, len(proofBytes)) + copy(corruptedProof, proofBytes) + corruptedProof = corruptedProof[:len(corruptedProof)-50] + + proofWithNewlines := append(proofBytes, []byte("\n\n\n")...) + + tests := []struct { + name string + logKey string + origin string + proof []byte + leafHash []byte + wantErr bool + }{ + { + name: "success", + logKey: testLogKey, + origin: testOrigin, + proof: proofBytes, + leafHash: leafHash, + wantErr: false, + }, + { + name: "wrong leaf hash", + logKey: testLogKey, + origin: testOrigin, + proof: proofBytes, + leafHash: wrongLeafHash, + wantErr: true, + }, + { + name: "wrong log key", + logKey: wrongLogKey, + origin: testOrigin, + proof: proofBytes, + leafHash: leafHash, + wantErr: true, + }, + { + name: "corrupted proof", + logKey: testLogKey, + origin: testOrigin, + proof: corruptedProof, + leafHash: leafHash, + wantErr: true, + }, + { + name: "success with trailing newlines", + logKey: testLogKey, + origin: testOrigin, + proof: proofWithNewlines, + leafHash: leafHash, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := verifyProof(tt.logKey, tt.origin, tt.proof, tt.leafHash) + if (err != nil) != tt.wantErr { + t.Errorf("verifyProof() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestDecodeLeafHash(t *testing.T) { + tests := []struct { + name string + input string + wantErr bool + }{ + { + name: "valid hex", + input: testLeafHashHex, + wantErr: false, + }, + { + name: "valid base64 padded", + input: "D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=", + wantErr: false, + }, + { + name: "valid base64 unpadded", + input: "D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE", + wantErr: false, + }, + { + name: "invalid length hex", + input: testLeafHashHex + "00", + wantErr: true, + }, + { + name: "invalid chars hex", + input: testLeafHashHex[:63] + "g", + wantErr: true, + }, + { + name: "invalid base64", + input: "invalid-base64-string!!!", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := decodeLeafHash(tt.input) + if (err != nil) != tt.wantErr { + t.Errorf("decodeLeafHash() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !tt.wantErr && len(got) != 32 { + t.Errorf("decodeLeafHash() got length = %d, want 32", len(got)) + } + }) + } +} + +func TestVerifyProofWithRawLeaf(t *testing.T) { + // Tessera raw leaf data + rawLeaf := []byte("github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE=\ngithub.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU=\n") + computedHash := rfc6962.DefaultHasher.HashLeaf(rawLeaf) + + proofPath := filepath.Join("testdata", "tessera-v1.0.0.tlog-proof") + proofBytes, err := os.ReadFile(proofPath) + if err != nil { + t.Fatalf("failed to read test proof file: %v", err) + } + + err = verifyProof(testLogKey, testOrigin, proofBytes, computedHash) + if err != nil { + t.Errorf("expected verification with computed leaf hash to succeed, got: %v", err) + } +} diff --git a/cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof b/cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof new file mode 100644 index 0000000..00f5c57 --- /dev/null +++ b/cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof @@ -0,0 +1,34 @@ +c2sp.org/tlog-proof@v1 +index 43930254 +Q2cuq1e21q4UC1RQ6wtmXmCxk2q3Wqz/yFvD12P2KSM= +VdgHwjNYSv9fZVxvYzn8kySGvrjqeCnzdJqJILieWf4= +ARfBpZjsj3LSP42V4xBVdCKbHVa4WXSbuFAa0rUSCVQ= +0VYgz0Vmgz6jOM8H6edZBWHtO6+R7tPvN4EOwwRRSws= +vq+ifloynXE+ORFC1wymQT0cpNIJA1tqg2mQpA55+kc= +SCRewH6vHE1/Vwkt5yEW8xT7il0WbWltXjFIVqlGtQQ= +p//fIG8jgZie4MMwjHF7quCIJ4hErr7U4at0HV34MZQ= +D3K5YdBlxQcklrgF8vSbDyT05J5/mA9lzuhhp72uSOk= +jeYlYyH9FhYGwu+ZJmfPr8GvSNdgrydwqmJgHsygoR0= +p6RFgfGhu8Uuy0LyyZdI4MrSPOZkMe+ycwWJFfr8zTI= +AMZsxrVKBPSe8nSNVVCTyTxWns0CiNbChG/FoiSJWuM= +e+rtSmK5Pd1K5LgFwj7VSo5XJXOcq7OOcqPVZn1hqeM= +expmv1e6XiGr5NMUjMRkSZijlcBx+fZcpqQmUnawhOY= ++Wuic0YARH84k80/Q+KJIbhRCldxG8npjLFiHMLtEpo= +NOMeJqlyUxFXUKYRI/1YqAF4WJBfXJr8UM/SlWGqxgY= +Lm6+TAlLb2lvUs/3unZ2t6RSmJw8RO+WuEuUbAw3QEc= +Jhh2EDG15gDBoLmLiF88lVTgd+uvx3L0xczb8Y3kSq8= +taenaiKqtYMXS3gDzIF3q8VZzqAXqftHqL9BC39njaw= +kZNKypGwEANnt1+msLINnqrIrwX+0MGZUTTKXTfbloI= +A4NJSymjVJ5dvGPaGC3Gj04x8qVRKYfh0pP24mwd6Yk= +KQq808D9W4NUgr4ip+rF/RCyAUERYKKCwKiiAJfaFOc= +I3EVN3zM2rDjs5Q06Zr5gxhg+ksnX2h77E75uL+h3aI= +7iNSYSDhMeRkeV7r9krKbKelNPiqDCJU1i6xAn/Fbuw= +MYqdo6zSjxaAn+29EEjNRbPYm0myB3bheu+HTZIAbVY= +S7olT9TPLXk+bbawbV3sAzWMmhcpWrtjbw++9ZTiyn8= +xJ20xXM4QItt5vxFOtolZ5l18p7ej1+RimNkgWmoRFM= + +go.sum database tree +58253265 +lIyLAEe4zJUQAda6pFFg3yPOf7j1SgfMEDrpgoX39JU= + +— sum.golang.org Az3grkvBHbFcpEFQ3BhGlktgB7pcswIW+ez91eWY6rNPtWfAey8bJO2rVoG2yO5zXvgiaikWVHqon+e14JhA+WXvpAY= From 24a52e0ab86708fbcb06740f0f560cb91d9bd154 Mon Sep 17 00:00:00 2001 From: Martin Hutchinson Date: Tue, 28 Jul 2026 16:03:03 +0000 Subject: [PATCH 2/3] Woodpecker-web now allows exporting tlog-proof bundles that can be verified by the new command Update README for woodpecker: screenshot of new feature, and point it to the verification tool --- sumdb/proxy.go | 2 + woodpecker-web/README.md | 11 + woodpecker-web/index.html | 533 +++++++++++++++++++++++- woodpecker-web/woodpecker-web-proof.png | Bin 0 -> 152002 bytes 4 files changed, 529 insertions(+), 17 deletions(-) create mode 100644 woodpecker-web/woodpecker-web-proof.png diff --git a/sumdb/proxy.go b/sumdb/proxy.go index 98c0bb0..38a3483 100644 --- a/sumdb/proxy.go +++ b/sumdb/proxy.go @@ -87,6 +87,8 @@ func newReverseProxy(opts ProxyOpts) *httputil.ReverseProxy { } else if after, ok := strings.CutPrefix(inPath, tlogEntriesPrefix); ok { o := after r.Out.URL.Path = fmt.Sprintf("%s%s", sumDBTileDataPrefix, o) + } else if strings.HasPrefix(inPath, "/tile/8/") { + r.Out.URL.Path = inPath } else if after, ok := strings.CutPrefix(inPath, tlogTilePrefix); ok { o := after r.Out.URL.Path = fmt.Sprintf("%s%s", sumDBTilePrefix, o) diff --git a/woodpecker-web/README.md b/woodpecker-web/README.md index 0e1f1b6..2af7b82 100644 --- a/woodpecker-web/README.md +++ b/woodpecker-web/README.md @@ -26,9 +26,20 @@ The tiles are expected to be formatted as a stream of Length-Value Payloads (LVP - **Entry Browser**: Lists entries with their index and size. - **Jump to Index**: Quickly navigate to a specific entry by index. - **Detail Modal**: Inspect entries in both interpreted (text/JSON) and raw hex formats. +- **Proof Exporter**: Generate and export a `tlog-proof` bundle for any entry, with a copyable verification command for `tlog-verify`. ### For Log Operators - **Customizable**: Contains a `LOG_CUSTOMIZER` object in the script to allow custom rendering of log entries to fit your specific log schema. +## Offline Proof Verification + +While Woodpecker Web is a convenient tool for browsing log entries, it runs in the browser and does not perform cryptographic verification of the log's integrity or the inclusion of entries. + +For security-sensitive operations, you can export a `tlog-proof` bundle for any entry and verify it offline. + +![Screenshot of Woodpecker Web Proof Export](./woodpecker-web-proof.png) + +The export dialog allows you to download both the `tlog-proof` bundle and the raw leaf data file. The proof can then be verified offline using the [tlog-verify](../cmd/tlog-verify) command-line tool. The dialog provides the exact command-line invocation to verify the proof using either the downloaded leaf file (recommended, as it verifies the actual content) or the pre-computed leaf hash. + ## Usage Copy `index.html` to the root of your `tlog-tiles` directory (next to `./checkpoint`, `./tile`, etc.). Customize the leaf renderer if viewing the bytes as a string isn't what you want. diff --git a/woodpecker-web/index.html b/woodpecker-web/index.html index cb5a2b4..8b4092e 100644 --- a/woodpecker-web/index.html +++ b/woodpecker-web/index.html @@ -12,7 +12,7 @@ .custom-scrollbar::-webkit-scrollbar { width: 6px; } .custom-scrollbar::-webkit-scrollbar-track { background: transparent; } .custom-scrollbar::-webkit-scrollbar-thumb { background: #334155; border-radius: 10px; } - + @keyframes pulse-soft { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } @@ -26,7 +26,7 @@ .jump-highlight { animation: highlight-fade 2s ease-out forwards; } - + #sidebar { transition: transform 0.3s ease-in-out; } @media (max-width: 768px) { #sidebar.hidden-mobile { transform: translateX(-100%); } @@ -168,7 +168,7 @@

Entry Inspector

- +
@@ -179,7 +179,7 @@

Entry Inspector

--
- + @@ -187,7 +187,70 @@

Entry Inspector

Payload: 0 bytes
- +
+ + +
+
+
+ + + + @@ -198,6 +261,13 @@

Entry Inspector

* Edit this object to tune Woodpecker Web for your specific log's leaf data. ******************************************************************************/ const LOG_CUSTOMIZER = { + /** + * logKey + * The public verifier key for the log (format: name+hash+key). + * If provided, it will be pre-populated in the export verification command. + */ + logKey: "", + /** * renderLogEntry * @param {Uint8Array} bytes - The raw binary payload for a single log entry. @@ -312,7 +382,7 @@

Entry Inspector

async fetchTile(idx, targetIndex = null) { const encodedPath = this.formatTileIndex(idx); let url = `${this.config.tilePath}${encodedPath}`; - + const isFullTile = (idx + 1) * this.config.tileSize <= this.state.treeSize; if (!isFullTile) { const leavesCount = this.state.treeSize % this.config.tileSize; @@ -326,7 +396,7 @@

Entry Inspector

const res = await fetch(url); if (!res.ok) throw new Error(`Tile ${idx} not found at ${url}`); const buffer = await res.arrayBuffer(); - + this.log(`Received buffer: ${buffer.byteLength} bytes`); if (buffer.byteLength === 0) { this.log(`Warning: Received empty buffer for tile ${idx}`, true); @@ -334,7 +404,7 @@

Entry Inspector

const entries = this.parseLVP(new Uint8Array(buffer)); this.log(`Parsed ${entries.length} entries from uint16 stream`); - + this.renderEntries(entries, idx, targetIndex); } catch (e) { this.log(`Tile loading error: ${e.message}`, true); @@ -350,7 +420,7 @@

Entry Inspector

try { const length = dataView.getUint16(pointer, false); const start = pointer + 2; - + if (start + length > uint8Array.length) { this.log(`LVP Truncation: Expected ${length} bytes, but only ${uint8Array.length - start} remain.`, true); break; @@ -363,20 +433,20 @@

Entry Inspector

break; } } - + if (pointer < uint8Array.length && uint8Array.length - pointer > 0) { this.log(`Trailing data: ${uint8Array.length - pointer} bytes remain unparsed.`); } - + return records; }, renderEntries(records, tileIdx, targetIndex = null) { const container = document.getElementById('entries-container'); container.innerHTML = ''; - + document.getElementById('entries-subtitle').textContent = `Binary Stream Viewer | Tile #${tileIdx}`; - + if (records.length === 0) { container.innerHTML = `
@@ -396,11 +466,11 @@

Entry Inspector

const div = document.createElement('div'); div.id = `entry-${globalIdx}`; div.className = "group flex items-center justify-between p-3 bg-slate-900 border border-slate-800 rounded-xl hover:border-orange-500/50 cursor-pointer transition-all shadow-sm"; - + const interpreted = LOG_CUSTOMIZER.renderLogEntry(record); - + div.onclick = () => this.showDetail(globalIdx, record); - + if (globalIdx === targetIndex) { div.classList.add('jump-highlight'); targetElement = div; @@ -434,6 +504,7 @@

Entry Inspector

showDetail(idx, buffer) { this.state.currentEntryBytes = buffer; + this.state.currentIndex = idx; this.setInspectorTab('interpreted'); document.getElementById('detail-index').textContent = `#${idx}`; document.getElementById('detail-data').textContent = LOG_CUSTOMIZER.renderLogEntry(buffer); @@ -442,7 +513,7 @@

Entry Inspector

document.getElementById('detail-offset').textContent = buffer.byteLength; document.getElementById('detail-overlay').classList.remove('hidden'); }, - + showSignatureDetail(identity, sig) { document.getElementById('sig-identity').textContent = identity; document.getElementById('sig-data').textContent = sig; @@ -493,6 +564,161 @@

Local Origin Missing

`; }, + async exportProof() { + const idx = this.state.currentIndex; + + document.getElementById('proof-overlay').classList.remove('hidden'); + document.getElementById('proof-loading').classList.remove('hidden'); + document.getElementById('proof-content').classList.add('hidden'); + document.getElementById('proof-status-message').classList.remove('hidden'); + document.getElementById('proof-status-message').textContent = "Initializing proof generation..."; + + try { + const cpResponse = await fetch(this.config.checkpointPath); + if (!cpResponse.ok) throw new Error("Failed to fetch checkpoint"); + const cpText = await cpResponse.text(); + + const cpLines = cpText.trim().split('\n'); + if (cpLines.length < 2) { + throw new Error("Malformed checkpoint fetched for proof"); + } + const treeSize = parseInt(cpLines[1], 10); + + const h = Math.round(Math.log2(this.config.tileSize)); + + let logRoot = ""; + const slashIdx = this.config.checkpointPath.lastIndexOf('/'); + if (slashIdx !== -1) { + logRoot = this.config.checkpointPath.substring(0, slashIdx + 1); + } + + const tileCache = {}; + const fetchTileBytes = async (path) => { + if (tileCache[path]) { + return tileCache[path]; + } + this.log(`Proof Gen: Fetching tile ${path}`); + document.getElementById('proof-status-message').textContent = `Fetching tile ${path}...`; + const res = await fetch(logRoot + path); + if (!res.ok) throw new Error(`Failed to fetch tile ${path}`); + const buf = await res.arrayBuffer(); + const bytes = new Uint8Array(buf); + tileCache[path] = bytes; + return bytes; + }; + + document.getElementById('proof-status-message').textContent = "Calculating proof path..."; + + const proofHashes = await ProofGenerator.generateProof(treeSize, idx, fetchTileBytes, h); + + const leafHashBytes = await computeLeafHash(this.state.currentEntryBytes); + const leafHashB64 = base64Encode(leafHashBytes); + + let proofBundle = "c2sp.org/tlog-proof@v1\n"; + proofBundle += `index ${idx}\n`; + for (const hash of proofHashes) { + proofBundle += base64Encode(hash) + "\n"; + } + proofBundle += "\n"; + proofBundle += cpText; + if (!cpText.endsWith('\n')) { + proofBundle += "\n"; + } + + this.state.currentProofBundle = proofBundle; + this.state.currentLeafHashB64 = leafHashB64; + + document.getElementById('proof-raw').textContent = proofBundle; + + let logKeyVal = LOG_CUSTOMIZER.logKey || ""; + if (!LOG_CUSTOMIZER.logKey) { + try { + const keyRes = await fetch(logRoot + 'key'); + if (keyRes.ok) { + const keyText = await keyRes.text(); + logKeyVal = keyText.trim(); + } + } catch (e) { + // ignore + } + } + + const originName = cpText.split('\n')[0]; + const safeOrigin = originName.replace(/[^a-zA-Z0-9.-]/g, '-').replace(/-+/g, '-'); + const filename = `${safeOrigin}-${idx}.tlog-proof`; + this.state.currentProofFilename = filename; + + const leafFilename = `${safeOrigin}-${idx}.raw`; + this.state.currentLeafFilename = leafFilename; + + const commandFile = `go run github.com/transparency-dev/incubator/cmd/tlog-verify@latest \\\n --log-key "${logKeyVal}" \\\n --origin "${originName}" \\\n --leaf-file "${leafFilename}" \\\n ${filename}`; + + const commandHash = `go run github.com/transparency-dev/incubator/cmd/tlog-verify@latest \\\n --log-key "${logKeyVal}" \\\n --origin "${originName}" \\\n --leaf-hash "${leafHashB64}" \\\n ${filename}`; + + this.state.currentVerifyCommandFile = commandFile; + this.state.currentVerifyCommandHash = commandHash; + + document.getElementById('proof-command-file').textContent = commandFile; + document.getElementById('proof-command-hash').textContent = commandHash; + + document.getElementById('proof-loading').classList.add('hidden'); + document.getElementById('proof-status-message').classList.add('hidden'); + document.getElementById('proof-content').classList.remove('hidden'); + + } catch (e) { + this.log(`Proof Gen Failed: ${e.message}`, true); + document.getElementById('proof-loading').classList.add('hidden'); + document.getElementById('proof-status-message').textContent = `Failed: ${e.message}`; + document.getElementById('proof-status-message').classList.remove('text-slate-400'); + document.getElementById('proof-status-message').classList.add('text-red-400', 'font-bold'); + } + }, + + closeProof() { + document.getElementById('proof-overlay').classList.add('hidden'); + }, + + copyProof() { + navigator.clipboard.writeText(this.state.currentProofBundle); + this.log("Proof copied to clipboard"); + }, + + downloadProof() { + const blob = new Blob([this.state.currentProofBundle], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = this.state.currentProofFilename || `proof-${this.state.currentIndex}.tlog-proof`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + this.log("Proof downloaded"); + }, + + downloadLeaf() { + const blob = new Blob([this.state.currentEntryBytes], { type: 'application/octet-stream' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = this.state.currentLeafFilename || `leaf-${this.state.currentIndex}.raw`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + this.log("Leaf downloaded"); + }, + + copyCommandFile() { + navigator.clipboard.writeText(this.state.currentVerifyCommandFile); + this.log("File verification command copied to clipboard"); + }, + + copyCommandHash() { + navigator.clipboard.writeText(this.state.currentVerifyCommandHash); + this.log("Hash verification command copied to clipboard"); + }, + setupListeners() { document.getElementById('search-input').addEventListener('keypress', (e) => { if (e.key === 'Enter') { @@ -506,6 +732,279 @@

Local Origin Missing

} }; + /******************************************************************************* + * 🧮 Merkle Proof Generation Helpers (ported from golang.org/x/mod/sumdb/tlog) + ******************************************************************************/ + function maxpow2(n) { + let l = 0; + let k = 1n; + while (k * 2n < n) { + k *= 2n; + l++; + } + return { k, l }; + } + + function storedHashIndex(level, n) { + level = BigInt(level); + n = BigInt(n); + for (let l = level; l > 0n; l--) { + n = 2n * n + 1n; + } + let i = 0n; + while (n > 0n) { + i += n; + n >>= 1n; + } + return i + level; + } + + function splitStoredHashIndex(index) { + index = BigInt(index); + let n = index / 2n; + let indexN = storedHashIndex(0, n); + if (indexN > index) { + throw new Error("bad math"); + } + while (true) { + let tz = BigInt(trailingZeros64(n + 1n)); + let x = indexN + 1n + tz; + if (x > index) { + break; + } + n++; + indexN = x; + } + let level = Number(index - indexN); + return { level, n: n >> BigInt(level) }; + } + + function trailingZeros64(n) { + if (n === 0n) return 64; + let count = 0; + while ((n & 1n) === 0n) { + count++; + n >>= 1n; + } + return count; + } + + function tileForIndex(h, index) { + h = BigInt(h); + index = BigInt(index); + let { level, n } = splitStoredHashIndex(index); + level = BigInt(level); + let L = level / h; + let levelWithinTile = level - L * h; + let N = (n << levelWithinTile) >> h; + let nWithinTile = n - ((N << h) >> levelWithinTile); + let W = (nWithinTile + 1n) << levelWithinTile; + + const HashSize = 32n; + let start = (nWithinTile << levelWithinTile) * HashSize; + let end = ((nWithinTile + 1n) << levelWithinTile) * HashSize; + + return { + tile: { H: Number(h), L: Number(L), N: N, W: Number(W) }, + start: Number(start), + end: Number(end) + }; + } + + function tilePath(tile) { + let n = BigInt(tile.N); + const pathBase = 1000n; + let nStr = (n % pathBase).toString().padStart(3, '0'); + while (n >= pathBase) { + n /= pathBase; + nStr = (n % pathBase).toString().padStart(3, '0') + '/' + nStr; + } + const parts = nStr.split('/'); + for (let i = 0; i < parts.length - 1; i++) { + parts[i] = 'x' + parts[i]; + } + nStr = parts.join('/'); + + let pStr = ""; + let wFull = 2n ** BigInt(tile.H); + if (BigInt(tile.W) !== wFull) { + pStr = `.p/${tile.W}`; + } + let L = tile.L === -1 ? "data" : tile.L.toString(); + return `tile/${tile.H}/${L}/${nStr}${pStr}`; + } + + function tileParent(t, k, n) { + let tile = { ...t }; + tile.L += k; + tile.N = BigInt(tile.N) >> BigInt(k * tile.H); + tile.W = 1 << tile.H; + + let max = BigInt(n) >> BigInt(tile.L * tile.H); + let wBig = BigInt(tile.W); + let nShift = BigInt(tile.N) << BigInt(tile.H); + if (nShift + wBig >= max) { + if (nShift >= max) { + return null; + } + tile.W = Number(max - nShift); + } + return tile; + } + + async function nodeHash(left, right) { + const buf = new Uint8Array(1 + 32 + 32); + buf[0] = 0x01; + buf.set(left, 1); + buf.set(right, 1 + 32); + const hashBuffer = await crypto.subtle.digest('SHA-256', buf); + return new Uint8Array(hashBuffer); + } + + async function subTreeHash(lo, hi, hashes) { + lo = BigInt(lo); + hi = BigInt(hi); + let numTree = 0; + let tempLo = lo; + while (tempLo < hi) { + let { k } = maxpow2(hi - tempLo + 1n); + tempLo += k; + numTree++; + } + + if (hashes.length < numTree) { + throw new Error("bad index math in subTreeHash"); + } + + let subHashes = hashes.slice(0, numTree); + let remainingHashes = hashes.slice(numTree); + + let h = subHashes[numTree - 1]; + for (let i = numTree - 2; i >= 0; i--) { + h = await nodeHash(subHashes[i], h); + } + return { hash: h, remaining: remainingHashes }; + } + + async function leafProof(lo, hi, n, hashes) { + lo = BigInt(lo); + hi = BigInt(hi); + n = BigInt(n); + + if (lo + 1n === hi) { + return { proof: [], remaining: hashes }; + } + + let { k } = maxpow2(hi - lo); + let p, th, res; + if (n < lo + k) { + res = await leafProof(lo, lo + k, n, hashes); + p = res.proof; + res = await subTreeHash(lo + k, hi, res.remaining); + th = res.hash; + hashes = res.remaining; + } else { + res = await subTreeHash(lo, lo + k, hashes); + th = res.hash; + res = await leafProof(lo + k, hi, n, res.remaining); + p = res.proof; + hashes = res.remaining; + } + p.push(th); + return { proof: p, remaining: hashes }; + } + + async function computeLeafHash(dataBytes) { + const prefixed = new Uint8Array(1 + dataBytes.length); + prefixed[0] = 0x00; + prefixed.set(dataBytes, 1); + const hashBuffer = await crypto.subtle.digest('SHA-256', prefixed); + return new Uint8Array(hashBuffer); + } + + function base64Encode(bytes) { + let binary = ''; + const len = bytes.byteLength; + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]); + } + return window.btoa(binary); + } + + async function tileHash(data) { + if (data.length === 0) { + throw new Error("bad math in tileHash"); + } + const HashSize = 32; + if (data.length === HashSize) { + return data; + } + const n = data.length / 2; + const left = await tileHash(data.slice(0, n)); + const right = await tileHash(data.slice(n)); + return await nodeHash(left, right); + } + + const ProofGenerator = { + async generateProof(treeSize, index, fetchTileBytes, h) { + const indexes = leafProofIndex(0, treeSize, index); + const hashes = []; + for (const idx of indexes) { + const { tile, start, end } = tileForIndex(h, idx); + const actualTile = tileParent(tile, 0, treeSize); + if (!actualTile) { + throw new Error(`Index ${idx} not in tree of size ${treeSize}`); + } + const path = tilePath(actualTile); + const tileData = await fetchTileBytes(path); + if (tileData.length < end) { + throw new Error(`Tile data too short for index ${idx}`); + } + const rawHashData = tileData.slice(start, end); + const singleHash = await tileHash(rawHashData); + hashes.push(singleHash); + } + const { proof } = await leafProof(0, treeSize, index, hashes); + return proof; + } + }; + + function leafProofIndex(lo, hi, n, need = []) { + lo = BigInt(lo); + hi = BigInt(hi); + n = BigInt(n); + if (!(lo <= n && n < hi)) { + throw new Error("bad math in leafProofIndex"); + } + if (lo + 1n === hi) { + return need; + } + let { k } = maxpow2(hi - lo); + if (n < lo + k) { + need = leafProofIndex(lo, lo + k, n, need); + need = subTreeIndex(lo + k, hi, need); + } else { + need = subTreeIndex(lo, lo + k, need); + need = leafProofIndex(lo + k, hi, n, need); + } + return need; + } + + function subTreeIndex(lo, hi, need = []) { + lo = BigInt(lo); + hi = BigInt(hi); + while (lo < hi) { + let { k, l } = maxpow2(hi - lo + 1n); + if ((lo & (k - 1n)) !== 0n) { + throw new Error("bad math in subTreeIndex"); + } + let level = l; + need.push(storedHashIndex(level, lo >> BigInt(level))); + lo += k; + } + return need; + } + window.onload = () => app.init(); diff --git a/woodpecker-web/woodpecker-web-proof.png b/woodpecker-web/woodpecker-web-proof.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8a263b1c32ba5571f600904b6b8992386a268e GIT binary patch literal 152002 zcmZ^Lby$_l7cQ~s?vgGgr9nw4=@dk|rBk}Qk?s%#LApV@yG0r{-Q9gZ^yu;Y?!ABb zxS##)Z)Vn-H7nlr4#D!W;wXrOh!7AEC=#zl6d@p>LBKydcv#>Yyt%~`2ncit2@xS> zC&=A27@apcHuOW*r2ATPX=n+p0muO_+vnX|0+5OJhpcOsIiCce8P_WHB|MlM ztW;H&_zQX4Rwv9+(e}!C)J3La)eTScC>Ks{$9nTaUn6g_We$7&^+9`!4dPA?;i-3t zpO=FY!c$1N}D@+l4 zEcB8EJ>h$y*Axwp<&hOjZpKy43+OacPLcH+WACTb|59*!DUn1UPWirX8 zrGDf2V86ZneOe!Qef#h};WNV0>up9P0=igpBt!zbutHFS+x;sP2rEt(1*k_=04fkd zcyIVqD`T%K{@k0( zSMc%)Uu5Ox`3;_C(8Hjj_~ex}wT^eoftQw!{O#YQ`oxQm3Zl?{Sc>?+8`?85tbp)%SC+Gk742vE{qJ6kBmj$oY~P`pYu@T?&^s^VKWjj1rohp@ zc!3rEvcRYkpI2*>Tn|d|q6%x|p8k*BNs?V+WERV%Wqf;3hZRaZTsqQFh4Wd=GmHFX ziY+XVadeNrZlZwFpw1kUn}1;RC9|KhK0I_f!&w?B{`v5?*}BPqDoeCLc_)FWM7UN2 zpii#?12*V6;2WOjm;6^6A6m%mTi~(tEEzloh2K4)&Eb=il2X+f!@uQUv)W#c4CTe^2e5NtOvKBrpHN^`Arf08-BSHF8F*7a=GEyLmz5 zFC)`NgWTKNkZ2(&k!d%NfW(@N{I40wLutc6*5g2Nz&3?ophe4W%luZ_&+(hEp%!4h z38A(7yi8vH+{_FdNQmd7pXLS;8m$wZyKD zR-hBH;3ow2bCWA0-WHenLd2w3zI0=a>aKMU>*1ahB0=avAJps6Zmhz+@2ZsZ_2BWC z3RkZ*8os`v(^&~vYYSPK%~lT_&M}!mr9M1D*d+cfqZ=8NkREz0qY`G3IwuB~{d;YJ z6s>GA!zecG{`K&~-OEc~)fcgc~=Wh&_|m;b6|INL__O$j3=&3|E}%)6tKjo#7x1zGMrx3|{x`yr5q` z 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 O5_M&5r6NVkp#K3wj12Pt literal 0 HcmV?d00001 From f33a1190445c1be7c8b9a2c133a39759835e521d Mon Sep 17 00:00:00 2001 From: Martin Hutchinson Date: Thu, 30 Jul 2026 13:44:45 +0000 Subject: [PATCH 3/3] Reference woodpecker-web from tlog-verify --- cmd/tlog-verify/README.md | 46 +++++++------------ cmd/tlog-verify/main_test.go | 11 +++-- .../go.sum-database-tree-43930254.raw | 2 + ... go.sum-database-tree-43930254.tlog-proof} | 0 4 files changed, 25 insertions(+), 34 deletions(-) create mode 100644 cmd/tlog-verify/testdata/go.sum-database-tree-43930254.raw rename cmd/tlog-verify/testdata/{tessera-v1.0.0.tlog-proof => go.sum-database-tree-43930254.tlog-proof} (100%) diff --git a/cmd/tlog-verify/README.md b/cmd/tlog-verify/README.md index 1337d94..bdd5878 100644 --- a/cmd/tlog-verify/README.md +++ b/cmd/tlog-verify/README.md @@ -32,56 +32,42 @@ If raw leaf data is provided (`--leaf` or `--leaf-file`), it is hashed using the ### Example: Go Checksum DB (SumDB) -The Go Checksum DB (`sum.golang.org`) is a transparency log. We can verify that `github.com/transparency-dev/tessera@v1.0.0` is included in it using the saved proof in `testdata/tessera-v1.0.0.tlog-proof`. +The Go Checksum DB (`sum.golang.org`) is a transparency log. You can use the [Woodpecker Web](../../woodpecker-web) viewer to browse the log and export proof and leaf files. + +For example, for entry `#43930254` (which contains `github.com/transparency-dev/tessera@v1.0.0`), you can export: +1. The proof bundle: `go.sum-database-tree-43930254.tlog-proof` +2. The raw leaf file: `go.sum-database-tree-43930254.raw` + +For convenience, these files are checked into the repository in the `testdata` directory. The public key for `sum.golang.org` is: `sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8` Since Go SumDB uses `go.sum database tree` as the origin name in its checkpoints (which differs from the key name `sum.golang.org`), we must pass the `--origin` flag. -#### Verification using pre-computed leaf hash +#### Verification using raw leaf file (Recommended) -The RFC6962 leaf hash for the Tessera entry is: -* Hex: `0fa57c511c3b2ffcc0a05ad63172568d265aaf9844e9b636a0978795396f2ab1` -* Base64: `D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=` +This verifies that the actual content of the leaf matches what is in the log: ```shell go run ./cmd/tlog-verify \ --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ --origin "go.sum database tree" \ - --leaf-hash "D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=" \ - cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof + --leaf-file cmd/tlog-verify/testdata/go.sum-database-tree-43930254.raw \ + cmd/tlog-verify/testdata/go.sum-database-tree-43930254.tlog-proof ``` -#### Verification using raw leaf data +#### Verification using pre-computed leaf hash -The raw leaf data in SumDB for this entry is: -``` -github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE= -github.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU= -``` -Note: The data must include the trailing newline. +This only verifies that the hash is present in the log (it does not verify the leaf content): -Using `--leaf` with literal newlines in quotes (to prevent shell from stripping the trailing newline): -```shell -go run ./cmd/tlog-verify \ - --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ - --origin "go.sum database tree" \ - --leaf "github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE= -github.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU= -" \ - cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof -``` +The RFC6962 leaf hash for this Tessera entry is `D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=` (base64). -Or using `--leaf-file`: ```shell -# Create a file containing the raw leaf data (including the trailing newline) -printf "github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE=\ngithub.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU=\n" > /tmp/leaf.txt - go run ./cmd/tlog-verify \ --log-key "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8" \ --origin "go.sum database tree" \ - --leaf-file /tmp/leaf.txt \ - cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof + --leaf-hash "D6V8URw7L/zAoFrWMXJWjSZar5hE6bY2oJeHlTlvKrE=" \ + cmd/tlog-verify/testdata/go.sum-database-tree-43930254.tlog-proof ``` diff --git a/cmd/tlog-verify/main_test.go b/cmd/tlog-verify/main_test.go index bce2595..aa77376 100644 --- a/cmd/tlog-verify/main_test.go +++ b/cmd/tlog-verify/main_test.go @@ -30,7 +30,7 @@ const ( ) func TestVerifyProof(t *testing.T) { - proofPath := filepath.Join("testdata", "tessera-v1.0.0.tlog-proof") + proofPath := filepath.Join("testdata", "go.sum-database-tree-43930254.tlog-proof") proofBytes, err := os.ReadFile(proofPath) if err != nil { t.Fatalf("failed to read test proof file: %v", err) @@ -166,11 +166,14 @@ func TestDecodeLeafHash(t *testing.T) { } func TestVerifyProofWithRawLeaf(t *testing.T) { - // Tessera raw leaf data - rawLeaf := []byte("github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE=\ngithub.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU=\n") + rawLeafPath := filepath.Join("testdata", "go.sum-database-tree-43930254.raw") + rawLeaf, err := os.ReadFile(rawLeafPath) + if err != nil { + t.Fatalf("failed to read test raw leaf file: %v", err) + } computedHash := rfc6962.DefaultHasher.HashLeaf(rawLeaf) - proofPath := filepath.Join("testdata", "tessera-v1.0.0.tlog-proof") + proofPath := filepath.Join("testdata", "go.sum-database-tree-43930254.tlog-proof") proofBytes, err := os.ReadFile(proofPath) if err != nil { t.Fatalf("failed to read test proof file: %v", err) diff --git a/cmd/tlog-verify/testdata/go.sum-database-tree-43930254.raw b/cmd/tlog-verify/testdata/go.sum-database-tree-43930254.raw new file mode 100644 index 0000000..e61bf4e --- /dev/null +++ b/cmd/tlog-verify/testdata/go.sum-database-tree-43930254.raw @@ -0,0 +1,2 @@ +github.com/transparency-dev/tessera v1.0.0 h1:4OT1V9xJLa5NnYlFWWlCdZkCm18/o12rdd+bCTje7XE= +github.com/transparency-dev/tessera v1.0.0/go.mod h1:TLvfjlkbmsmKVEJUtzO2eb9Q2IBnK3EJ0dI4G0oxEOU= diff --git a/cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof b/cmd/tlog-verify/testdata/go.sum-database-tree-43930254.tlog-proof similarity index 100% rename from cmd/tlog-verify/testdata/tessera-v1.0.0.tlog-proof rename to cmd/tlog-verify/testdata/go.sum-database-tree-43930254.tlog-proof