@super-protocol/addons-tee 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,12 +7,15 @@ import (
7
7
  "errors"
8
8
  "flag"
9
9
  "fmt"
10
+ "io"
10
11
  "os"
11
12
  "strings"
12
13
 
14
+ "github.com/google/go-tdx-guest/abi"
13
15
  "github.com/google/go-eventlog/register"
14
16
  "github.com/google/go-eventlog/tcg"
15
17
  "github.com/google/go-tdx-guest/client"
18
+ pb "github.com/google/go-tdx-guest/proto/tdx"
16
19
  )
17
20
 
18
21
  const (
@@ -30,6 +33,16 @@ type outputPayload struct {
30
33
  EventLog []eventRecord `json:"eventLog"`
31
34
  }
32
35
 
36
+ type parsedQuotePayload struct {
37
+ ReportData string `json:"reportData"`
38
+ TDAttributes string `json:"tdattributes"`
39
+ MRTD string `json:"mrtd"`
40
+ RTMR0 string `json:"rtmr0"`
41
+ RTMR1 string `json:"rtmr1"`
42
+ RTMR2 string `json:"rtmr2"`
43
+ RTMR3 string `json:"rtmr3"`
44
+ }
45
+
33
46
  func main() {
34
47
  if err := run(); err != nil {
35
48
  fmt.Fprintf(os.Stderr, "error: %v\n", err)
@@ -38,14 +51,35 @@ func main() {
38
51
  }
39
52
 
40
53
  func run() error {
41
- reportDataHex := flag.String("report-data", "", "hex-encoded report data, up to 64 bytes")
42
- outputPath := flag.String("output", "", "write JSON output to file instead of stdout")
43
- ccelEventLogPath := flag.String("ccel-event-log", defaultCCELEventLogPath, "path to CCEL event log data")
44
- flag.Parse()
54
+ if len(os.Args) < 2 {
55
+ return usageError("missing subcommand: expected 'attest' or 'parse-quote'")
56
+ }
57
+
58
+ switch os.Args[1] {
59
+ case "attest":
60
+ return runAttest(os.Args[2:])
61
+ case "parse-quote":
62
+ return runParseQuote(os.Args[2:])
63
+ default:
64
+ return usageError(fmt.Sprintf("unknown subcommand %q: expected 'attest' or 'parse-quote'", os.Args[1]))
65
+ }
66
+ }
67
+
68
+ func runAttest(args []string) error {
69
+ fs := newFlagSet("attest")
70
+ reportDataHex := fs.String("report-data", "", "hex-encoded report data, up to 64 bytes")
71
+ outputPath := fs.String("output", "", "write JSON output to file")
72
+ ccelEventLogPath := fs.String("ccel-event-log", defaultCCELEventLogPath, "path to CCEL event log data")
73
+ if err := fs.Parse(args); err != nil {
74
+ return err
75
+ }
45
76
 
46
77
  if *reportDataHex == "" {
47
78
  return errors.New("missing required flag --report-data")
48
79
  }
80
+ if *outputPath == "" {
81
+ return errors.New("missing required flag --output")
82
+ }
49
83
 
50
84
  reportData, err := decodeReportData(*reportDataHex)
51
85
  if err != nil {
@@ -72,20 +106,90 @@ func run() error {
72
106
  EventLog: events,
73
107
  }
74
108
 
109
+ return writeJSON(*outputPath, payload)
110
+ }
111
+
112
+ func runParseQuote(args []string) error {
113
+ fs := newFlagSet("parse-quote")
114
+ quotePath := fs.String("quote-file", "", "path to a raw TDX quote file")
115
+ outputPath := fs.String("output", "", "write JSON output to file")
116
+ if err := fs.Parse(args); err != nil {
117
+ return err
118
+ }
119
+
120
+ if *quotePath == "" {
121
+ return errors.New("missing required flag --quote-file")
122
+ }
123
+ if *outputPath == "" {
124
+ return errors.New("missing required flag --output")
125
+ }
126
+
127
+ rawQuote, err := os.ReadFile(*quotePath)
128
+ if err != nil {
129
+ return fmt.Errorf("read quote file %q: %w", *quotePath, err)
130
+ }
131
+
132
+ payload, err := parseQuote(rawQuote)
133
+ if err != nil {
134
+ return err
135
+ }
136
+
137
+ return writeJSON(*outputPath, payload)
138
+ }
139
+
140
+ func newFlagSet(name string) *flag.FlagSet {
141
+ fs := flag.NewFlagSet(name, flag.ContinueOnError)
142
+ fs.SetOutput(io.Discard)
143
+ return fs
144
+ }
145
+
146
+ func writeJSON(outputPath string, payload any) error {
75
147
  jsonData, err := json.MarshalIndent(payload, "", " ")
76
148
  if err != nil {
77
149
  return fmt.Errorf("marshal JSON: %w", err)
78
150
  }
79
151
 
80
- if *outputPath != "" {
81
- if err := os.WriteFile(*outputPath, append(jsonData, '\n'), 0o644); err != nil {
82
- return fmt.Errorf("write output file %q: %w", *outputPath, err)
152
+ if err := os.WriteFile(outputPath, append(jsonData, '\n'), 0o644); err != nil {
153
+ return fmt.Errorf("write output file %q: %w", outputPath, err)
154
+ }
155
+
156
+ return nil
157
+ }
158
+
159
+ func parseQuote(rawQuote []byte) (parsedQuotePayload, error) {
160
+ anyQuote, err := abi.QuoteToProto(rawQuote)
161
+ if err != nil {
162
+ return parsedQuotePayload{}, fmt.Errorf("parse quote: %w", err)
163
+ }
164
+
165
+ switch quote := anyQuote.(type) {
166
+ case *pb.QuoteV4:
167
+ tdQuoteBody := quote.GetTdQuoteBody()
168
+ if tdQuoteBody == nil {
169
+ return parsedQuotePayload{}, errors.New("parse quote: missing TD quote body")
170
+ }
171
+
172
+ rtmrs := tdQuoteBody.GetRtmrs()
173
+ if len(rtmrs) != 4 {
174
+ return parsedQuotePayload{}, fmt.Errorf("parse quote: expected exactly 4 RTMRs, got %d", len(rtmrs))
83
175
  }
84
- return nil
176
+
177
+ return parsedQuotePayload{
178
+ ReportData: hex.EncodeToString(tdQuoteBody.GetReportData()),
179
+ TDAttributes: hex.EncodeToString(tdQuoteBody.GetTdAttributes()),
180
+ MRTD: hex.EncodeToString(tdQuoteBody.GetMrTd()),
181
+ RTMR0: hex.EncodeToString(rtmrs[0]),
182
+ RTMR1: hex.EncodeToString(rtmrs[1]),
183
+ RTMR2: hex.EncodeToString(rtmrs[2]),
184
+ RTMR3: hex.EncodeToString(rtmrs[3]),
185
+ }, nil
186
+ default:
187
+ return parsedQuotePayload{}, fmt.Errorf("parse quote: unsupported quote type %T", anyQuote)
85
188
  }
189
+ }
86
190
 
87
- _, err = os.Stdout.Write(append(jsonData, '\n'))
88
- return err
191
+ func usageError(message string) error {
192
+ return fmt.Errorf("%s\nusage:\n %s attest --report-data <hex> --output <file> [--ccel-event-log <path>]\n %s parse-quote --quote-file <path> --output <file>", message, os.Args[0], os.Args[0])
89
193
  }
90
194
 
91
195
  func decodeReportData(raw string) ([64]byte, error) {
Binary file
Binary file
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { TdxQuoteWithEventLog } from "./tdx-quote-with-event-log-schema";
2
+ import { TdxEventLogEntry, TdxQuoteWithEventLog } from "./tdx-quote-with-event-log-schema";
3
+ import { TdxParsedQuote } from "./tdx-parsed-quote-schema";
3
4
  export declare class DcapQuoteVerifyService {
4
5
  private readonly quoteVerifier;
5
6
  private static isInGramineMode;
@@ -8,8 +9,11 @@ export declare class DcapQuoteVerifyService {
8
9
  extractQuoteFromCert(pemOrDerCert: Buffer): Promise<Buffer>;
9
10
  validateQuoteVerifierEnclave(quote: Buffer, checkSecurity?: boolean): Promise<void>;
10
11
  generateTDXQuote(userData: Buffer): Promise<Buffer>;
12
+ validateRtmrEventLogIntegrity(eventLog: TdxEventLogEntry[], rtmr: string | Buffer): Promise<void>;
13
+ parseTDXQuote(quote: Buffer): Promise<TdxParsedQuote>;
11
14
  generateTDXQuoteWithEventLog(userData: Buffer): Promise<TdxQuoteWithEventLog>;
12
15
  private static formatSubprocessError;
16
+ private normalizeRtmr;
13
17
  private validateMode;
14
18
  generateSGXQuote(userData: Buffer): Promise<Buffer>;
15
19
  }
@@ -33,12 +33,14 @@ const errors_1 = require("./errors");
33
33
  const p_queue_1 = __importDefault(require("p-queue"));
34
34
  const fs_1 = require("fs");
35
35
  const child_process_1 = require("child_process");
36
+ const crypto_1 = require("crypto");
36
37
  const os = __importStar(require("os"));
37
38
  const path = __importStar(require("path"));
38
39
  const util_1 = require("util");
39
40
  const value_1 = require("@sinclair/typebox/value");
40
41
  const helpers_1 = require("./helpers");
41
42
  const tdx_quote_with_event_log_schema_1 = require("./tdx-quote-with-event-log-schema");
43
+ const tdx_parsed_quote_schema_1 = require("./tdx-parsed-quote-schema");
42
44
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
43
45
  const TDX_ATTEST_WRAPPER_PATH = path.resolve(__dirname, "../../bindings/go-tdx-attest-wrapper/go-tdx-attest-wrapper");
44
46
  class DcapQuoteVerifyService {
@@ -67,6 +69,78 @@ class DcapQuoteVerifyService {
67
69
  async generateTDXQuote(userData) {
68
70
  return this.quoteVerifier.generateTDXQuote(userData);
69
71
  }
72
+ async validateRtmrEventLogIntegrity(eventLog, rtmr) {
73
+ if (!Array.isArray(eventLog)) {
74
+ throw new Error("eventLog must be an array");
75
+ }
76
+ let current = Buffer.alloc(48);
77
+ for (const [i, event] of eventLog.entries()) {
78
+ if (!event || typeof event.digest !== "string") {
79
+ throw new Error(`event ${i}: digest must be a string`);
80
+ }
81
+ if (!/^[0-9a-fA-F]+$/.test(event.digest) || event.digest.length % 2 !== 0) {
82
+ throw new Error(`event ${i}: decode sha384: encoding/hex: invalid byte`);
83
+ }
84
+ const measurement = Buffer.from(event.digest, "hex");
85
+ if (measurement.length !== 48) {
86
+ throw new Error(`event ${i}: sha384 length is ${measurement.length} bytes, want 48`);
87
+ }
88
+ current = (0, crypto_1.createHash)("sha384")
89
+ .update(Buffer.concat([current, measurement]))
90
+ .digest();
91
+ }
92
+ const expectedRtmr = this.normalizeRtmr(rtmr);
93
+ if (!current.equals(expectedRtmr)) {
94
+ throw new Error("RTMR does not match event log");
95
+ }
96
+ }
97
+ async parseTDXQuote(quote) {
98
+ if (!Buffer.isBuffer(quote)) {
99
+ throw new Error("quote must be a Buffer");
100
+ }
101
+ if (quote.length === 0) {
102
+ throw new Error("quote cannot be empty");
103
+ }
104
+ let tempDir = "";
105
+ try {
106
+ await fs_1.promises.access(TDX_ATTEST_WRAPPER_PATH, fs_1.constants.X_OK);
107
+ tempDir = await fs_1.promises.mkdtemp(path.join(os.tmpdir(), "tdx-parsed-quote-"));
108
+ const quotePath = path.join(tempDir, "quote.bin");
109
+ const outputPath = path.join(tempDir, "parsed-quote.json");
110
+ await fs_1.promises.writeFile(quotePath, quote);
111
+ try {
112
+ await execFileAsync(TDX_ATTEST_WRAPPER_PATH, [
113
+ "parse-quote",
114
+ "--quote-file",
115
+ quotePath,
116
+ "--output",
117
+ outputPath,
118
+ ]);
119
+ }
120
+ catch (error) {
121
+ throw new Error(`Failed to parse quote: ${DcapQuoteVerifyService.formatSubprocessError(error)}`);
122
+ }
123
+ const rawJson = await fs_1.promises.readFile(outputPath, "utf8");
124
+ const parsed = JSON.parse(rawJson);
125
+ if (!value_1.Value.Check(tdx_parsed_quote_schema_1.TdxParsedQuoteJsonSchema, parsed)) {
126
+ const [firstError] = [...value_1.Value.Errors(tdx_parsed_quote_schema_1.TdxParsedQuoteJsonSchema, parsed)];
127
+ const errorMessage = firstError ? `${firstError.path} ${firstError.message}`.trim() : "unknown error";
128
+ throw new Error(`Failed to validate parsed quote JSON: ${errorMessage}`);
129
+ }
130
+ return parsed;
131
+ }
132
+ catch (error) {
133
+ if (error instanceof Error) {
134
+ throw new Error(`Failed to parse quote: ${error.message}`);
135
+ }
136
+ throw new Error("Failed to parse quote: unknown error");
137
+ }
138
+ finally {
139
+ if (tempDir) {
140
+ await (0, helpers_1.gramineCompatibleRmDir)(tempDir);
141
+ }
142
+ }
143
+ }
70
144
  async generateTDXQuoteWithEventLog(userData) {
71
145
  if (!Buffer.isBuffer(userData)) {
72
146
  throw new Error("userData must be a Buffer");
@@ -82,6 +156,7 @@ class DcapQuoteVerifyService {
82
156
  await DcapQuoteVerifyService.executeLikeWithMutex.add(async () => {
83
157
  try {
84
158
  await execFileAsync(TDX_ATTEST_WRAPPER_PATH, [
159
+ "attest",
85
160
  "--report-data",
86
161
  userData.toString("hex"),
87
162
  "--output",
@@ -128,6 +203,26 @@ class DcapQuoteVerifyService {
128
203
  const output = [processError.stdout, processError.stderr].filter(Boolean).join("\n").trim();
129
204
  return output ? `${processError.message}\n${output}` : processError.message;
130
205
  }
206
+ normalizeRtmr(rtmr) {
207
+ if (Buffer.isBuffer(rtmr)) {
208
+ if (rtmr.length !== 48) {
209
+ throw new Error("rtmr must be a 48-byte Buffer or SHA-384 hex string");
210
+ }
211
+ return rtmr;
212
+ }
213
+ if (typeof rtmr !== "string") {
214
+ throw new Error("rtmr must be a 48-byte Buffer or SHA-384 hex string");
215
+ }
216
+ const normalized = rtmr.trim().replace(/^0x/i, "");
217
+ if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {
218
+ throw new Error("rtmr must be a 48-byte Buffer or SHA-384 hex string");
219
+ }
220
+ const decoded = Buffer.from(normalized, "hex");
221
+ if (decoded.length !== 48) {
222
+ throw new Error("rtmr must be a 48-byte Buffer or SHA-384 hex string");
223
+ }
224
+ return decoded;
225
+ }
131
226
  async validateMode() {
132
227
  if (DcapQuoteVerifyService.isInGramineMode) {
133
228
  return;
@@ -174,4 +269,4 @@ class DcapQuoteVerifyService {
174
269
  exports.DcapQuoteVerifyService = DcapQuoteVerifyService;
175
270
  DcapQuoteVerifyService.isInGramineMode = false;
176
271
  DcapQuoteVerifyService.executeLikeWithMutex = new p_queue_1.default({ concurrency: 1 });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGNhcC1xdW90ZS12ZXJpZnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZ3gtbmF0aXZlLW1vZHVsZS9kY2FwLXF1b3RlLXZlcmlmeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsT0FBTyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7QUFDdEcscUNBQWdFO0FBQ2hFLHFDQUtrQjtBQUNsQixzREFBNEI7QUFDNUIsMkJBQXlDO0FBQ3pDLGlEQUF5QztBQUN6Qyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLCtCQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsdUNBQW1EO0FBQ25ELHVGQUkyQztBQUUzQyxNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFTLEVBQUMsd0JBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsNERBQTRELENBQUMsQ0FBQztBQVF0SCxNQUFhLHNCQUFzQjtJQUsvQjtRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsWUFBb0I7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksK0NBQXNDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQUMsS0FBYSxFQUFFLGFBQXVCO1FBQ3JFLGFBQWEsR0FBRyxhQUFhLElBQUksS0FBSyxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUUs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
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGNhcC1xdW90ZS12ZXJpZnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZ3gtbmF0aXZlLW1vZHVsZS9kY2FwLXF1b3RlLXZlcmlmeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsT0FBTyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7QUFDdEcscUNBQWdFO0FBQ2hFLHFDQUtrQjtBQUNsQixzREFBNEI7QUFDNUIsMkJBQXlDO0FBQ3pDLGlEQUF5QztBQUN6QyxtQ0FBb0M7QUFDcEMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QiwrQkFBaUM7QUFDakMsbURBQWdEO0FBQ2hELHVDQUFtRDtBQUNuRCx1RkFLMkM7QUFDM0MsdUVBQXFGO0FBRXJGLE1BQU0sYUFBYSxHQUFHLElBQUEsZ0JBQVMsRUFBQyx3QkFBUSxDQUFDLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSw0REFBNEQsQ0FBQyxDQUFDO0FBUXRILE1BQWEsc0JBQXNCO0lBSy9CO1FBQ0ksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxZQUFvQjtRQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSwrQ0FBc0MsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxLQUFhLEVBQUUsYUFBdUI7UUFDckUsYUFBYSxHQUFHLGFBQWEsSUFBSSxLQUFLLENBQUM7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
@@ -6,5 +6,6 @@ export * from "./pki.service";
6
6
  export * from "./sev-snp";
7
7
  export * from "./sev-snp-mrenclave";
8
8
  export * from "./sev-snp-schema";
9
+ export * from "./tdx-parsed-quote-schema";
9
10
  export * from "./tdx-quote-with-event-log-schema";
10
11
  export * from "../proto/AmdSevSnp";
@@ -22,6 +22,7 @@ __exportStar(require("./pki.service"), exports);
22
22
  __exportStar(require("./sev-snp"), exports);
23
23
  __exportStar(require("./sev-snp-mrenclave"), exports);
24
24
  __exportStar(require("./sev-snp-schema"), exports);
25
+ __exportStar(require("./tdx-parsed-quote-schema"), exports);
25
26
  __exportStar(require("./tdx-quote-with-event-log-schema"), exports);
26
27
  __exportStar(require("../proto/AmdSevSnp"), exports);
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2d4LW5hdGl2ZS1tb2R1bGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsb0RBQWtDO0FBQ2xDLDhEQUE0QztBQUM1QyxnREFBOEI7QUFDOUIsNENBQTBCO0FBQzFCLHNEQUFvQztBQUNwQyxtREFBaUM7QUFDakMsb0VBQWtEO0FBQ2xELHFEQUFtQyJ9
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2d4LW5hdGl2ZS1tb2R1bGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsb0RBQWtDO0FBQ2xDLDhEQUE0QztBQUM1QyxnREFBOEI7QUFDOUIsNENBQTBCO0FBQzFCLHNEQUFvQztBQUNwQyxtREFBaUM7QUFDakMsNERBQTBDO0FBQzFDLG9FQUFrRDtBQUNsRCxxREFBbUMifQ==
@@ -0,0 +1,11 @@
1
+ import { Static } from "@sinclair/typebox";
2
+ export declare const TdxParsedQuoteJsonSchema: import("@sinclair/typebox").TObject<{
3
+ reportData: import("@sinclair/typebox").TString;
4
+ tdattributes: import("@sinclair/typebox").TString;
5
+ mrtd: import("@sinclair/typebox").TString;
6
+ rtmr0: import("@sinclair/typebox").TString;
7
+ rtmr1: import("@sinclair/typebox").TString;
8
+ rtmr2: import("@sinclair/typebox").TString;
9
+ rtmr3: import("@sinclair/typebox").TString;
10
+ }>;
11
+ export type TdxParsedQuote = Static<typeof TdxParsedQuoteJsonSchema>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TdxParsedQuoteJsonSchema = void 0;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ exports.TdxParsedQuoteJsonSchema = typebox_1.Type.Object({
6
+ reportData: typebox_1.Type.String(),
7
+ tdattributes: typebox_1.Type.String(),
8
+ mrtd: typebox_1.Type.String(),
9
+ rtmr0: typebox_1.Type.String(),
10
+ rtmr1: typebox_1.Type.String(),
11
+ rtmr2: typebox_1.Type.String(),
12
+ rtmr3: typebox_1.Type.String(),
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGR4LXBhcnNlZC1xdW90ZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2d4LW5hdGl2ZS1tb2R1bGUvdGR4LXBhcnNlZC1xdW90ZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQWlEO0FBRXBDLFFBQUEsd0JBQXdCLEdBQUcsY0FBSSxDQUFDLE1BQU0sQ0FBQztJQUNoRCxVQUFVLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUN6QixZQUFZLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUMzQixJQUFJLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUNwQixLQUFLLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUNwQixLQUFLLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUNwQixLQUFLLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtDQUN2QixDQUFDLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-protocol/addons-tee",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "The TEE trusted loader addons",
5
5
  "tags": [
6
6
  "tee"