diff options
| -rw-r--r-- | types/cmd/new-namespace/main.go | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/types/cmd/new-namespace/main.go b/types/cmd/new-namespace/main.go new file mode 100644 index 0000000..e338d7c --- /dev/null +++ b/types/cmd/new-namespace/main.go @@ -0,0 +1,56 @@ +// Package main outputs the private and public parts of a new namespace +package main + +import ( +	"flag" +	"fmt" + +	"crypto/ed25519" +	"crypto/rand" +	"encoding/base64" + +	"github.com/golang/glog" +	"github.com/system-transparency/stfe/types" +) + +var ( +	format = flag.String("format", string(types.NamespaceFormatEd25519V1), "namespace format") +) + +func main() { +	flag.Parse() +	defer glog.Flush() + +	switch *format { +	case string(types.NamespaceFormatEd25519V1): +		glog.Infof("generating new ed25519_v1 namespace") +		sk, vk, namespace, err := genEd25519V1Namespace() +		if err != nil { +			glog.Errorf("genEd25519V1Namespace: %v", err) +			break +		} +		fmt.Printf("sk: %s\n", base64.StdEncoding.EncodeToString(sk)) +		fmt.Printf("vk: %s\n", base64.StdEncoding.EncodeToString(vk)) +		fmt.Printf("ed25519_v1: %s\n", base64.StdEncoding.EncodeToString(namespace)) +	default: +		glog.Errorf("unsupported namespace format: %s", format) +	} +} + +// genEd25519V1Namespace generates an Ed25519 secret key, verification key, and +// serialized ed25519_v1 namespace. +func genEd25519V1Namespace() ([]byte, []byte, []byte, error) { +	vk, sk, err := ed25519.GenerateKey(rand.Reader) +	if err != nil { +		return nil, nil, nil, fmt.Errorf("ed25519.GenerateKey: %v", err) +	} +	namespace, err := types.NewNamespaceEd25519V1(vk[:]) +	if err != nil { +		return nil, nil, nil, fmt.Errorf("types.NewNamespaceEd25519V1: %v", err) +	} +	serialized, err := types.Marshal(*namespace) +	if err != nil { +		fmt.Errorf("types.Marshal: %v", err) +	} +	return sk, vk, serialized, nil +} | 
