diff options
-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() |