diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 100 | 
1 files changed, 42 insertions, 58 deletions
| @@ -2,79 +2,63 @@ package main  import (  	"log" -	"sync"  	"time" -	"git.sr.ht/~benburwell/gosumdbaudit/sumdb" +	"git.sr.ht/~benburwell/gosumdbaudit/monitor" +	// "git.sr.ht/~benburwell/gosumdbaudit/sumdb"  )  func main() { -	dbs := []*database{ -		&database{ -			host: "sum.golang.org", +	mon := monitor.NewMonitor(&monitor.Database{ +		URL: "sum.golang.org", +		Key: "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8", +	}) -			key: "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8", -			// key: "sum.golang.org+033de0ae+BADBADBADBADBADBADBADBADBADBADBADBADBADBADBA", - -			pollInterval: 10 * time.Second, -		}, -	} -	var wg sync.WaitGroup -	wg.Add(len(dbs)) -	for _, db := range dbs { -		go func(db *database) { -			defer wg.Done() -			if err := monitor(db); err != nil { -				log.Printf("AUDIT FAILED: %s", err.Error()) -				return -			} -		}(db) +	if err := mon.Watch(10 * time.Second); err != nil { +		log.Printf("AUDIT FAILED: %v", err)  	} -	wg.Wait()  } -func monitor(db *database) error { -	log.Printf("starting monitor for %s", db.host) +// func monitor(db *database) error { +// 	log.Printf("starting monitor for %s", db.host) -	client := sumdb.NewClient(db) +// 	client := sumdb.NewClient(db) -	lines, err := client.Lookup("golang.org/x/text", "v0.3.0") -	if err != nil { -		return err -	} -	log.Printf("got lines: %s", lines) +// 	tree, err := client.FetchLatest() +// 	if err != nil { +// 		return err +// 	} +// 	log.Printf("got latest: N=%d, Hash=%s", tree.N, tree.Hash) -	// fetch & verify current STH -	// latest, err := client.Latest() -	// if err != nil { -	// 	return err -	// } +// 	if err := client.FetchTreeProof(tree); err != nil { +// 		return err +// 	} -	// fetch all entries in the tree according to the STH -	// entries := client.Entries(nil, latest) +// 	// fetch all entries in the tree according to the STH +// 	// entries := client.Entries(nil, latest) -	// confirm the tree made from the entries produces the same hash as the STH -	// IF NOT: the server has signed invalid data +// 	// confirm the tree made from the entries produces the same hash as the STH +// 	// IF NOT: the server has signed invalid data -	// prev := latest -	for { -		// await a new STH -		// prev = latest -		time.Sleep(db.pollInterval) -		log.Printf("checking %s for new STH...", db.host) -		// awaitNewSTH() +// 	// prev := latest +// 	for { +// 		// await a new STH +// 		// prev = latest +// 		time.Sleep(db.pollInterval) +// 		log.Printf("checking %s for new STH...", db.host) +// 		// awaitNewSTH() -		// latest, err := client.Latest() -		// if err != nil { -		// 	return err -		// } +// 		// latest, err := client.Latest() +// 		// if err != nil { +// 		// 	return err +// 		// } -		// fetch all NEW entries between prev and latest -		// if unavailable for an extended period, this should be viewed as misbehavior -		// entries := client.Entries(prev, latest) +// 		// fetch all NEW entries between prev and latest +// 		// if unavailable for an extended period, this should be viewed as misbehavior +// 		// entries := client.Entries(prev, latest) -		// fetch a consistency proof for the new STH with the previous STH -		// verify consistency proof -		// verify the new entries generate the corresponding elements in the consistency proof -	} -} +// 		// fetch a consistency proof for the new STH with the previous STH +// 		// verify consistency proof +// 		// verify the new entries generate the corresponding elements in the consistency proof +// 	} +// } | 
