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 +} |