diff --git a/rune/libenclave/intelsgx/aesmd.go b/rune/libenclave/intelsgx/aesmd.go index f8f666ee3d4ac13a028c780b110a25c6032adb1e..4c7a093964bd9ca815d51e73aac6cc447d0ab5f8 100644 --- a/rune/libenclave/intelsgx/aesmd.go +++ b/rune/libenclave/intelsgx/aesmd.go @@ -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 +} diff --git a/rune/libenclave/intelsgx/arch.go b/rune/libenclave/intelsgx/arch.go index ab3945ed5cc94b7a836befdc288969a3fb307517..b48a638b3efe02716b90321bf7556da9fb184a13 100644 --- a/rune/libenclave/intelsgx/arch.go +++ b/rune/libenclave/intelsgx/arch.go @@ -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 { diff --git a/rune/libenclave/intelsgx/proto/aesm-service.proto b/rune/libenclave/intelsgx/proto/aesm-service.proto index ee26c3ce7683daedada6c671999df9ac2fa609df..de67c1fbbd796bd76259af5421aacbb408425c3b 100644 --- a/rune/libenclave/intelsgx/proto/aesm-service.proto +++ b/rune/libenclave/intelsgx/proto/aesm-service.proto @@ -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; } diff --git a/runectl/README.md b/runectl/README.md index e3069c6a088aba2c2081583c46cb704d86b9ce7c..73d094e9fbbbd6a0477e074ba94def8406063b12 100644 --- a/runectl/README.md +++ b/runectl/README.md @@ -1,8 +1,9 @@ # 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 diff --git a/runectl/gen-quote.go b/runectl/gen-quote.go new file mode 100644 index 0000000000000000000000000000000000000000..4887bd480d755fca87c011b35d087460e09b94f0 --- /dev/null +++ b/runectl/gen-quote.go @@ -0,0 +1,103 @@ +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, +} diff --git a/runectl/main.go b/runectl/main.go index 76d933afbd72d66f87c875398f4b69889cfbf3d3..e1a79c97b79bbbe3d0b226551bc29f3ed72ef5a8 100644 --- a/runectl/main.go +++ b/runectl/main.go @@ -44,6 +44,7 @@ func main() { app.Commands = []cli.Command{ generateTokenCommand, generateQeTargetInfoCommand, + generateQuoteCommand, } //app.Before = func(context *cli.Context) error { diff --git a/runectl/test/report.bin b/runectl/test/report.bin new file mode 100644 index 0000000000000000000000000000000000000000..43e9fb9566a4d9056654c9243e6ec88254ddea0f Binary files /dev/null and b/runectl/test/report.bin differ diff --git a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/aesmd.go b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/aesmd.go index f8f666ee3d4ac13a028c780b110a25c6032adb1e..4c7a093964bd9ca815d51e73aac6cc447d0ab5f8 100644 --- a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/aesmd.go +++ b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/aesmd.go @@ -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 +} diff --git a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/arch.go b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/arch.go index ab3945ed5cc94b7a836befdc288969a3fb307517..b48a638b3efe02716b90321bf7556da9fb184a13 100644 --- a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/arch.go +++ b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/arch.go @@ -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 { diff --git a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/proto/aesm-service.pb.go b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/proto/aesm-service.pb.go index 0ccaaac01d1930cd77e4670ecabc674bcf1f7044..0776fcd5b06f4e91adcbb1bfebcedc1d68b5be62 100644 --- a/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/proto/aesm-service.pb.go +++ b/runectl/vendor/github.com/opencontainers/runc/libenclave/intelsgx/proto/aesm-service.pb.go @@ -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, }