diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/add-entry/main.go | 47 | ||||
| -rw-r--r-- | client/client.go | 31 | 
2 files changed, 36 insertions, 42 deletions
| diff --git a/client/add-entry/main.go b/client/add-entry/main.go index 34f6c44..11162e5 100644 --- a/client/add-entry/main.go +++ b/client/add-entry/main.go @@ -9,9 +9,7 @@ import (  	"net/http"  	"github.com/golang/glog" -	"github.com/system-transparency/stfe"  	"github.com/system-transparency/stfe/client" -	"github.com/system-transparency/stfe/server/descriptor"  )  var ( @@ -26,16 +24,16 @@ var (  func main() {  	flag.Parse() -	client, err := setup() +	pname := []byte(*name) +	psum, err := base64.StdEncoding.DecodeString(*checksum)  	if err != nil { -		glog.Fatal(err) +		glog.Fatalf("failed decoding checksum: %v", err)  	} -	pname, psum, err := params() +	client, err := client.NewClientFromPath(*logId, *chain, *key, *operators, &http.Client{}, true)  	if err != nil {  		glog.Fatal(err)  	} -  	sdi, err := client.AddEntry(context.Background(), pname, psum)  	if err != nil {  		glog.Fatalf("add-entry failed: %v", err) @@ -46,41 +44,6 @@ func main() {  		glog.Fatalf("failed encoding valid signed debug info: %v", err)  	}  	fmt.Println(str) -	glog.Flush() -} - -func params() ([]byte, []byte, error) { -	b, err := base64.StdEncoding.DecodeString(*checksum) -	if err != nil { -		return nil, nil, fmt.Errorf("failed decoding checksum: %v", err) -	} -	return []byte(*name), b, nil -} - -func setup() (*client.Client, error) { -	c, err := stfe.LoadChain(*chain) -	if err != nil { -		return nil, err -	} -	k, err := stfe.LoadEd25519SigningKey(*key) -	if err != nil { -		return nil, err -	} - -	ops, err := descriptor.LoadOperators(*operators) -	if err != nil { -		return nil, err -	} - -	id, err := base64.StdEncoding.DecodeString(*logId) -	if err != nil { -		return nil, fmt.Errorf("failed decoding log identifier: %v", err) -	} - -	log, err := descriptor.FindLog(ops, id) -	if err != nil { -		return nil, err -	} -	return client.NewClient(log, &http.Client{}, true, c, &k), nil +	glog.Flush()  } diff --git a/client/client.go b/client/client.go index c2d6407..551eff7 100644 --- a/client/client.go +++ b/client/client.go @@ -39,6 +39,37 @@ func NewClient(log *descriptor.Log, client *http.Client, useHttp bool, chain []*  	}  } +// NewClientFromPath loads necessary data from file before creating a new +// client, namely, a pem-encoded certificate chain, a pem-encoded ed25519 +// private key, and a json-encoded list of log operators (see descriptor). +func NewClientFromPath(logId, chainPath, keyPath, operatorsPath string, cli *http.Client, useHttp bool) (*Client, error) { +	c, err := stfe.LoadChain(chainPath) +	if err != nil { +		return nil, err +	} + +	k, err := stfe.LoadEd25519SigningKey(keyPath) +	if err != nil { +		return nil, err +	} + +	ops, err := descriptor.LoadOperators(operatorsPath) +	if err != nil { +		return nil, err +	} + +	id, err := base64.StdEncoding.DecodeString(logId) +	if err != nil { +		return nil, fmt.Errorf("failed decoding log identifier: %v", err) +	} + +	log, err := descriptor.FindLog(ops, id) +	if err != nil { +		return nil, err +	} +	return NewClient(log, cli, useHttp, c, &k), nil +} +  // AddEntry creates, signs, and adds a new ChecksumV1 entry to the log  func (c *Client) AddEntry(ctx context.Context, name, checksum []byte) (*stfe.StItem, error) {  	leaf, err := stfe.NewChecksumV1(name, checksum).Marshal() | 
