aboutsummaryrefslogtreecommitdiff
path: root/client/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/client.go')
-rw-r--r--client/client.go31
1 files changed, 31 insertions, 0 deletions
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()