aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/add-entry/main.go47
-rw-r--r--client/client.go31
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()