提交 c73080c4 编写于 作者: jia zhang's avatar jia zhang

rune && runectl: Support to retrieve enclave quote from aesm service

Introduce --gen-qe-target-info and --gen-quote options for this purpose.
Signed-off-by: jia zhang's avatarJia Zhang <zhang.jia@linux.alibaba.com>
上级 27627e71
......@@ -245,3 +245,115 @@ func GetQeTargetInfo() ([]byte, error) {
return resp.GetQeTargetInfo.GetTargetinfo(), nil
}
func GetQuote(report []byte, spid string, linkable bool) ([]byte, error) {
if len(report) != ReportLength {
return nil, fmt.Errorf("signature not match REPORT")
}
s, err := hex.DecodeString(spid)
if err != nil {
return nil, err
}
if len(s) != SpidLength {
return nil, fmt.Errorf("SPID is not 16-byte long")
}
r := &Report{}
if err := restruct.Unpack(report, binary.LittleEndian, &r); err != nil {
return nil, err
}
logrus.Debugf("REPORT:")
logrus.Debugf(" CPU SVN: 0x%v\n",
hex.EncodeToString(r.CpuSvn[:]))
logrus.Debugf(" Misc Select: %#08x\n",
r.MiscSelect)
logrus.Debugf(" Product ID: 0x%v\n",
hex.EncodeToString(r.IsvExtProdId[:]))
logrus.Debugf(" Attributes: 0x%v\n",
hex.EncodeToString(r.Attributes[:]))
logrus.Debugf(" Enclave Hash: 0x%v\n",
hex.EncodeToString(r.MrEnclave[:]))
logrus.Debugf(" Enclave Signer: 0x%v\n",
hex.EncodeToString(r.MrSigner[:]))
logrus.Debugf(" Config ID: 0x%v\n",
hex.EncodeToString(r.ConfigId[:]))
logrus.Debugf(" ISV assigned Produdct ID: %#04x\n",
r.IsvProdId)
logrus.Debugf(" ISV assigned SVN: %d\n",
r.IsvSvn)
logrus.Debugf(" Config SVN: %#04x\n",
r.ConfigSvn)
logrus.Debugf(" ISV assigned Product Family ID: 0x%v\n",
hex.EncodeToString(r.IsvFamilyId[:]))
logrus.Debugf(" Report Data: 0x%v\n",
hex.EncodeToString(r.ReportData[:]))
conn, err := dialAesmd()
if err != nil {
return nil, err
}
defer conn.Close()
var t uint32 = QuoteSignatureTypeUnlinkable
if linkable == true {
t = QuoteSignatureTypeLinkable
}
req := pb.AesmServiceRequest{}
req.GetQuote = &pb.AesmServiceRequest_GetQuote{
Report: report,
QuoteType: t,
Spid: s,
BufSize: SgxMaxQuoteLength,
QeReport: false,
Timeout: 10000,
}
rdata, err := transmitAesmd(conn, &req)
if err != nil {
return nil, err
}
resp := pb.AesmServiceResponse{}
resp.GetQuote = &pb.AesmServiceResponse_GetQuote{}
if err := proto.Unmarshal(rdata, &resp); err != nil {
return nil, err
}
if resp.GetQuote.GetError() != 0 {
return nil, fmt.Errorf("failed to get QUOTE (error code = %d)",
resp.GetQuote.GetError())
}
quote := resp.GetQuote.GetQuote()
if len(quote) < QuoteLength || len(quote) != SgxMaxQuoteLength {
return nil, fmt.Errorf("invalid length of quote: (returned %d, expected %d)",
len(quote), QuoteLength)
}
q := &Quote{}
if err := restruct.Unpack(quote, binary.LittleEndian, &q); err != nil {
return nil, err
}
logrus.Debugf("QUOTE:")
logrus.Debugf(" Version: %d\n",
q.Version)
logrus.Debugf(" Signature Type: %d\n",
q.SignatureType)
logrus.Debugf(" Gid: %#08x\n",
q.Gid)
logrus.Debugf(" ISV assigned SVN for Quoting Enclave: %d\n",
q.ISVSvnQe)
logrus.Debugf(" ISV assigned SVN for PCE: %d\n",
q.ISVSvnPce)
logrus.Debugf(" Base name: 0x%v\n",
hex.EncodeToString(q.Basename[:]))
logrus.Debugf(" Report: ...\n")
logrus.Debugf(" Signature Length: %d\n",
q.SigLen)
return resp.GetQuote.GetQuote(), nil
}
......@@ -24,14 +24,17 @@ const (
)
const (
SigStructLength = 1808
EinittokenLength = 304
TargetinfoLength = 512
ReportLength = ReportBodyLength + 48
ReportBodyLength = 384
QuoteLength = QuoteBodyLength + ReportBodyLength + 4
QuoteBodyLength = 48
NonceLength = 16
SigStructLength = 1808
EinittokenLength = 304
TargetinfoLength = 512
ReportLength = ReportBodyLength + 48
ReportBodyLength = 384
QuoteLength = QuoteBodyLength + ReportBodyLength + 4
QuoteBodyLength = 48
NonceLength = 16
SpidLength = 16
SubscriptionKeyLength = 16
SgxMaxQuoteLength = 2048
)
type SigStruct struct {
......
......@@ -10,6 +10,17 @@ message AesmServiceRequest {
uint32 timeout = 9;
}
message GetQuote {
bytes report = 1;
uint32 quote_type = 2;
bytes spid = 3;
bytes nonce = 4;
bytes sig_rl = 5;
uint32 buf_size = 6;
bool qe_report = 7;
uint32 timeout = 9;
}
message GetLaunchToken {
bytes enclavehash = 1;
bytes modulus = 2;
......@@ -18,6 +29,7 @@ message AesmServiceRequest {
}
GetQeTargetInfo getQeTargetInfo = 1;
GetQuote getQuote = 2;
GetLaunchToken getLaunchToken = 3;
}
......@@ -29,11 +41,18 @@ message AesmServiceResponse {
bytes gid = 3;
}
message GetQuote {
uint32 error = 1;
bytes quote = 2;
bytes qe_report = 3;
}
message GetLaunchToken {
uint32 error = 1;
bytes token = 2;
}
GetQeTargetInfo getQeTargetInfo = 1;
GetQuote getQuote = 2;
GetLaunchToken getLaunchToken = 3;
}
# runectl
## Introduction
`runectl` is a command line tool for inclavare-containers.
- Given the signature file of an Enclave, `runectl gen-token` command can generate the corresponding token file from Intel `aesmd` service.
- `runectl attest` command can allow users to challenge the enclave with the help of Intel Attestation Service through remote attestation requests. `runectl` command will open soon.
- Given the signature file of an Enclave, `runectl gen-token` command can generate the corresponding token file from aesmd service.
- `runectl gen-qe-target-info` command can generate Quoting Enclave's target information file from aesm service.
- Given the report file of an Enclave, `runectl gen-quote` command can generate quote file from aesm service.
## Install Intel `aesmd` service
### Hardware requirements
......
package main // import "github.com/inclavare-containers/runectl"
import (
"fmt"
"github.com/opencontainers/runc/libenclave/intelsgx"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
"io"
"io/ioutil"
"os"
)
var generateQuoteCommand = cli.Command{
Name: "gen-quote",
Usage: "retrieve a quote from aesmd",
ArgsUsage: `[command options]
EXAMPLE:
For example, generate the quote file according to the given local report file:
# runectl gen-quote --report foo.rep`,
Flags: []cli.Flag{
cli.StringFlag{
Name: "report",
Usage: "path to the input report file containing REPORT",
},
cli.StringFlag{
Name: "quote",
Usage: "path to the output quote file containing QUOTE",
},
cli.StringFlag{
Name: "spid",
Usage: "spid",
},
cli.BoolFlag{
Name: "linkable",
Usage: "linkable",
},
},
Action: func(context *cli.Context) error {
reportPath := context.String("report")
if reportPath == "" {
return fmt.Errorf("report argument cannot be empty")
}
spid := context.String("spid")
if spid == "" {
return fmt.Errorf("spid argument cannot be empty")
}
if context.GlobalBool("verbose") {
logrus.SetLevel(logrus.DebugLevel)
}
quotePath := context.String("quote")
if quotePath == "" {
quotePath = "quote.bin"
}
rf, err := os.Open(reportPath)
if err != nil {
if os.IsNotExist(err) {
return fmt.Errorf("report file %s not found", reportPath)
}
return err
}
defer rf.Close()
var rfi os.FileInfo
rfi, err = rf.Stat()
if err != nil {
return err
}
if rfi.Size() != intelsgx.ReportLength {
return fmt.Errorf("report file %s not match REPORT", reportPath)
}
buf := make([]byte, intelsgx.ReportLength)
if _, err = io.ReadFull(rf, buf); err != nil {
return fmt.Errorf("report file %s read failed", reportPath)
}
linkable := false
if context.Bool("linkable") {
linkable = true
}
quote, err := intelsgx.GetQuote(buf, spid, linkable)
if err != nil {
return err
}
if err := ioutil.WriteFile(quotePath, quote, 0664); err != nil {
return err
}
logrus.Infof("target enclave's quote file %s saved", quotePath)
return nil
},
SkipArgReorder: true,
}
......@@ -44,6 +44,7 @@ func main() {
app.Commands = []cli.Command{
generateTokenCommand,
generateQeTargetInfoCommand,
generateQuoteCommand,
}
//app.Before = func(context *cli.Context) error {
......
......@@ -245,3 +245,115 @@ func GetQeTargetInfo() ([]byte, error) {
return resp.GetQeTargetInfo.GetTargetinfo(), nil
}
func GetQuote(report []byte, spid string, linkable bool) ([]byte, error) {
if len(report) != ReportLength {
return nil, fmt.Errorf("signature not match REPORT")
}
s, err := hex.DecodeString(spid)
if err != nil {
return nil, err
}
if len(s) != SpidLength {
return nil, fmt.Errorf("SPID is not 16-byte long")
}
r := &Report{}
if err := restruct.Unpack(report, binary.LittleEndian, &r); err != nil {
return nil, err
}
logrus.Debugf("REPORT:")
logrus.Debugf(" CPU SVN: 0x%v\n",
hex.EncodeToString(r.CpuSvn[:]))
logrus.Debugf(" Misc Select: %#08x\n",
r.MiscSelect)
logrus.Debugf(" Product ID: 0x%v\n",
hex.EncodeToString(r.IsvExtProdId[:]))
logrus.Debugf(" Attributes: 0x%v\n",
hex.EncodeToString(r.Attributes[:]))
logrus.Debugf(" Enclave Hash: 0x%v\n",
hex.EncodeToString(r.MrEnclave[:]))
logrus.Debugf(" Enclave Signer: 0x%v\n",
hex.EncodeToString(r.MrSigner[:]))
logrus.Debugf(" Config ID: 0x%v\n",
hex.EncodeToString(r.ConfigId[:]))
logrus.Debugf(" ISV assigned Produdct ID: %#04x\n",
r.IsvProdId)
logrus.Debugf(" ISV assigned SVN: %d\n",
r.IsvSvn)
logrus.Debugf(" Config SVN: %#04x\n",
r.ConfigSvn)
logrus.Debugf(" ISV assigned Product Family ID: 0x%v\n",
hex.EncodeToString(r.IsvFamilyId[:]))
logrus.Debugf(" Report Data: 0x%v\n",
hex.EncodeToString(r.ReportData[:]))
conn, err := dialAesmd()
if err != nil {
return nil, err
}
defer conn.Close()
var t uint32 = QuoteSignatureTypeUnlinkable
if linkable == true {
t = QuoteSignatureTypeLinkable
}
req := pb.AesmServiceRequest{}
req.GetQuote = &pb.AesmServiceRequest_GetQuote{
Report: report,
QuoteType: t,
Spid: s,
BufSize: SgxMaxQuoteLength,
QeReport: false,
Timeout: 10000,
}
rdata, err := transmitAesmd(conn, &req)
if err != nil {
return nil, err
}
resp := pb.AesmServiceResponse{}
resp.GetQuote = &pb.AesmServiceResponse_GetQuote{}
if err := proto.Unmarshal(rdata, &resp); err != nil {
return nil, err
}
if resp.GetQuote.GetError() != 0 {
return nil, fmt.Errorf("failed to get QUOTE (error code = %d)",
resp.GetQuote.GetError())
}
quote := resp.GetQuote.GetQuote()
if len(quote) < QuoteLength || len(quote) != SgxMaxQuoteLength {
return nil, fmt.Errorf("invalid length of quote: (returned %d, expected %d)",
len(quote), QuoteLength)
}
q := &Quote{}
if err := restruct.Unpack(quote, binary.LittleEndian, &q); err != nil {
return nil, err
}
logrus.Debugf("QUOTE:")
logrus.Debugf(" Version: %d\n",
q.Version)
logrus.Debugf(" Signature Type: %d\n",
q.SignatureType)
logrus.Debugf(" Gid: %#08x\n",
q.Gid)
logrus.Debugf(" ISV assigned SVN for Quoting Enclave: %d\n",
q.ISVSvnQe)
logrus.Debugf(" ISV assigned SVN for PCE: %d\n",
q.ISVSvnPce)
logrus.Debugf(" Base name: 0x%v\n",
hex.EncodeToString(q.Basename[:]))
logrus.Debugf(" Report: ...\n")
logrus.Debugf(" Signature Length: %d\n",
q.SigLen)
return resp.GetQuote.GetQuote(), nil
}
......@@ -24,14 +24,17 @@ const (
)
const (
SigStructLength = 1808
EinittokenLength = 304
TargetinfoLength = 512
ReportLength = ReportBodyLength + 48
ReportBodyLength = 384
QuoteLength = QuoteBodyLength + ReportBodyLength + 4
QuoteBodyLength = 48
NonceLength = 16
SigStructLength = 1808
EinittokenLength = 304
TargetinfoLength = 512
ReportLength = ReportBodyLength + 48
ReportBodyLength = 384
QuoteLength = QuoteBodyLength + ReportBodyLength + 4
QuoteBodyLength = 48
NonceLength = 16
SpidLength = 16
SubscriptionKeyLength = 16
SgxMaxQuoteLength = 2048
)
type SigStruct struct {
......
......@@ -22,6 +22,7 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type AesmServiceRequest struct {
GetQeTargetInfo *AesmServiceRequest_GetQeTargetInfo `protobuf:"bytes,1,opt,name=getQeTargetInfo,proto3" json:"getQeTargetInfo,omitempty"`
GetQuote *AesmServiceRequest_GetQuote `protobuf:"bytes,2,opt,name=getQuote,proto3" json:"getQuote,omitempty"`
GetLaunchToken *AesmServiceRequest_GetLaunchToken `protobuf:"bytes,3,opt,name=getLaunchToken,proto3" json:"getLaunchToken,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
......@@ -60,6 +61,13 @@ func (m *AesmServiceRequest) GetGetQeTargetInfo() *AesmServiceRequest_GetQeTarge
return nil
}
func (m *AesmServiceRequest) GetGetQuote() *AesmServiceRequest_GetQuote {
if m != nil {
return m.GetQuote
}
return nil
}
func (m *AesmServiceRequest) GetGetLaunchToken() *AesmServiceRequest_GetLaunchToken {
if m != nil {
return m.GetLaunchToken
......@@ -106,6 +114,101 @@ func (m *AesmServiceRequest_GetQeTargetInfo) GetTimeout() uint32 {
return 0
}
type AesmServiceRequest_GetQuote struct {
Report []byte `protobuf:"bytes,1,opt,name=report,proto3" json:"report,omitempty"`
QuoteType uint32 `protobuf:"varint,2,opt,name=quote_type,json=quoteType,proto3" json:"quote_type,omitempty"`
Spid []byte `protobuf:"bytes,3,opt,name=spid,proto3" json:"spid,omitempty"`
Nonce []byte `protobuf:"bytes,4,opt,name=nonce,proto3" json:"nonce,omitempty"`
SigRl []byte `protobuf:"bytes,5,opt,name=sig_rl,json=sigRl,proto3" json:"sig_rl,omitempty"`
BufSize uint32 `protobuf:"varint,6,opt,name=buf_size,json=bufSize,proto3" json:"buf_size,omitempty"`
QeReport bool `protobuf:"varint,7,opt,name=qe_report,json=qeReport,proto3" json:"qe_report,omitempty"`
Timeout uint32 `protobuf:"varint,9,opt,name=timeout,proto3" json:"timeout,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *AesmServiceRequest_GetQuote) Reset() { *m = AesmServiceRequest_GetQuote{} }
func (m *AesmServiceRequest_GetQuote) String() string { return proto.CompactTextString(m) }
func (*AesmServiceRequest_GetQuote) ProtoMessage() {}
func (*AesmServiceRequest_GetQuote) Descriptor() ([]byte, []int) {
return fileDescriptor_85fe23d8fdbcfe93, []int{0, 1}
}
func (m *AesmServiceRequest_GetQuote) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AesmServiceRequest_GetQuote.Unmarshal(m, b)
}
func (m *AesmServiceRequest_GetQuote) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_AesmServiceRequest_GetQuote.Marshal(b, m, deterministic)
}
func (m *AesmServiceRequest_GetQuote) XXX_Merge(src proto.Message) {
xxx_messageInfo_AesmServiceRequest_GetQuote.Merge(m, src)
}
func (m *AesmServiceRequest_GetQuote) XXX_Size() int {
return xxx_messageInfo_AesmServiceRequest_GetQuote.Size(m)
}
func (m *AesmServiceRequest_GetQuote) XXX_DiscardUnknown() {
xxx_messageInfo_AesmServiceRequest_GetQuote.DiscardUnknown(m)
}
var xxx_messageInfo_AesmServiceRequest_GetQuote proto.InternalMessageInfo
func (m *AesmServiceRequest_GetQuote) GetReport() []byte {
if m != nil {
return m.Report
}
return nil
}
func (m *AesmServiceRequest_GetQuote) GetQuoteType() uint32 {
if m != nil {
return m.QuoteType
}
return 0
}
func (m *AesmServiceRequest_GetQuote) GetSpid() []byte {
if m != nil {
return m.Spid
}
return nil
}
func (m *AesmServiceRequest_GetQuote) GetNonce() []byte {
if m != nil {
return m.Nonce
}
return nil
}
func (m *AesmServiceRequest_GetQuote) GetSigRl() []byte {
if m != nil {
return m.SigRl
}
return nil
}
func (m *AesmServiceRequest_GetQuote) GetBufSize() uint32 {
if m != nil {
return m.BufSize
}
return 0
}
func (m *AesmServiceRequest_GetQuote) GetQeReport() bool {
if m != nil {
return m.QeReport
}
return false
}
func (m *AesmServiceRequest_GetQuote) GetTimeout() uint32 {
if m != nil {
return m.Timeout
}
return 0
}
type AesmServiceRequest_GetLaunchToken struct {
Enclavehash []byte `protobuf:"bytes,1,opt,name=enclavehash,proto3" json:"enclavehash,omitempty"`
Modulus []byte `protobuf:"bytes,2,opt,name=modulus,proto3" json:"modulus,omitempty"`
......@@ -120,7 +223,7 @@ func (m *AesmServiceRequest_GetLaunchToken) Reset() { *m = AesmServiceRe
func (m *AesmServiceRequest_GetLaunchToken) String() string { return proto.CompactTextString(m) }
func (*AesmServiceRequest_GetLaunchToken) ProtoMessage() {}
func (*AesmServiceRequest_GetLaunchToken) Descriptor() ([]byte, []int) {
return fileDescriptor_85fe23d8fdbcfe93, []int{0, 1}
return fileDescriptor_85fe23d8fdbcfe93, []int{0, 2}
}
func (m *AesmServiceRequest_GetLaunchToken) XXX_Unmarshal(b []byte) error {
......@@ -171,6 +274,7 @@ func (m *AesmServiceRequest_GetLaunchToken) GetTimeout() uint32 {
type AesmServiceResponse struct {
GetQeTargetInfo *AesmServiceResponse_GetQeTargetInfo `protobuf:"bytes,1,opt,name=getQeTargetInfo,proto3" json:"getQeTargetInfo,omitempty"`
GetQuote *AesmServiceResponse_GetQuote `protobuf:"bytes,2,opt,name=getQuote,proto3" json:"getQuote,omitempty"`
GetLaunchToken *AesmServiceResponse_GetLaunchToken `protobuf:"bytes,3,opt,name=getLaunchToken,proto3" json:"getLaunchToken,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
......@@ -209,6 +313,13 @@ func (m *AesmServiceResponse) GetGetQeTargetInfo() *AesmServiceResponse_GetQeTar
return nil
}
func (m *AesmServiceResponse) GetGetQuote() *AesmServiceResponse_GetQuote {
if m != nil {
return m.GetQuote
}
return nil
}
func (m *AesmServiceResponse) GetGetLaunchToken() *AesmServiceResponse_GetLaunchToken {
if m != nil {
return m.GetLaunchToken
......@@ -271,6 +382,61 @@ func (m *AesmServiceResponse_GetQeTargetInfo) GetGid() []byte {
return nil
}
type AesmServiceResponse_GetQuote struct {
Error uint32 `protobuf:"varint,1,opt,name=error,proto3" json:"error,omitempty"`
Quote []byte `protobuf:"bytes,2,opt,name=quote,proto3" json:"quote,omitempty"`
QeReport []byte `protobuf:"bytes,3,opt,name=qe_report,json=qeReport,proto3" json:"qe_report,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *AesmServiceResponse_GetQuote) Reset() { *m = AesmServiceResponse_GetQuote{} }
func (m *AesmServiceResponse_GetQuote) String() string { return proto.CompactTextString(m) }
func (*AesmServiceResponse_GetQuote) ProtoMessage() {}
func (*AesmServiceResponse_GetQuote) Descriptor() ([]byte, []int) {
return fileDescriptor_85fe23d8fdbcfe93, []int{1, 1}
}
func (m *AesmServiceResponse_GetQuote) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AesmServiceResponse_GetQuote.Unmarshal(m, b)
}
func (m *AesmServiceResponse_GetQuote) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_AesmServiceResponse_GetQuote.Marshal(b, m, deterministic)
}
func (m *AesmServiceResponse_GetQuote) XXX_Merge(src proto.Message) {
xxx_messageInfo_AesmServiceResponse_GetQuote.Merge(m, src)
}
func (m *AesmServiceResponse_GetQuote) XXX_Size() int {
return xxx_messageInfo_AesmServiceResponse_GetQuote.Size(m)
}
func (m *AesmServiceResponse_GetQuote) XXX_DiscardUnknown() {
xxx_messageInfo_AesmServiceResponse_GetQuote.DiscardUnknown(m)
}
var xxx_messageInfo_AesmServiceResponse_GetQuote proto.InternalMessageInfo
func (m *AesmServiceResponse_GetQuote) GetError() uint32 {
if m != nil {
return m.Error
}
return 0
}
func (m *AesmServiceResponse_GetQuote) GetQuote() []byte {
if m != nil {
return m.Quote
}
return nil
}
func (m *AesmServiceResponse_GetQuote) GetQeReport() []byte {
if m != nil {
return m.QeReport
}
return nil
}
type AesmServiceResponse_GetLaunchToken struct {
Error uint32 `protobuf:"varint,1,opt,name=error,proto3" json:"error,omitempty"`
Token []byte `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
......@@ -283,7 +449,7 @@ func (m *AesmServiceResponse_GetLaunchToken) Reset() { *m = AesmServiceR
func (m *AesmServiceResponse_GetLaunchToken) String() string { return proto.CompactTextString(m) }
func (*AesmServiceResponse_GetLaunchToken) ProtoMessage() {}
func (*AesmServiceResponse_GetLaunchToken) Descriptor() ([]byte, []int) {
return fileDescriptor_85fe23d8fdbcfe93, []int{1, 1}
return fileDescriptor_85fe23d8fdbcfe93, []int{1, 2}
}
func (m *AesmServiceResponse_GetLaunchToken) XXX_Unmarshal(b []byte) error {
......@@ -321,9 +487,11 @@ func (m *AesmServiceResponse_GetLaunchToken) GetToken() []byte {
func init() {
proto.RegisterType((*AesmServiceRequest)(nil), "aesm_service.AesmServiceRequest")
proto.RegisterType((*AesmServiceRequest_GetQeTargetInfo)(nil), "aesm_service.AesmServiceRequest.GetQeTargetInfo")
proto.RegisterType((*AesmServiceRequest_GetQuote)(nil), "aesm_service.AesmServiceRequest.GetQuote")
proto.RegisterType((*AesmServiceRequest_GetLaunchToken)(nil), "aesm_service.AesmServiceRequest.GetLaunchToken")
proto.RegisterType((*AesmServiceResponse)(nil), "aesm_service.AesmServiceResponse")
proto.RegisterType((*AesmServiceResponse_GetQeTargetInfo)(nil), "aesm_service.AesmServiceResponse.GetQeTargetInfo")
proto.RegisterType((*AesmServiceResponse_GetQuote)(nil), "aesm_service.AesmServiceResponse.GetQuote")
proto.RegisterType((*AesmServiceResponse_GetLaunchToken)(nil), "aesm_service.AesmServiceResponse.GetLaunchToken")
}
......@@ -332,26 +500,36 @@ func init() {
}
var fileDescriptor_85fe23d8fdbcfe93 = []byte{
// 324 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x4e, 0xc2, 0x40,
0x14, 0x85, 0x53, 0x08, 0x1a, 0x2f, 0x7f, 0x66, 0x64, 0xd1, 0xb0, 0x30, 0x84, 0x15, 0x89, 0xb1,
0xa2, 0x6e, 0xdd, 0xb8, 0x32, 0x26, 0x6e, 0x1c, 0x49, 0xfc, 0x5b, 0x98, 0x01, 0xae, 0xa5, 0x91,
0x76, 0x70, 0xe6, 0x0e, 0x8f, 0xe0, 0x9b, 0xfa, 0x1c, 0x9a, 0xce, 0x40, 0x52, 0x5a, 0x8b, 0xec,
0x7a, 0x4f, 0x7b, 0xbe, 0xce, 0xb9, 0x67, 0x80, 0x09, 0xd4, 0xf1, 0xa9, 0x46, 0xb5, 0x8c, 0x26,
0x18, 0x2c, 0x94, 0x24, 0xc9, 0x1a, 0xa9, 0xf6, 0xb6, 0xd2, 0xfa, 0x3f, 0x15, 0x60, 0xd7, 0xa8,
0xe3, 0x07, 0x37, 0x73, 0xfc, 0x34, 0xa8, 0x89, 0xbd, 0x40, 0x3b, 0x44, 0xba, 0xc7, 0x91, 0x50,
0x21, 0xd2, 0x6d, 0xf2, 0x2e, 0x7d, 0xaf, 0xe7, 0x0d, 0xea, 0x17, 0xc3, 0x20, 0x6b, 0x0f, 0x8a,
0xd6, 0xe0, 0x66, 0xd3, 0xc7, 0xf3, 0x20, 0xf6, 0x08, 0xad, 0x10, 0xe9, 0x4e, 0x98, 0x64, 0x32,
0x1b, 0xc9, 0x0f, 0x4c, 0xfc, 0xaa, 0x45, 0x9f, 0xed, 0x82, 0xce, 0xd8, 0x78, 0x0e, 0xd3, 0x3d,
0x81, 0x76, 0xee, 0xe7, 0xcc, 0x87, 0x7d, 0x8a, 0x62, 0x94, 0x86, 0xfc, 0x83, 0x9e, 0x37, 0x68,
0xf2, 0xf5, 0xd8, 0xfd, 0xf2, 0xa0, 0xb5, 0xc9, 0x63, 0x3d, 0xa8, 0x63, 0x32, 0x99, 0x8b, 0x25,
0xce, 0x84, 0x9e, 0xd9, 0xc0, 0x0d, 0x9e, 0x95, 0x52, 0x5c, 0x2c, 0xa7, 0x66, 0x6e, 0xb4, 0x5f,
0xb1, 0x6f, 0xd7, 0x23, 0x3b, 0x06, 0x10, 0x44, 0x2a, 0x1a, 0x1b, 0x42, 0x6d, 0x03, 0x35, 0x78,
0x46, 0x29, 0x3f, 0x48, 0xff, 0xbb, 0x02, 0x47, 0x1b, 0x59, 0xf5, 0x42, 0x26, 0x1a, 0xd9, 0x6b,
0x59, 0x05, 0xe7, 0x5b, 0xf6, 0xe4, 0xbc, 0xff, 0x77, 0xf0, 0x54, 0xd2, 0xc1, 0x70, 0x27, 0xf6,
0xb6, 0x12, 0x9e, 0x8b, 0x25, 0x74, 0xa0, 0x86, 0x4a, 0x49, 0x65, 0xcf, 0xdf, 0xe4, 0x6e, 0x48,
0x37, 0x46, 0xf6, 0x9b, 0x28, 0x8d, 0xe6, 0xd6, 0x99, 0x51, 0xd8, 0x21, 0x54, 0xc3, 0x68, 0xba,
0x5a, 0x65, 0xfa, 0xd8, 0xbd, 0x2a, 0x34, 0xf6, 0x37, 0xb9, 0x03, 0x35, 0xb2, 0x99, 0x1c, 0xd4,
0x0d, 0xe3, 0x3d, 0x7b, 0xfd, 0x2f, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xef, 0x36, 0xfc, 0x14,
0x14, 0x03, 0x00, 0x00,
// 484 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0xd3, 0x40,
0x10, 0x95, 0x69, 0x9d, 0x3a, 0x53, 0xa7, 0x45, 0x43, 0x40, 0x26, 0x08, 0x14, 0xf5, 0x14, 0x40,
0x84, 0x02, 0x57, 0x2e, 0x1c, 0x00, 0x21, 0x71, 0x61, 0x13, 0x89, 0xaf, 0x83, 0xe5, 0xa4, 0x13,
0x67, 0x45, 0xe2, 0xb5, 0xf7, 0xa3, 0x52, 0x7b, 0xe4, 0xc0, 0xbf, 0xe0, 0x5f, 0xf1, 0x83, 0x90,
0x77, 0x9d, 0xc8, 0x49, 0x70, 0xc9, 0xcd, 0xef, 0x69, 0xdf, 0xd3, 0xcc, 0x9b, 0x27, 0x03, 0x26,
0xa4, 0x96, 0xcf, 0x14, 0xc9, 0x4b, 0x3e, 0xa5, 0x61, 0x2e, 0x85, 0x16, 0x18, 0x96, 0x5c, 0x5c,
0x71, 0x67, 0xbf, 0x7d, 0xc0, 0x37, 0xa4, 0x96, 0x23, 0x87, 0x19, 0x15, 0x86, 0x94, 0xc6, 0x6f,
0x70, 0x9a, 0x92, 0xfe, 0x44, 0xe3, 0x44, 0xa6, 0xa4, 0x3f, 0x64, 0x33, 0x11, 0x79, 0x7d, 0x6f,
0x70, 0xfc, 0xf2, 0x7c, 0x58, 0x97, 0x0f, 0x77, 0xa5, 0xc3, 0xf7, 0x9b, 0x3a, 0xb6, 0x6d, 0x84,
0x6f, 0x21, 0x28, 0x29, 0x23, 0x34, 0x45, 0xb7, 0xac, 0xe9, 0xe3, 0xbd, 0x4c, 0x4b, 0x01, 0x5b,
0x4b, 0xf1, 0x33, 0x9c, 0xa4, 0xa4, 0x3f, 0x26, 0x26, 0x9b, 0xce, 0xc7, 0xe2, 0x07, 0x65, 0xd1,
0x81, 0x35, 0x7b, 0xbe, 0x8f, 0x59, 0x4d, 0xc6, 0xb6, 0x6c, 0x7a, 0x4f, 0xe1, 0x74, 0x6b, 0x07,
0x8c, 0xe0, 0x48, 0xf3, 0x25, 0x09, 0xa3, 0xa3, 0x76, 0xdf, 0x1b, 0x74, 0xd8, 0x0a, 0xf6, 0xfe,
0x78, 0x10, 0xac, 0x86, 0xc3, 0x7b, 0xd0, 0x92, 0x94, 0x0b, 0xa9, 0x6d, 0x58, 0x21, 0xab, 0x10,
0x3e, 0x04, 0x28, 0xca, 0x07, 0xb1, 0xbe, 0xca, 0xdd, 0xce, 0x1d, 0xd6, 0xb6, 0xcc, 0xf8, 0x2a,
0x27, 0x44, 0x38, 0x54, 0x39, 0xbf, 0xb0, 0xf3, 0x87, 0xcc, 0x7e, 0x63, 0x17, 0xfc, 0x4c, 0x64,
0x53, 0x8a, 0x0e, 0x2d, 0xe9, 0x00, 0xde, 0x85, 0x96, 0xe2, 0x69, 0x2c, 0x17, 0x91, 0xef, 0x68,
0xc5, 0x53, 0xb6, 0xc0, 0xfb, 0x10, 0x4c, 0xcc, 0x2c, 0x56, 0xfc, 0x9a, 0xa2, 0x96, 0x9b, 0x6f,
0x62, 0x66, 0x23, 0x7e, 0x4d, 0xf8, 0x00, 0xda, 0x05, 0xc5, 0xd5, 0x54, 0x47, 0x7d, 0x6f, 0x10,
0xb0, 0xa0, 0x20, 0xe6, 0xe6, 0x6a, 0x5e, 0xeb, 0x97, 0x07, 0x27, 0x9b, 0x31, 0x61, 0x1f, 0x8e,
0x29, 0x9b, 0x2e, 0x92, 0x4b, 0x9a, 0x27, 0x6a, 0x5e, 0x6d, 0x58, 0xa7, 0x4a, 0xbb, 0xa5, 0xb8,
0x30, 0x0b, 0xa3, 0xec, 0x8e, 0x21, 0x5b, 0x41, 0x7c, 0x04, 0x90, 0x68, 0x2d, 0xf9, 0xc4, 0x68,
0x52, 0xd5, 0x9e, 0x35, 0xa6, 0x79, 0x90, 0xb3, 0x9f, 0x87, 0x70, 0x67, 0xe3, 0x84, 0x2a, 0x17,
0x99, 0x22, 0xfc, 0xde, 0x54, 0xd0, 0x17, 0x37, 0x9c, 0xdf, 0x69, 0xff, 0xdf, 0xd0, 0x77, 0x3b,
0x0d, 0x7d, 0xb2, 0x9f, 0xeb, 0x56, 0x45, 0xbf, 0x34, 0x54, 0xf4, 0x7c, 0x2f, 0xb7, 0x9b, 0x3a,
0xfa, 0x75, 0xb7, 0xa3, 0x5d, 0xf0, 0x49, 0x4a, 0x21, 0x6d, 0x0e, 0x1d, 0xe6, 0x40, 0x99, 0xbc,
0xb6, 0x6f, 0x78, 0x19, 0x91, 0x3b, 0x4b, 0x8d, 0xc1, 0xdb, 0x70, 0x90, 0xae, 0xab, 0x57, 0x7e,
0xf6, 0x46, 0xb5, 0x42, 0xff, 0xdb, 0xb3, 0x0b, 0x7e, 0xb1, 0xce, 0x26, 0x64, 0x0e, 0x6c, 0x36,
0xcd, 0xf9, 0xad, 0x9b, 0xd6, 0x7b, 0xbd, 0x53, 0xa7, 0x46, 0x6b, 0x6d, 0x83, 0xaa, 0xac, 0x2d,
0x98, 0xb4, 0xec, 0x9f, 0xeb, 0xd5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0x6a, 0x71,
0xcf, 0x04, 0x00, 0x00,
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册