@aptos-labs/inference-verifier 0.0.0-stage → 0.1.0
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.
- package/LICENSE +176 -0
- package/README.md +3 -2
- package/dist/bytes.d.ts +9 -0
- package/dist/bytes.js +66 -0
- package/dist/bytes.js.map +1 -0
- package/dist/dcap.d.ts +12 -0
- package/dist/dcap.js +583 -0
- package/dist/dcap.js.map +1 -0
- package/dist/der.d.ts +12 -0
- package/dist/der.js +79 -0
- package/dist/der.js.map +1 -0
- package/dist/document.d.ts +27 -0
- package/dist/document.js +159 -0
- package/dist/document.js.map +1 -0
- package/dist/error.d.ts +6 -0
- package/dist/error.js +12 -0
- package/dist/error.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/intel-root.d.ts +1 -0
- package/dist/intel-root.js +3 -0
- package/dist/intel-root.js.map +1 -0
- package/dist/json.d.ts +3 -0
- package/dist/json.js +234 -0
- package/dist/json.js.map +1 -0
- package/dist/policy.d.ts +2 -0
- package/dist/policy.js +37 -0
- package/dist/policy.js.map +1 -0
- package/dist/quote.d.ts +38 -0
- package/dist/quote.js +123 -0
- package/dist/quote.js.map +1 -0
- package/dist/sigstore.d.ts +44 -0
- package/dist/sigstore.js +385 -0
- package/dist/sigstore.js.map +1 -0
- package/dist/trusted_root.json +126 -0
- package/dist/verify.d.ts +21 -0
- package/dist/verify.js +77 -0
- package/dist/verify.js.map +1 -0
- package/package.json +39 -3
package/dist/der.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { fail } from "./error.js";
|
|
2
|
+
export function parseDer(bytes, at = 0) {
|
|
3
|
+
if (at >= bytes.length)
|
|
4
|
+
fail("encoding", "truncated DER");
|
|
5
|
+
const tag = bytes[at];
|
|
6
|
+
if ((tag & 0x1f) === 0x1f)
|
|
7
|
+
fail("encoding", "long-form DER tags are not accepted");
|
|
8
|
+
let length = bytes[at + 1];
|
|
9
|
+
if (length === undefined)
|
|
10
|
+
fail("encoding", "truncated DER length");
|
|
11
|
+
let header = 2;
|
|
12
|
+
if (length === 0x80)
|
|
13
|
+
fail("encoding", "indefinite DER lengths are not accepted");
|
|
14
|
+
if (length > 0x80) {
|
|
15
|
+
const count = length & 0x7f;
|
|
16
|
+
if (count === 0 || count > 3)
|
|
17
|
+
fail("encoding", "non-minimal or oversized DER length");
|
|
18
|
+
length = 0;
|
|
19
|
+
for (let i = 0; i < count; i += 1) {
|
|
20
|
+
const byte = bytes[at + 2 + i];
|
|
21
|
+
if (byte === undefined)
|
|
22
|
+
fail("encoding", "truncated DER length");
|
|
23
|
+
length = (length << 8) | byte;
|
|
24
|
+
}
|
|
25
|
+
if (length < 128)
|
|
26
|
+
fail("encoding", "non-minimal DER length");
|
|
27
|
+
header = 2 + count;
|
|
28
|
+
}
|
|
29
|
+
const end = at + header + length;
|
|
30
|
+
if (end > bytes.length)
|
|
31
|
+
fail("encoding", "truncated DER value");
|
|
32
|
+
return { tag, start: at, header, end, value: bytes.subarray(at + header, end) };
|
|
33
|
+
}
|
|
34
|
+
export function sequence(der) {
|
|
35
|
+
if (der.tag !== 0x30)
|
|
36
|
+
fail("encoding", "expected a DER sequence");
|
|
37
|
+
const out = [];
|
|
38
|
+
let offset = 0;
|
|
39
|
+
while (offset < der.value.length) {
|
|
40
|
+
const child = parseDer(der.value, offset);
|
|
41
|
+
out.push(child);
|
|
42
|
+
offset = child.end;
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
export function encodeOid(oid) {
|
|
47
|
+
const parts = oid.split(".").map((part) => Number(part));
|
|
48
|
+
const first = parts[0];
|
|
49
|
+
const second = parts[1];
|
|
50
|
+
if (first === undefined || second === undefined)
|
|
51
|
+
fail("encoding", "bad OID");
|
|
52
|
+
const bytes = [first * 40 + second];
|
|
53
|
+
for (const part of parts.slice(2)) {
|
|
54
|
+
const encoded = [part & 0x7f];
|
|
55
|
+
let rest = part >> 7;
|
|
56
|
+
while (rest > 0) {
|
|
57
|
+
encoded.push((rest & 0x7f) | 0x80);
|
|
58
|
+
rest >>= 7;
|
|
59
|
+
}
|
|
60
|
+
bytes.push(...encoded.reverse());
|
|
61
|
+
}
|
|
62
|
+
return Buffer.from(bytes);
|
|
63
|
+
}
|
|
64
|
+
export function childByOid(items, oid) {
|
|
65
|
+
const encoded = encodeOid(oid);
|
|
66
|
+
for (const item of items) {
|
|
67
|
+
const [name, value] = sequence(item);
|
|
68
|
+
if (name !== undefined && value !== undefined && name.tag === 0x06 && name.value.equals(encoded)) {
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
export function unwrapOctet(der) {
|
|
75
|
+
if (der.tag !== 0x04)
|
|
76
|
+
fail("encoding", "expected a DER octet string");
|
|
77
|
+
return der.value;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=der.js.map
|
package/dist/der.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"der.js","sourceRoot":"","sources":["../src/der.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const MAX_DOCUMENT_BYTES: number;
|
|
2
|
+
export declare const TDX_QUOTE_V1 = "https://tinfoil.sh/format/tdx-quote/v1";
|
|
3
|
+
export declare const TLS_KEY_FORMAT = "https://tinfoil.sh/key/spki-fp-sha256/v1";
|
|
4
|
+
export declare const HPKE_KEY_FORMAT = "https://tinfoil.sh/key/x25519-hpke/v1";
|
|
5
|
+
export declare const INTEL_PCS_V1 = "https://tinfoil.sh/collateral/intel-pcs/v1";
|
|
6
|
+
export declare const SIGSTORE_CODE_V1 = "https://tinfoil.sh/collateral/sigstore-code/v1";
|
|
7
|
+
export declare const SIGSTORE_HARDWARE_V1 = "https://inference.aptoslabs.com/collateral/sigstore-hardware-measurements/v1";
|
|
8
|
+
export interface CollateralEntry {
|
|
9
|
+
id: string;
|
|
10
|
+
role: string;
|
|
11
|
+
format: string;
|
|
12
|
+
subjects: string[];
|
|
13
|
+
data: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface CheckedDocument {
|
|
16
|
+
cpuFormat: string;
|
|
17
|
+
quote: Buffer;
|
|
18
|
+
cryptoMaterial: Buffer;
|
|
19
|
+
deviceEvidence: Buffer;
|
|
20
|
+
tlsPublicKey: string;
|
|
21
|
+
hpkePublicKey: string;
|
|
22
|
+
deviceCount: number;
|
|
23
|
+
collateral: CollateralEntry[];
|
|
24
|
+
reportData: Buffer;
|
|
25
|
+
}
|
|
26
|
+
export declare function isValidRepo(repo: string): boolean;
|
|
27
|
+
export declare function checkDocument(bytes: Uint8Array, nonce: Uint8Array): CheckedDocument;
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { decodeCanonicalBase64, decodeLowerHex, sha256 } from "./bytes.js";
|
|
2
|
+
import { fail } from "./error.js";
|
|
3
|
+
import { assertJson } from "./json.js";
|
|
4
|
+
export const MAX_DOCUMENT_BYTES = 4 * 1024 * 1024;
|
|
5
|
+
const ATTESTATION_V3 = "https://tinfoil.sh/predicate/attestation/v3";
|
|
6
|
+
const REPORT_DATA_V1 = "https://tinfoil.sh/report-data/v1";
|
|
7
|
+
const CRYPTO_MATERIAL_V1 = "https://tinfoil.sh/crypto-material/v1";
|
|
8
|
+
const DEVICE_EVIDENCE_V1 = "https://tinfoil.sh/device-evidence/v1";
|
|
9
|
+
export const TDX_QUOTE_V1 = "https://tinfoil.sh/format/tdx-quote/v1";
|
|
10
|
+
export const TLS_KEY_FORMAT = "https://tinfoil.sh/key/spki-fp-sha256/v1";
|
|
11
|
+
export const HPKE_KEY_FORMAT = "https://tinfoil.sh/key/x25519-hpke/v1";
|
|
12
|
+
export const INTEL_PCS_V1 = "https://tinfoil.sh/collateral/intel-pcs/v1";
|
|
13
|
+
export const SIGSTORE_CODE_V1 = "https://tinfoil.sh/collateral/sigstore-code/v1";
|
|
14
|
+
export const SIGSTORE_HARDWARE_V1 = "https://inference.aptoslabs.com/collateral/sigstore-hardware-measurements/v1";
|
|
15
|
+
function object(value, what) {
|
|
16
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
17
|
+
fail("envelope", `${what} is not an object`);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function stringField(source, key, what) {
|
|
22
|
+
const value = source[key];
|
|
23
|
+
if (typeof value !== "string")
|
|
24
|
+
fail("envelope", `${what}.${key} is not a string`);
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function only(source, keys, what) {
|
|
28
|
+
for (const key of Object.keys(source)) {
|
|
29
|
+
if (!keys.includes(key))
|
|
30
|
+
fail("envelope", `${what} has unknown field ${key}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function isValidRepo(repo) {
|
|
34
|
+
const parts = repo.split("/");
|
|
35
|
+
if (parts.length !== 2)
|
|
36
|
+
return false;
|
|
37
|
+
return parts.every((part) => part.length > 0 && /^[A-Za-z0-9._-]+$/.test(part));
|
|
38
|
+
}
|
|
39
|
+
export function checkDocument(bytes, nonce) {
|
|
40
|
+
if (bytes.length > MAX_DOCUMENT_BYTES)
|
|
41
|
+
fail("envelope", "document exceeds 4 MiB");
|
|
42
|
+
if (nonce.length !== 32)
|
|
43
|
+
fail("envelope", "nonce must be 32 bytes");
|
|
44
|
+
const text = Buffer.from(bytes).toString("utf8");
|
|
45
|
+
if (!Buffer.from(text, "utf8").equals(Buffer.from(bytes))) {
|
|
46
|
+
fail("encoding", "document is not valid UTF-8");
|
|
47
|
+
}
|
|
48
|
+
const raw = object(assertJson(text, "encoding"), "document");
|
|
49
|
+
only(raw, ["format", "challenge", "cpu_evidence", "crypto_material", "device_evidence", "collateral"], "document");
|
|
50
|
+
if (raw.format !== ATTESTATION_V3)
|
|
51
|
+
fail("envelope", "unsupported attestation format");
|
|
52
|
+
const challenge = object(raw.challenge, "challenge");
|
|
53
|
+
only(challenge, ["nonce", "report_data", "report_data_algorithm"], "challenge");
|
|
54
|
+
if (challenge.report_data_algorithm !== REPORT_DATA_V1) {
|
|
55
|
+
fail("envelope", "unsupported report data algorithm");
|
|
56
|
+
}
|
|
57
|
+
const nonceHex = stringField(challenge, "nonce", "challenge");
|
|
58
|
+
if (nonceHex !== Buffer.from(nonce).toString("hex"))
|
|
59
|
+
fail("envelope", "nonce mismatch");
|
|
60
|
+
decodeLowerHex(nonceHex, "challenge.nonce", 32);
|
|
61
|
+
const claimedReport = decodeLowerHex(stringField(challenge, "report_data", "challenge"), "challenge.report_data", 64);
|
|
62
|
+
const cpu = object(raw.cpu_evidence, "cpu_evidence");
|
|
63
|
+
only(cpu, ["format", "report_base64", "endorsed"], "cpu_evidence");
|
|
64
|
+
const endorsed = object(cpu.endorsed, "cpu_evidence.endorsed");
|
|
65
|
+
only(endorsed, ["crypto_material_hash", "device_evidence_hash"], "cpu_evidence.endorsed");
|
|
66
|
+
const crypto = decodeCanonicalBase64(stringField(raw, "crypto_material", "document"), "crypto_material");
|
|
67
|
+
const devices = decodeCanonicalBase64(stringField(raw, "device_evidence", "document"), "device_evidence");
|
|
68
|
+
const cryptoHash = sha256(crypto);
|
|
69
|
+
const deviceHash = sha256(devices);
|
|
70
|
+
if (hexOf(cryptoHash) !== stringField(endorsed, "crypto_material_hash", "endorsed")) {
|
|
71
|
+
fail("envelope", "crypto_material hash mismatch");
|
|
72
|
+
}
|
|
73
|
+
if (hexOf(deviceHash) !== stringField(endorsed, "device_evidence_hash", "endorsed")) {
|
|
74
|
+
fail("envelope", "device_evidence hash mismatch");
|
|
75
|
+
}
|
|
76
|
+
const report = reportData(nonce, cryptoHash, deviceHash);
|
|
77
|
+
if (!report.equals(claimedReport))
|
|
78
|
+
fail("envelope", "report data mismatch");
|
|
79
|
+
const cryptoJson = object(assertJson(crypto.toString("utf8"), "encoding"), "crypto_material");
|
|
80
|
+
only(cryptoJson, ["format", "items"], "crypto_material");
|
|
81
|
+
if (cryptoJson.format !== CRYPTO_MATERIAL_V1)
|
|
82
|
+
fail("envelope", "unsupported crypto material format");
|
|
83
|
+
if (!Array.isArray(cryptoJson.items))
|
|
84
|
+
fail("envelope", "crypto_material.items is not an array");
|
|
85
|
+
const keys = new Map();
|
|
86
|
+
for (const item of cryptoJson.items) {
|
|
87
|
+
const record = object(item, "crypto_material item");
|
|
88
|
+
only(record, ["id", "format", "data"], "crypto_material item");
|
|
89
|
+
const id = stringField(record, "id", "crypto_material item");
|
|
90
|
+
if (keys.has(id))
|
|
91
|
+
fail("envelope", `duplicate crypto_material id ${id}`);
|
|
92
|
+
keys.set(id, {
|
|
93
|
+
format: stringField(record, "format", "crypto_material item"),
|
|
94
|
+
data: stringField(record, "data", "crypto_material item"),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const tls = requiredKey(keys, "tls", TLS_KEY_FORMAT);
|
|
98
|
+
const hpke = requiredKey(keys, "hpke", HPKE_KEY_FORMAT);
|
|
99
|
+
const deviceJson = object(assertJson(devices.toString("utf8"), "encoding"), "device_evidence");
|
|
100
|
+
only(deviceJson, ["format", "items"], "device_evidence");
|
|
101
|
+
if (deviceJson.format !== DEVICE_EVIDENCE_V1)
|
|
102
|
+
fail("envelope", "unsupported device evidence format");
|
|
103
|
+
if (!Array.isArray(deviceJson.items))
|
|
104
|
+
fail("envelope", "device_evidence.items is not an array");
|
|
105
|
+
const collateral = parseCollateral(raw.collateral);
|
|
106
|
+
return {
|
|
107
|
+
cpuFormat: stringField(cpu, "format", "cpu_evidence"),
|
|
108
|
+
quote: decodeCanonicalBase64(stringField(cpu, "report_base64", "cpu_evidence"), "quote"),
|
|
109
|
+
cryptoMaterial: crypto,
|
|
110
|
+
deviceEvidence: devices,
|
|
111
|
+
tlsPublicKey: tls,
|
|
112
|
+
hpkePublicKey: hpke,
|
|
113
|
+
deviceCount: deviceJson.items.length,
|
|
114
|
+
collateral,
|
|
115
|
+
reportData: report,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function requiredKey(keys, id, format) {
|
|
119
|
+
const item = keys.get(id);
|
|
120
|
+
if (item === undefined || item.format !== format)
|
|
121
|
+
fail("policy", `missing ${id} key`);
|
|
122
|
+
return decodeLowerHex(item.data, id, 32).toString("hex");
|
|
123
|
+
}
|
|
124
|
+
function parseCollateral(value) {
|
|
125
|
+
if (!Array.isArray(value))
|
|
126
|
+
fail("envelope", "collateral is not an array");
|
|
127
|
+
const seen = new Set();
|
|
128
|
+
return value.map((entry) => {
|
|
129
|
+
const record = object(entry, "collateral");
|
|
130
|
+
only(record, ["id", "role", "format", "subjects", "data"], "collateral");
|
|
131
|
+
const id = stringField(record, "id", "collateral");
|
|
132
|
+
if (seen.has(id))
|
|
133
|
+
fail("envelope", `duplicate collateral id ${id}`);
|
|
134
|
+
seen.add(id);
|
|
135
|
+
const role = stringField(record, "role", "collateral");
|
|
136
|
+
if (role !== "endorsement" && role !== "reference-values") {
|
|
137
|
+
fail("envelope", `unknown collateral role ${role}`);
|
|
138
|
+
}
|
|
139
|
+
const subjects = record.subjects ?? [];
|
|
140
|
+
if (!Array.isArray(subjects) || subjects.some((subject) => typeof subject !== "string")) {
|
|
141
|
+
fail("envelope", "collateral subjects are not strings");
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
id,
|
|
145
|
+
role,
|
|
146
|
+
format: stringField(record, "format", "collateral"),
|
|
147
|
+
subjects: subjects,
|
|
148
|
+
data: object(record.data, "collateral data"),
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function reportData(nonce, cryptoHash, deviceHash) {
|
|
153
|
+
const hash = sha256(Buffer.concat([Buffer.from(REPORT_DATA_V1), Buffer.from(nonce), cryptoHash, deviceHash]));
|
|
154
|
+
return Buffer.concat([hash, Buffer.alloc(32)]);
|
|
155
|
+
}
|
|
156
|
+
function hexOf(value) {
|
|
157
|
+
return value.toString("hex");
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|
package/dist/error.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type VerificationCategory = "envelope" | "encoding" | "dcap" | "tdx" | "provenance" | "policy";
|
|
2
|
+
export declare class VerificationError extends Error {
|
|
3
|
+
readonly category: VerificationCategory;
|
|
4
|
+
constructor(category: VerificationCategory, message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function fail(category: VerificationCategory, message: string): never;
|
package/dist/error.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class VerificationError extends Error {
|
|
2
|
+
category;
|
|
3
|
+
constructor(category, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "VerificationError";
|
|
6
|
+
this.category = category;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function fail(category, message) {
|
|
10
|
+
throw new VerificationError(category, message);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,QAAQ,CAAuB;IAExC,YAAY,QAA8B,EAAE,OAAe;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAC,QAA8B,EAAE,OAAe;IAClE,MAAM,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type RouterEvidence } from "./verify.js";
|
|
2
|
+
export type { RouterEvidence };
|
|
3
|
+
export { VerificationError, type VerificationCategory } from "./error.js";
|
|
4
|
+
export declare function verifyRouterDocument(bytes: Uint8Array, nonce: Uint8Array, repo: string, nowSecs: number): RouterEvidence;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAuB,MAAM,aAAa,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAA6B,MAAM,YAAY,CAAC;AAE1E,MAAM,UAAU,oBAAoB,CAClC,KAAiB,EACjB,KAAiB,EACjB,IAAY,EACZ,OAAe;IAEf,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const INTEL_SGX_ROOT_CA_DER: Buffer<ArrayBuffer>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Intel SGX Root CA, the production trust anchor pinned by dcap-qvl.
|
|
2
|
+
export const INTEL_SGX_ROOT_CA_DER = Buffer.from('MIICjzCCAjSgAwIBAgIUImUM1lqdNInzg7SVUr9QGzknBqwwCgYIKoZIzj0EAwIwaDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYTAlVTMB4XDTE4MDUyMTEwNDUxMFoXDTQ5MTIzMTIzNTk1OVowaDEaMBgGA1UEAwwRSW50ZWwgU0dYIFJvb3QgQ0ExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEC6nEwMDIYZOj/iPWsCzaEKi71OiOSLRFhWGjbnBVJfVnkY4u3IjkDYYL0MxO4mqsyYjlBalTVYxFP2sJBK5zlKOBuzCBuDAfBgNVHSMEGDAWgBQiZQzWWp00ifODtJVSv1AbOScGrDBSBgNVHR8ESzBJMEegRaBDhkFodHRwczovL2NlcnRpZmljYXRlcy50cnVzdGVkc2VydmljZXMuaW50ZWwuY29tL0ludGVsU0dYUm9vdENBLmRlcjAdBgNVHQ4EFgQUImUM1lqdNInzg7SVUr9QGzknBqwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYIKoZIzj0EAwIDSQAwRgIhAOW/5QkR+S9CiSDcNoowLuPRLsWGf/Yi7GSX94BgwTwgAiEA4J0lrHoMs+Xo5o/sX6O9QWxHRAvZUGOdRQ7cvqRXaqI=', "base64");
|
|
3
|
+
//# sourceMappingURL=intel-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intel-root.js","sourceRoot":"","sources":["../src/intel-root.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAChD,k3BAAk3B,EAAE,QAAQ,CAAC,CAAC"}
|
package/dist/json.d.ts
ADDED
package/dist/json.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { fail } from "./error.js";
|
|
2
|
+
function skip(cursor) {
|
|
3
|
+
while (cursor.i < cursor.text.length && " \n\r\t".includes(cursor.text[cursor.i])) {
|
|
4
|
+
cursor.i += 1;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function failAt(category, message) {
|
|
8
|
+
fail(category, message);
|
|
9
|
+
}
|
|
10
|
+
function parseValue(cursor, category) {
|
|
11
|
+
skip(cursor);
|
|
12
|
+
const ch = cursor.text[cursor.i];
|
|
13
|
+
if (ch === "{")
|
|
14
|
+
parseObject(cursor, category);
|
|
15
|
+
else if (ch === "[")
|
|
16
|
+
parseArray(cursor, category);
|
|
17
|
+
else if (ch === '"')
|
|
18
|
+
parseString(cursor, category);
|
|
19
|
+
else if (ch === "t" || ch === "f" || ch === "n")
|
|
20
|
+
parseLiteral(cursor, category);
|
|
21
|
+
else if (ch === "-" || (ch !== undefined && ch >= "0" && ch <= "9"))
|
|
22
|
+
parseNumber(cursor, category);
|
|
23
|
+
else
|
|
24
|
+
failAt(category, "malformed JSON");
|
|
25
|
+
}
|
|
26
|
+
function parseObject(cursor, category) {
|
|
27
|
+
cursor.i += 1;
|
|
28
|
+
skip(cursor);
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
if (cursor.text[cursor.i] === "}") {
|
|
31
|
+
cursor.i += 1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
for (;;) {
|
|
35
|
+
if (cursor.text[cursor.i] !== '"')
|
|
36
|
+
failAt(category, "JSON object key is not a string");
|
|
37
|
+
const key = parseString(cursor, category);
|
|
38
|
+
if (seen.has(key))
|
|
39
|
+
failAt(category, `JSON object has a duplicate key ${key}`);
|
|
40
|
+
seen.add(key);
|
|
41
|
+
skip(cursor);
|
|
42
|
+
if (cursor.text[cursor.i] !== ":")
|
|
43
|
+
failAt(category, "JSON object is missing a colon");
|
|
44
|
+
cursor.i += 1;
|
|
45
|
+
parseValue(cursor, category);
|
|
46
|
+
skip(cursor);
|
|
47
|
+
const next = cursor.text[cursor.i];
|
|
48
|
+
if (next === ",") {
|
|
49
|
+
cursor.i += 1;
|
|
50
|
+
skip(cursor);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (next === "}") {
|
|
54
|
+
cursor.i += 1;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
failAt(category, "JSON object is not closed");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function parseArray(cursor, category) {
|
|
61
|
+
cursor.i += 1;
|
|
62
|
+
skip(cursor);
|
|
63
|
+
if (cursor.text[cursor.i] === "]") {
|
|
64
|
+
cursor.i += 1;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
for (;;) {
|
|
68
|
+
parseValue(cursor, category);
|
|
69
|
+
skip(cursor);
|
|
70
|
+
const next = cursor.text[cursor.i];
|
|
71
|
+
if (next === ",") {
|
|
72
|
+
cursor.i += 1;
|
|
73
|
+
skip(cursor);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (next === "]") {
|
|
77
|
+
cursor.i += 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
failAt(category, "JSON array is not closed");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function parseString(cursor, category) {
|
|
84
|
+
if (cursor.text[cursor.i] !== '"')
|
|
85
|
+
failAt(category, "expected a JSON string");
|
|
86
|
+
cursor.i += 1;
|
|
87
|
+
let out = "";
|
|
88
|
+
while (cursor.i < cursor.text.length) {
|
|
89
|
+
const ch = cursor.text[cursor.i];
|
|
90
|
+
if (ch === '"') {
|
|
91
|
+
cursor.i += 1;
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
if (ch === "\\") {
|
|
95
|
+
const esc = cursor.text[cursor.i + 1];
|
|
96
|
+
if (esc === "u") {
|
|
97
|
+
const hex = cursor.text.slice(cursor.i + 2, cursor.i + 6);
|
|
98
|
+
if (!/^[0-9a-fA-F]{4}$/.test(hex))
|
|
99
|
+
failAt(category, "bad unicode escape");
|
|
100
|
+
const code = Number.parseInt(hex, 16);
|
|
101
|
+
cursor.i += 6;
|
|
102
|
+
if (code >= 0xd800 && code <= 0xdbff) {
|
|
103
|
+
if (cursor.text.slice(cursor.i, cursor.i + 2) !== "\\u") {
|
|
104
|
+
failAt(category, "lone surrogate in JSON string");
|
|
105
|
+
}
|
|
106
|
+
const low = cursor.text.slice(cursor.i + 2, cursor.i + 6);
|
|
107
|
+
if (!/^[0-9a-fA-F]{4}$/.test(low))
|
|
108
|
+
failAt(category, "bad unicode escape");
|
|
109
|
+
const lowCode = Number.parseInt(low, 16);
|
|
110
|
+
if (lowCode < 0xdc00 || lowCode > 0xdfff)
|
|
111
|
+
failAt(category, "lone surrogate in JSON string");
|
|
112
|
+
cursor.i += 6;
|
|
113
|
+
out += String.fromCodePoint(0x10000 + ((code - 0xd800) << 10) + (lowCode - 0xdc00));
|
|
114
|
+
}
|
|
115
|
+
else if (code >= 0xdc00 && code <= 0xdfff) {
|
|
116
|
+
failAt(category, "lone surrogate in JSON string");
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
out += String.fromCharCode(code);
|
|
120
|
+
}
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const simple = {
|
|
124
|
+
'"': '"',
|
|
125
|
+
"\\": "\\",
|
|
126
|
+
"/": "/",
|
|
127
|
+
b: "\b",
|
|
128
|
+
f: "\f",
|
|
129
|
+
n: "\n",
|
|
130
|
+
r: "\r",
|
|
131
|
+
t: "\t",
|
|
132
|
+
};
|
|
133
|
+
if (esc === undefined || !(esc in simple))
|
|
134
|
+
failAt(category, "bad JSON escape");
|
|
135
|
+
out += simple[esc];
|
|
136
|
+
cursor.i += 2;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (ch < " ")
|
|
140
|
+
failAt(category, "raw control character in JSON string");
|
|
141
|
+
out += ch;
|
|
142
|
+
cursor.i += 1;
|
|
143
|
+
}
|
|
144
|
+
failAt(category, "unterminated JSON string");
|
|
145
|
+
}
|
|
146
|
+
function parseLiteral(cursor, category) {
|
|
147
|
+
const rest = cursor.text.slice(cursor.i);
|
|
148
|
+
for (const word of ["true", "false", "null"]) {
|
|
149
|
+
if (rest.startsWith(word)) {
|
|
150
|
+
cursor.i += word.length;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
failAt(category, "bad JSON literal");
|
|
155
|
+
}
|
|
156
|
+
function parseNumber(cursor, category) {
|
|
157
|
+
const start = cursor.i;
|
|
158
|
+
if (cursor.text[cursor.i] === "-")
|
|
159
|
+
cursor.i += 1;
|
|
160
|
+
if (cursor.text[cursor.i] === "0") {
|
|
161
|
+
cursor.i += 1;
|
|
162
|
+
}
|
|
163
|
+
else if (cursor.text[cursor.i] >= "1" && cursor.text[cursor.i] <= "9") {
|
|
164
|
+
while (cursor.text[cursor.i] >= "0" && cursor.text[cursor.i] <= "9")
|
|
165
|
+
cursor.i += 1;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
failAt(category, "bad JSON number");
|
|
169
|
+
}
|
|
170
|
+
if (cursor.text[cursor.i] === ".") {
|
|
171
|
+
cursor.i += 1;
|
|
172
|
+
if (cursor.text[cursor.i] < "0" || cursor.text[cursor.i] > "9")
|
|
173
|
+
failAt(category, "bad JSON number");
|
|
174
|
+
while (cursor.text[cursor.i] >= "0" && cursor.text[cursor.i] <= "9")
|
|
175
|
+
cursor.i += 1;
|
|
176
|
+
}
|
|
177
|
+
if (cursor.text[cursor.i] === "e" || cursor.text[cursor.i] === "E") {
|
|
178
|
+
failAt(category, "JSON numbers with exponents are not accepted");
|
|
179
|
+
}
|
|
180
|
+
const raw = cursor.text.slice(start, cursor.i);
|
|
181
|
+
if (raw.startsWith("-0") || raw.startsWith("00"))
|
|
182
|
+
failAt(category, "non-canonical JSON number");
|
|
183
|
+
const value = Number(raw);
|
|
184
|
+
if (!Number.isFinite(value))
|
|
185
|
+
failAt(category, "JSON number is not finite");
|
|
186
|
+
}
|
|
187
|
+
export function assertJson(text, category) {
|
|
188
|
+
const cursor = { text, i: 0 };
|
|
189
|
+
parseValue(cursor, category);
|
|
190
|
+
skip(cursor);
|
|
191
|
+
if (cursor.i !== text.length)
|
|
192
|
+
failAt(category, "trailing data after JSON");
|
|
193
|
+
return JSON.parse(text);
|
|
194
|
+
}
|
|
195
|
+
export function rawObjectMember(text, key, category) {
|
|
196
|
+
const cursor = { text, i: 0 };
|
|
197
|
+
skip(cursor);
|
|
198
|
+
if (cursor.text[cursor.i] !== "{")
|
|
199
|
+
fail(category, "expected a JSON object");
|
|
200
|
+
cursor.i += 1;
|
|
201
|
+
skip(cursor);
|
|
202
|
+
let found;
|
|
203
|
+
if (cursor.text[cursor.i] === "}")
|
|
204
|
+
fail(category, `JSON object has no ${key}`);
|
|
205
|
+
for (;;) {
|
|
206
|
+
const name = parseString(cursor, category);
|
|
207
|
+
skip(cursor);
|
|
208
|
+
if (cursor.text[cursor.i] !== ":")
|
|
209
|
+
fail(category, "JSON object is missing a colon");
|
|
210
|
+
cursor.i += 1;
|
|
211
|
+
skip(cursor);
|
|
212
|
+
const start = cursor.i;
|
|
213
|
+
parseValue(cursor, category);
|
|
214
|
+
if (name === key) {
|
|
215
|
+
if (found !== undefined)
|
|
216
|
+
fail(category, `duplicate ${key}`);
|
|
217
|
+
found = text.slice(start, cursor.i);
|
|
218
|
+
}
|
|
219
|
+
skip(cursor);
|
|
220
|
+
const next = cursor.text[cursor.i];
|
|
221
|
+
if (next === ",") {
|
|
222
|
+
cursor.i += 1;
|
|
223
|
+
skip(cursor);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (next === "}")
|
|
227
|
+
break;
|
|
228
|
+
fail(category, "JSON object is not closed");
|
|
229
|
+
}
|
|
230
|
+
if (found === undefined)
|
|
231
|
+
fail(category, `JSON object has no ${key}`);
|
|
232
|
+
return found;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
ADDED
package/dist/policy.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { zero } from "./bytes.js";
|
|
2
|
+
import { fail } from "./error.js";
|
|
3
|
+
const MINIMUM_EVAL = 19;
|
|
4
|
+
const MINIMUM_SVN = [3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
5
|
+
const TD_ATTRIBUTES = Buffer.from("0000001000000000", "hex");
|
|
6
|
+
const XFAM = Buffer.from("e702060000000000", "hex");
|
|
7
|
+
const MRSEAMS = new Set([
|
|
8
|
+
"476a2997c62bccc78370913d0a80b956e3721b24272bc66c4d6307ced4be2865c40e26afac75f12df3425b03eb59ea7c",
|
|
9
|
+
"7bf063280e94fb051f5dd7b1fc59ce9aac42bb961df8d44b709c9b0ff87a7b4df648657ba6d1189589feab1d5a3c9a9d",
|
|
10
|
+
"d0d80c085166ba78ccc69af268e5753cf0f3394523cb4ff7c50b08d9265c82489c099c377be6a400e4d2b57da924012c",
|
|
11
|
+
"489e585f1c54bc5a02066c8c6ec21619ff0334ec6f21e07e2a35202c59183789c8057e7d97dd591bb08314b185819e72",
|
|
12
|
+
"fca4ff221293807e3d247416299ca39a236872df4eb414567ca96072d3fde7dead740f807eefe2f7d938499c03cc8aba",
|
|
13
|
+
"aef4ed3e686fe6cf44c9a8d1cc63105443b558ac4f40c282abf78271e9a4586c50408c8584c7b43fd21edb736700ba5f",
|
|
14
|
+
]);
|
|
15
|
+
export function appraiseTdx(td, version, vendor, evalData) {
|
|
16
|
+
if (version !== 4)
|
|
17
|
+
fail("tdx", `unsupported TDX quote version ${version}`);
|
|
18
|
+
if (!vendor.equals(Buffer.from("939a7233f79c4ca9940a0db3957f0607", "hex"))) {
|
|
19
|
+
fail("tdx", "unexpected QE vendor ID");
|
|
20
|
+
}
|
|
21
|
+
if (evalData < MINIMUM_EVAL)
|
|
22
|
+
fail("tdx", `TCB evaluation data number ${evalData} is below ${MINIMUM_EVAL}`);
|
|
23
|
+
for (let i = 0; i < MINIMUM_SVN.length; i += 1) {
|
|
24
|
+
if (td.teeTcbSvn[i] < MINIMUM_SVN[i]) {
|
|
25
|
+
fail("tdx", `TEE TCB SVN component ${i} is below the minimum`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (!MRSEAMS.has(td.mrSeam.toString("hex")))
|
|
29
|
+
fail("tdx", "TDX module measurement is not accepted");
|
|
30
|
+
if (!td.tdAttributes.equals(TD_ATTRIBUTES))
|
|
31
|
+
fail("tdx", "TD_ATTRIBUTES mismatch");
|
|
32
|
+
if (!td.xfam.equals(XFAM))
|
|
33
|
+
fail("tdx", "XFAM mismatch");
|
|
34
|
+
if (!zero(td.rtmrs[3]))
|
|
35
|
+
fail("tdx", "RTMR3 must be zero");
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=policy.js.map
|