...
1
2
3
4
5 package tlog
6
7 import (
8 "encoding/json"
9 "fmt"
10 "io"
11 "net/http"
12 "net/url"
13 "os"
14 "testing"
15 )
16
17 func TestCertificateTransparency(t *testing.T) {
18
19
20
21
22 if testing.Short() {
23 t.Skip("skipping in -short mode")
24 }
25
26 var root ctTree
27 httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-sth", &root)
28
29 var leaf ctEntries
30 httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-entries?start=10000&end=10000", &leaf)
31 hash := RecordHash(leaf.Entries[0].Data)
32
33 var rp ctRecordProof
34 httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-proof-by-hash?tree_size="+fmt.Sprint(root.Size)+"&hash="+url.QueryEscape(hash.String()), &rp)
35
36 err := CheckRecord(rp.Proof, root.Size, root.Hash, 10000, hash)
37 if err != nil {
38 t.Fatal(err)
39 }
40
41 var tp ctTreeProof
42 httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-sth-consistency?first=3654490&second="+fmt.Sprint(root.Size), &tp)
43
44 oh, _ := ParseHash("AuIZ5V6sDUj1vn3Y1K85oOaQ7y+FJJKtyRTl1edIKBQ=")
45 err = CheckTree(tp.Proof, root.Size, root.Hash, 3654490, oh)
46 if err != nil {
47 t.Fatal(err)
48 }
49 }
50
51 type ctTree struct {
52 Size int64 `json:"tree_size"`
53 Hash Hash `json:"sha256_root_hash"`
54 }
55
56 type ctEntries struct {
57 Entries []*ctEntry
58 }
59
60 type ctEntry struct {
61 Data []byte `json:"leaf_input"`
62 }
63
64 type ctRecordProof struct {
65 Index int64 `json:"leaf_index"`
66 Proof RecordProof `json:"audit_path"`
67 }
68
69 type ctTreeProof struct {
70 Proof TreeProof `json:"consistency"`
71 }
72
73 func httpGET(t *testing.T, url string, targ interface{}) {
74 if testing.Verbose() {
75 println()
76 println(url)
77 }
78 resp, err := http.Get(url)
79 if err != nil {
80 t.Fatal(err)
81 }
82 defer resp.Body.Close()
83 data, err := io.ReadAll(resp.Body)
84 if err != nil {
85 t.Fatal(err)
86 }
87 if testing.Verbose() {
88 os.Stdout.Write(data)
89 }
90 err = json.Unmarshal(data, targ)
91 if err != nil {
92 println(url)
93 os.Stdout.Write(data)
94 t.Fatal(err)
95 }
96 }
97
View as plain text