diff --git a/cmd/burrow/commands/keys.go b/cmd/burrow/commands/keys.go
index 90adba744d628eaa3cc41cc71975b41f86548160..815167d14ac64f255b8d24bc842e7910d787cc44 100644
--- a/cmd/burrow/commands/keys.go
+++ b/cmd/burrow/commands/keys.go
@@ -6,6 +6,8 @@ import (
 	"fmt"
 	"os"
 
+	"github.com/hyperledger/burrow/deployment"
+
 	"time"
 
 	"io/ioutil"
@@ -151,6 +153,7 @@ func Keys(output Output) func(cmd *cli.Cmd) {
 			keyName := cmd.StringOpt("name", "", "name of key to use")
 			keyAddr := cmd.StringOpt("addr", "", "address of key to use")
 			passphrase := cmd.StringOpt("passphrase", "", "passphrase for encrypted key")
+			keyTemplate := cmd.StringOpt("t template", deployment.DefaultKeysExportFormat, "template for export key")
 
 			cmd.Action = func() {
 				c := grpcKeysClient(output)
@@ -161,7 +164,25 @@ func Keys(output Output) func(cmd *cli.Cmd) {
 					output.Fatalf("failed to export key: %v", err)
 				}
 
-				fmt.Printf("%s\n", resp.GetExport())
+				addr, err := crypto.AddressFromBytes(resp.GetAddress())
+				if err != nil {
+					output.Fatalf("failed to convert address: %v", err)
+				}
+
+				key := deployment.Key{
+					Name:       *keyName,
+					CurveType:  resp.GetCurvetype(),
+					Address:    addr,
+					PublicKey:  resp.GetPublickey(),
+					PrivateKey: resp.GetPrivatekey(),
+				}
+
+				str, err := key.Dump(*keyTemplate)
+				if err != nil {
+					output.Fatalf("failed to template key: %v", err)
+				}
+
+				fmt.Printf("%s\n", str)
 			}
 		})
 
diff --git a/deployment/config.go b/deployment/config.go
index 254f2b4f63fadcd9815d176f2b4e371c69193619..a9bab141b4860612d9c58e4f33cf07a37bd3c10f 100644
--- a/deployment/config.go
+++ b/deployment/config.go
@@ -21,9 +21,12 @@ type Validator struct {
 }
 
 type Key struct {
-	Name    string
-	Address crypto.Address
-	KeyJSON json.RawMessage
+	Name       string
+	Address    crypto.Address
+	CurveType  string
+	PublicKey  []byte
+	PrivateKey []byte
+	KeyJSON    json.RawMessage
 }
 
 type Config struct {
@@ -44,6 +47,18 @@ var templateFuncs template.FuncMap = map[string]interface{}{
 	},
 }
 
+const DefaultKeysExportFormat = `{
+	"CurveType": "<< .CurveType>>",
+	"Address": "<< .Address >>",
+	"PublicKey": "<< hex .PublicKey >>",
+	"PrivateKey": "<< hex .PrivateKey >>"
+}
+`
+
+var DefaultKeyExportTemplate = template.Must(template.New("KeysExport").Funcs(templateFuncs).
+	Delims(LeftTemplateDelim, RightTemplateDelim).
+	Parse(DefaultKeysExportFormat))
+
 func (pkg *Config) Dump(templateName, templateString string) (string, error) {
 	tmpl, err := template.New(templateName).Delims(LeftTemplateDelim, RightTemplateDelim).Funcs(templateFuncs).
 		Parse(templateString)
@@ -58,6 +73,20 @@ func (pkg *Config) Dump(templateName, templateString string) (string, error) {
 	return buf.String(), nil
 }
 
+func (key *Key) Dump(templateString string) (string, error) {
+	tmpl, err := template.New("ExportKey").Delims(LeftTemplateDelim, RightTemplateDelim).Funcs(templateFuncs).
+		Parse(templateString)
+	if err != nil {
+		return "", errors.Wrap(err, "could not export key to template")
+	}
+	buf := new(bytes.Buffer)
+	err = tmpl.Execute(buf, key)
+	if err != nil {
+		return "", err
+	}
+	return buf.String(), nil
+}
+
 func encode(rv reflect.Value, encoder func([]byte) string) string {
 	switch rv.Kind() {
 	case reflect.Slice:
diff --git a/keys/core.go b/keys/core.go
index 49f660d395a9fa8135cfd7350b71447e4617afbe..ee60a52d63c0f872ecd3ccc2792109b56ce21b74 100644
--- a/keys/core.go
+++ b/keys/core.go
@@ -7,8 +7,6 @@ import (
 	"path"
 	"path/filepath"
 	"strings"
-
-	"encoding/json"
 )
 
 const (
@@ -49,10 +47,6 @@ func writeKey(keyDir string, addr, keyJson []byte) ([]byte, error) {
 	return addr, nil
 }
 
-func coreExport(key *Key) ([]byte, error) {
-	return json.Marshal(key)
-}
-
 //----------------------------------------------------------------
 // manage names for keys
 
diff --git a/keys/pbkeys/keys.pb.go b/keys/pbkeys/keys.pb.go
index a099818d370ebfe3db85f66d429ccafa7ed8a008..480306389b777aa7e282a6b54769f5c179c18dc1 100644
--- a/keys/pbkeys/keys.pb.go
+++ b/keys/pbkeys/keys.pb.go
@@ -283,7 +283,10 @@ func (m *ExportRequest) GetAddress() string {
 }
 
 type ExportResponse struct {
-	Export string `protobuf:"bytes,1,opt,name=export" json:"export,omitempty"`
+	Publickey  []byte `protobuf:"bytes,1,opt,name=publickey,proto3" json:"publickey,omitempty"`
+	Privatekey []byte `protobuf:"bytes,2,opt,name=privatekey,proto3" json:"privatekey,omitempty"`
+	Address    []byte `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
+	Curvetype  string `protobuf:"bytes,4,opt,name=curvetype" json:"curvetype,omitempty"`
 }
 
 func (m *ExportResponse) Reset()                    { *m = ExportResponse{} }
@@ -291,9 +294,30 @@ func (m *ExportResponse) String() string            { return proto.CompactTextSt
 func (*ExportResponse) ProtoMessage()               {}
 func (*ExportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
 
-func (m *ExportResponse) GetExport() string {
+func (m *ExportResponse) GetPublickey() []byte {
 	if m != nil {
-		return m.Export
+		return m.Publickey
+	}
+	return nil
+}
+
+func (m *ExportResponse) GetPrivatekey() []byte {
+	if m != nil {
+		return m.Privatekey
+	}
+	return nil
+}
+
+func (m *ExportResponse) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *ExportResponse) GetCurvetype() string {
+	if m != nil {
+		return m.Curvetype
 	}
 	return ""
 }
@@ -933,45 +957,47 @@ var _Keys_serviceDesc = grpc.ServiceDesc{
 func init() { proto.RegisterFile("keys.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 640 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x51, 0x6f, 0xd3, 0x3c,
-	0x14, 0x55, 0x9b, 0x7c, 0xdd, 0x7a, 0xda, 0x4e, 0x1f, 0x06, 0xa6, 0x52, 0x0d, 0x34, 0xf9, 0x85,
-	0x31, 0x89, 0x8a, 0x0d, 0xc4, 0x04, 0x12, 0x42, 0x08, 0xa6, 0xc1, 0x86, 0xc6, 0xd4, 0x49, 0xbc,
-	0xf1, 0x90, 0xae, 0x97, 0xb5, 0x2a, 0x69, 0x43, 0x9c, 0x0c, 0xf2, 0xc0, 0xdf, 0xe3, 0x77, 0x21,
-	0x3b, 0x76, 0x6d, 0x47, 0xeb, 0xa8, 0xc4, 0x9b, 0xef, 0xcd, 0xbd, 0xf7, 0x1c, 0xdf, 0x9c, 0x9c,
-	0x00, 0x53, 0x2a, 0x44, 0x3f, 0x49, 0xe7, 0xd9, 0x9c, 0x35, 0x92, 0xa1, 0x8c, 0xf8, 0x36, 0xc2,
-	0xd3, 0x28, 0x26, 0xd6, 0xc5, 0xda, 0x94, 0x8a, 0x59, 0x14, 0x53, 0xb7, 0xb6, 0x5d, 0xdb, 0x69,
-	0x0e, 0x4c, 0xc8, 0xd7, 0xf0, 0xdf, 0x61, 0x9c, 0x64, 0x05, 0x1f, 0x01, 0x47, 0x34, 0x1b, 0xd0,
-	0xf7, 0x9c, 0x44, 0xc6, 0x1e, 0x00, 0x49, 0x24, 0x44, 0x32, 0x4e, 0x23, 0x61, 0x7a, 0x9c, 0x0c,
-	0xdb, 0x42, 0xf3, 0x22, 0x4f, 0xaf, 0x28, 0x2b, 0x12, 0xea, 0xd6, 0xd5, 0x63, 0x9b, 0x70, 0xe1,
-	0x02, 0x1f, 0xee, 0x21, 0x5a, 0x0a, 0x45, 0x24, 0xf3, 0x99, 0x50, 0x85, 0xd1, 0x68, 0x94, 0x92,
-	0x10, 0x86, 0x97, 0x0e, 0xf9, 0x4b, 0xe0, 0x2c, 0x1f, 0x1a, 0x3a, 0x4b, 0xeb, 0x18, 0x43, 0xa8,
-	0x70, 0x4a, 0x0e, 0xea, 0xcc, 0x5f, 0xa1, 0xa5, 0x7a, 0x35, 0xc8, 0xff, 0x08, 0x92, 0x7c, 0xa8,
-	0x1a, 0xdb, 0x03, 0x79, 0xbc, 0x99, 0x3d, 0x3f, 0xc2, 0xad, 0x0f, 0x71, 0x32, 0x4f, 0xb3, 0xe3,
-	0xf3, 0x4f, 0xa7, 0xab, 0x2e, 0x84, 0x21, 0x94, 0xe5, 0x86, 0x87, 0x3c, 0xf3, 0x5d, 0x6c, 0x94,
-	0x83, 0x56, 0xb8, 0xef, 0x2f, 0x74, 0x4c, 0xed, 0xca, 0x80, 0xd5, 0x8b, 0xfb, 0xf7, 0x0a, 0xaa,
-	0x6f, 0xa5, 0x87, 0xf5, 0x29, 0x15, 0xc3, 0x22, 0x23, 0xd1, 0x0d, 0xd5, 0x32, 0x16, 0x31, 0xff,
-	0x82, 0xce, 0xe1, 0xcf, 0x7f, 0x85, 0x77, 0x6e, 0x17, 0xf8, 0xb7, 0xdb, 0xc1, 0x86, 0x19, 0xaf,
-	0x37, 0xb1, 0x89, 0x06, 0xa9, 0x8c, 0x9e, 0xad, 0x23, 0x9e, 0xa3, 0x75, 0x3e, 0xb9, 0x5c, 0x59,
-	0x87, 0x0e, 0x64, 0xfd, 0x7a, 0x61, 0x04, 0x3e, 0xc1, 0x98, 0x84, 0x88, 0x2e, 0x49, 0x2f, 0xc0,
-	0x84, 0xfc, 0x18, 0xed, 0x12, 0x56, 0xd3, 0xdb, 0x42, 0x53, 0x4c, 0x2e, 0x67, 0x51, 0x96, 0xa7,
-	0xa4, 0x95, 0x63, 0x13, 0x7f, 0xd1, 0xcf, 0x0f, 0x74, 0x3e, 0x53, 0x3a, 0xf9, 0x5a, 0x98, 0x4b,
-	0x78, 0xe5, 0xb5, 0xea, 0x6b, 0xd1, 0xf2, 0xac, 0x5b, 0x79, 0x3a, 0x34, 0x03, 0x8f, 0xa6, 0x4f,
-	0x2b, 0xac, 0xd0, 0xe2, 0x6f, 0xd1, 0x7a, 0x1f, 0x89, 0xb1, 0x81, 0xed, 0x61, 0x7d, 0x1c, 0x89,
-	0xb1, 0x83, 0xba, 0x88, 0x5d, 0x88, 0xba, 0xbf, 0x09, 0x8e, 0x76, 0x39, 0x44, 0x6f, 0x82, 0x21,
-	0x94, 0x5d, 0x7a, 0x82, 0x3a, 0xf3, 0x17, 0x08, 0x4e, 0xa8, 0xb8, 0xe1, 0xab, 0x74, 0x0c, 0xa0,
-	0xee, 0x1b, 0xc0, 0x63, 0xb4, 0x3f, 0x4e, 0x84, 0xd5, 0xc1, 0x7d, 0x04, 0x53, 0x2a, 0xba, 0xb5,
-	0xed, 0x60, 0xa7, 0xb5, 0xdf, 0xea, 0x97, 0xbe, 0xd5, 0x3f, 0xa1, 0x62, 0x20, 0xf3, 0xfc, 0x1d,
-	0x36, 0xde, 0x8c, 0x46, 0xd2, 0xc3, 0x1c, 0x2b, 0xb8, 0xde, 0xca, 0x96, 0x6b, 0x61, 0xff, 0x77,
-	0x88, 0xf0, 0x84, 0x0a, 0xc1, 0x9e, 0x2b, 0xfb, 0xa1, 0x34, 0xca, 0x48, 0x5e, 0x80, 0x19, 0x3c,
-	0xeb, 0x7c, 0xbd, 0xdb, 0x5e, 0x4e, 0xb3, 0x7c, 0x86, 0xe6, 0x59, 0x3e, 0xfc, 0x36, 0xb9, 0xf0,
-	0xba, 0xac, 0x41, 0xd9, 0x2e, 0xd7, 0x78, 0xf6, 0x10, 0x4a, 0x51, 0xb1, 0xc5, 0x43, 0x47, 0xd9,
-	0xbd, 0x3b, 0x7e, 0x52, 0xb7, 0xf4, 0xd1, 0x28, 0xb5, 0xc3, 0xee, 0x9a, 0xe7, 0x9e, 0x96, 0x7a,
-	0x1d, 0x93, 0x56, 0xae, 0xcd, 0x0e, 0xd0, 0x28, 0x6d, 0xc3, 0xd6, 0x7b, 0x36, 0xd2, 0xdb, 0xac,
-	0xa6, 0x35, 0xd0, 0x6b, 0xc0, 0x9a, 0x1c, 0xbb, 0xe7, 0x57, 0x39, 0xc6, 0xb7, 0x74, 0xc0, 0x01,
-	0x1a, 0xe5, 0x27, 0x6d, 0x91, 0x3d, 0x07, 0xb1, 0x8d, 0x95, 0x2f, 0x7f, 0x0f, 0xa1, 0x14, 0x98,
-	0xdd, 0x8a, 0xa3, 0x59, 0xbb, 0x15, 0x4f, 0x83, 0x8f, 0x80, 0x01, 0xc5, 0xf3, 0x2b, 0x52, 0x3f,
-	0xb3, 0xb6, 0xa9, 0x91, 0x51, 0x75, 0x21, 0xbb, 0x08, 0xa5, 0xbe, 0x2a, 0x45, 0x8b, 0xb1, 0x9e,
-	0xf6, 0x9e, 0x60, 0x4d, 0x8b, 0x8b, 0x2d, 0xc8, 0xfa, 0x6a, 0xab, 0x4c, 0x1f, 0x36, 0xd4, 0xef,
-	0xf5, 0xe9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xed, 0x32, 0x21, 0x6c, 0x07, 0x00, 0x00,
+	// 661 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4d, 0x6f, 0xd3, 0x40,
+	0x10, 0x55, 0x62, 0x93, 0x36, 0x2f, 0x49, 0x05, 0xcb, 0x87, 0x42, 0x54, 0x50, 0xb5, 0x17, 0x4a,
+	0x25, 0x22, 0x5a, 0x10, 0x15, 0x48, 0x08, 0x21, 0xa8, 0x0a, 0x2d, 0x2a, 0x55, 0x2a, 0x71, 0xe3,
+	0xe0, 0x34, 0x43, 0x13, 0x85, 0x24, 0xc6, 0x6b, 0x17, 0x7c, 0xe0, 0xca, 0x4f, 0xe3, 0x77, 0xa1,
+	0x5d, 0x7b, 0xbd, 0x1f, 0x6a, 0x20, 0x12, 0xb7, 0x9d, 0xd9, 0x99, 0x79, 0x33, 0xb3, 0xcf, 0xcf,
+	0xc0, 0x94, 0x72, 0xd1, 0x8f, 0x93, 0x45, 0xba, 0x60, 0x8d, 0x78, 0x28, 0x2d, 0xbe, 0x85, 0xf0,
+	0x24, 0x9a, 0x11, 0xeb, 0x62, 0x6d, 0x4a, 0xf9, 0x3c, 0x9a, 0x51, 0xb7, 0xb6, 0x55, 0xdb, 0x6e,
+	0x0e, 0xb4, 0xc9, 0xd7, 0x70, 0xed, 0x60, 0x16, 0xa7, 0x39, 0x1f, 0x01, 0x87, 0x34, 0x1f, 0xd0,
+	0xb7, 0x8c, 0x44, 0xca, 0xee, 0x03, 0x71, 0x24, 0x44, 0x3c, 0x4e, 0x22, 0xa1, 0x73, 0x2c, 0x0f,
+	0xdb, 0x44, 0xf3, 0x3c, 0x4b, 0x2e, 0x29, 0xcd, 0x63, 0xea, 0xd6, 0xd5, 0xb5, 0x71, 0xd8, 0x70,
+	0x81, 0x0b, 0xf7, 0x00, 0x2d, 0x85, 0x22, 0xe2, 0xc5, 0x5c, 0xa8, 0xc0, 0x68, 0x34, 0x4a, 0x48,
+	0x08, 0xdd, 0x57, 0x69, 0xf2, 0x17, 0xc0, 0x69, 0x36, 0xd4, 0xed, 0x2c, 0x8d, 0x63, 0x0c, 0xa1,
+	0xc2, 0x29, 0x7a, 0x50, 0x67, 0xfe, 0x12, 0x2d, 0x95, 0x5b, 0x82, 0x5c, 0x47, 0x10, 0x67, 0x43,
+	0x95, 0xd8, 0x1e, 0xc8, 0xe3, 0xdf, 0xbb, 0xe7, 0x87, 0xb8, 0xf1, 0x7e, 0x16, 0x2f, 0x92, 0xf4,
+	0xe8, 0xec, 0xe3, 0xc9, 0xaa, 0x0b, 0x61, 0x08, 0x65, 0xb8, 0xee, 0x43, 0x9e, 0xf9, 0x0e, 0x36,
+	0x8a, 0x42, 0x2b, 0xcc, 0xfb, 0x13, 0x1d, 0x1d, 0xbb, 0x32, 0xa0, 0x3f, 0xb8, 0x3b, 0x57, 0xe0,
+	0xbf, 0x4a, 0x0f, 0xeb, 0x53, 0xca, 0x87, 0x79, 0x4a, 0xa2, 0x1b, 0xaa, 0x65, 0x54, 0x36, 0xff,
+	0x8c, 0xce, 0xc1, 0x8f, 0xff, 0x85, 0xb7, 0xa6, 0x0b, 0xdc, 0xe9, 0x7e, 0xd5, 0xb0, 0xa1, 0xeb,
+	0x97, 0xab, 0xd8, 0x44, 0x33, 0xce, 0x86, 0x5f, 0x27, 0xe7, 0x53, 0xca, 0xcb, 0xb7, 0x31, 0x0e,
+	0x05, 0x9f, 0x4c, 0x2e, 0xa3, 0x94, 0xe4, 0x75, 0x5d, 0x5d, 0x5b, 0x1e, 0x1f, 0xaa, 0x6d, 0x08,
+	0xe1, 0xec, 0x20, 0xf4, 0xdf, 0x36, 0x43, 0xeb, 0x6c, 0x72, 0xb1, 0x32, 0xcd, 0x2d, 0x98, 0xfa,
+	0xd5, 0xbc, 0x0b, 0xdc, 0xf9, 0x67, 0x24, 0x44, 0x74, 0x41, 0xe5, 0x7e, 0xb5, 0xc9, 0x8f, 0xd0,
+	0x2e, 0x60, 0xcd, 0xf0, 0x62, 0x72, 0x31, 0x8f, 0xd2, 0x2c, 0x21, 0x3d, 0x7c, 0xe5, 0xf8, 0x07,
+	0x3d, 0xbf, 0xa3, 0xf3, 0x89, 0x92, 0xc9, 0x97, 0x5c, 0x0f, 0xe1, 0x84, 0xd7, 0xfc, 0x57, 0x2f,
+	0xd9, 0x5f, 0x37, 0xec, 0xb7, 0xda, 0x0c, 0x9c, 0x36, 0xdd, 0xb6, 0x42, 0xaf, 0x2d, 0xfe, 0x06,
+	0xad, 0x77, 0x91, 0x18, 0x6b, 0xd8, 0x1e, 0xd6, 0xc7, 0x91, 0x18, 0x5b, 0xa8, 0x95, 0x6d, 0x43,
+	0xd4, 0xdd, 0x4d, 0x70, 0xb4, 0x8b, 0x22, 0xe5, 0x26, 0x18, 0x42, 0x99, 0x55, 0x56, 0x50, 0x67,
+	0xfe, 0x1c, 0xc1, 0xb1, 0xfb, 0xc6, 0xde, 0x47, 0x6f, 0xe9, 0x4b, 0xdd, 0xd5, 0x97, 0x47, 0x68,
+	0x7f, 0x98, 0x08, 0xc3, 0xb2, 0x7b, 0x08, 0x0a, 0x7e, 0x05, 0xdb, 0xad, 0xbd, 0x56, 0xbf, 0x90,
+	0xc5, 0xfe, 0x31, 0xe5, 0x03, 0xe9, 0xe7, 0x6f, 0xb1, 0xf1, 0x7a, 0x34, 0x92, 0x12, 0x69, 0x29,
+	0xcd, 0xd5, 0x4a, 0xb9, 0x9c, 0x0b, 0x7b, 0xbf, 0x43, 0x84, 0xc7, 0x94, 0x0b, 0xf6, 0x4c, 0xa9,
+	0x1b, 0x25, 0x51, 0x4a, 0x72, 0x00, 0xa6, 0xf1, 0x8c, 0xb0, 0xf6, 0x6e, 0x3a, 0xbe, 0xb2, 0xcb,
+	0xa7, 0x68, 0x9e, 0x2a, 0xea, 0x3b, 0x59, 0x46, 0xff, 0x4c, 0x96, 0xad, 0x6b, 0xbb, 0x08, 0x25,
+	0xa9, 0x58, 0x75, 0x69, 0x31, 0xbb, 0x77, 0xcb, 0x75, 0x96, 0x29, 0x7d, 0x34, 0x0a, 0xee, 0xb0,
+	0xdb, 0xfa, 0xde, 0xe1, 0x52, 0xaf, 0xa3, 0xdd, 0xea, 0xa7, 0xc0, 0xf6, 0xd1, 0x28, 0x54, 0xc9,
+	0xc4, 0x3b, 0x2a, 0xd5, 0xbb, 0xe3, 0xbb, 0x4b, 0xa0, 0x57, 0x80, 0xd1, 0x50, 0x76, 0xd7, 0x8d,
+	0xb2, 0x74, 0x75, 0x69, 0x81, 0x7d, 0x34, 0x0a, 0xc1, 0x30, 0xc8, 0x8e, 0x40, 0x99, 0x44, 0x4f,
+	0x57, 0x76, 0x11, 0x4a, 0x82, 0x99, 0xad, 0x58, 0x9c, 0x35, 0x5b, 0x71, 0x38, 0xf8, 0x10, 0x18,
+	0xd0, 0x6c, 0x71, 0x49, 0xea, 0x5f, 0xd9, 0xd6, 0x31, 0xd2, 0xf2, 0x17, 0xb2, 0x83, 0x50, 0xf2,
+	0xcb, 0x0b, 0xaa, 0xca, 0x3a, 0xdc, 0x7b, 0x8c, 0xb5, 0x92, 0x5c, 0xac, 0x6a, 0xd6, 0x65, 0x9b,
+	0x57, 0x7d, 0xd8, 0x50, 0x7f, 0xef, 0x27, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd5, 0x2f,
+	0xa7, 0xcb, 0x07, 0x00, 0x00,
 }
diff --git a/keys/pbkeys/keys.proto b/keys/pbkeys/keys.proto
index 06ef091eee5694daa1f546e04a85badf2acb9f9e..e530c4d5990374346e409e70ecb26525cc1d35d9 100644
--- a/keys/pbkeys/keys.proto
+++ b/keys/pbkeys/keys.proto
@@ -67,7 +67,10 @@ message ExportRequest {
 }
 
 message ExportResponse {
-    string export = 1;
+    bytes publickey = 1;
+    bytes privatekey = 2;
+    bytes address = 3;
+    string curvetype = 4;
 }
 
 message SignRequest {
diff --git a/keys/server.go b/keys/server.go
index d8eea559df096579fac884fd545eafe0d0685606..71f5082603c6af920e51f0de4bcca5dd751d274d 100644
--- a/keys/server.go
+++ b/keys/server.go
@@ -75,12 +75,13 @@ func (k *KeyStore) Export(ctx context.Context, in *pbkeys.ExportRequest) (*pbkey
 	if err != nil {
 		return nil, err
 	}
-	resp, err := coreExport(key)
-	if err != nil {
-		return nil, err
-	}
 
-	return &pbkeys.ExportResponse{Export: string(resp)}, nil
+	return &pbkeys.ExportResponse{
+		Address:    addrB[:],
+		Curvetype:  key.CurveType.String(),
+		Publickey:  key.PublicKey.PublicKey[:],
+		Privatekey: key.PrivateKey.PrivateKey[:],
+	}, nil
 }
 
 func (k *KeyStore) PublicKey(ctx context.Context, in *pbkeys.PubRequest) (*pbkeys.PubResponse, error) {
diff --git a/keys/test.sh b/keys/test.sh
index 125b1501044688ecc3098b42f2aa46c8d860f17e..43d652ccb7865a9af0582f7fe0ca80957434361a 100755
--- a/keys/test.sh
+++ b/keys/test.sh
@@ -119,10 +119,7 @@ do
 	ADDR=`$burrow_bin keys gen --curvetype $CURVETYPE --no-password`
 	DIR=$keys_dir/data
 	FILE=$DIR/$ADDR.json
-	PRIV=`cat $FILE |  jq -r .PrivateKey.Plain`
-	# XXX: Without the `-A` flag, `openssl base64 -d` command produces
-        # an empty string with the OpenSSL (LibreSSL 2.2.7).
-        HEXPRIV=`echo -n "$PRIV" | openssl base64 -d -A | xxd -p -c 256 | tr '[:lower:]' '[:upper:]'`
+	HEXPRIV=`cat $FILE |  jq -r .PrivateKey.Plain`
 
         cp $FILE ~/$ADDR
 	rm -rf $DIR