secretvm-verify 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/README.md +312 -0
- package/dist/agent.d.ts +29 -0
- package/dist/agent.js +353 -0
- package/dist/agent.js.map +1 -0
- package/dist/amd.d.ts +2 -0
- package/dist/amd.js +287 -0
- package/dist/amd.js.map +1 -0
- package/dist/artifacts.d.ts +35 -0
- package/dist/artifacts.js +105 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/chains.d.ts +15 -0
- package/dist/chains.js +50 -0
- package/dist/chains.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +318 -0
- package/dist/cli.js.map +1 -0
- package/dist/cpu.d.ts +9 -0
- package/dist/cpu.js +54 -0
- package/dist/cpu.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/nvidia.d.ts +2 -0
- package/dist/nvidia.js +182 -0
- package/dist/nvidia.js.map +1 -0
- package/dist/rtmr.d.ts +10 -0
- package/dist/rtmr.js +45 -0
- package/dist/rtmr.js.map +1 -0
- package/dist/sevGctx.d.ts +38 -0
- package/dist/sevGctx.js +213 -0
- package/dist/sevGctx.js.map +1 -0
- package/dist/tdx.d.ts +11 -0
- package/dist/tdx.js +371 -0
- package/dist/tdx.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/vm.d.ts +6 -0
- package/dist/vm.js +208 -0
- package/dist/vm.js.map +1 -0
- package/dist/workload.d.ts +62 -0
- package/dist/workload.js +253 -0
- package/dist/workload.js.map +1 -0
- package/package.json +39 -0
package/dist/rtmr.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
// Initial MR value: 48 zero bytes
|
|
3
|
+
const INIT_MR = Buffer.alloc(48).toString("hex");
|
|
4
|
+
function measureSha256(data) {
|
|
5
|
+
return crypto.createHash("sha256").update(data).digest();
|
|
6
|
+
}
|
|
7
|
+
function replayRtmr(history) {
|
|
8
|
+
if (history.length === 0)
|
|
9
|
+
return INIT_MR;
|
|
10
|
+
let mr = Buffer.alloc(48);
|
|
11
|
+
for (const entry of history) {
|
|
12
|
+
const entryBytes = Buffer.from(entry, "hex");
|
|
13
|
+
let padded;
|
|
14
|
+
if (entryBytes.length < 48) {
|
|
15
|
+
padded = Buffer.concat([entryBytes, Buffer.alloc(48 - entryBytes.length)]);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
padded = entryBytes;
|
|
19
|
+
}
|
|
20
|
+
const h = crypto.createHash("sha384");
|
|
21
|
+
h.update(Buffer.concat([mr, padded]));
|
|
22
|
+
mr = h.digest().subarray(0, 48);
|
|
23
|
+
}
|
|
24
|
+
return mr.toString("hex");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Calculate RTMR3 from a docker-compose file content and rootfs_data.
|
|
28
|
+
*
|
|
29
|
+
* Mirrors portal logic exactly:
|
|
30
|
+
* 1. Parse docker-compose YAML and re-stringify (normalise)
|
|
31
|
+
* 2. SHA-256 of normalised YAML bytes → log[0]
|
|
32
|
+
* 3. rootfs_data (hex) → log[1]
|
|
33
|
+
* 4. replayRtmr(log)
|
|
34
|
+
*/
|
|
35
|
+
export function calculateRtmr3(dockerCompose, rootfsData) {
|
|
36
|
+
const log = [];
|
|
37
|
+
// Hash raw bytes directly (no YAML normalization) — matches portal's Buffer path
|
|
38
|
+
const composeBuffer = typeof dockerCompose === "string"
|
|
39
|
+
? Buffer.from(dockerCompose)
|
|
40
|
+
: dockerCompose;
|
|
41
|
+
log.push(measureSha256(composeBuffer).toString("hex"));
|
|
42
|
+
log.push(rootfsData.toLowerCase().replace(/^0x/, ""));
|
|
43
|
+
return replayRtmr(log);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=rtmr.js.map
|
package/dist/rtmr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtmr.js","sourceRoot":"","sources":["../src/rtmr.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,kCAAkC;AAClC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEjD,SAAS,aAAa,CAAC,IAAY;IAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,UAAU,CAAC,OAAiB;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAEzC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,MAAc,CAAC;QACnB,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,UAAU,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC1B,aAA8B,EAC9B,UAAkB;IAElB,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,iFAAiF;IACjF,MAAM,aAAa,GACf,OAAO,aAAa,KAAK,QAAQ;QAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC,CAAC,aAAa,CAAC;IAExB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEV-SNP GCTX launch-digest computation.
|
|
3
|
+
* Ported from sev-snp-measure (IBM, Apache-2.0).
|
|
4
|
+
*/
|
|
5
|
+
/** vcpu_sig for EPYC / EPYC-v1..v4: amd_cpu_sig(family=23, model=1, stepping=2) */
|
|
6
|
+
export declare const VCPU_SIG_EPYC = 8392466;
|
|
7
|
+
export declare const GUEST_FEATURES = 1;
|
|
8
|
+
export declare const BSP_EIP = 4294967280;
|
|
9
|
+
export declare const VCPU_MAP: Record<string, number>;
|
|
10
|
+
export declare function gctxUpdateNormalPages(ld: Buffer, startGpa: bigint, data: Buffer): Buffer;
|
|
11
|
+
export declare function gctxUpdateVmsaPage(ld: Buffer, data: Buffer): Buffer;
|
|
12
|
+
export declare function gctxUpdateZeroPages(ld: Buffer, gpa: bigint, size: number): Buffer;
|
|
13
|
+
export declare function gctxUpdateSecretsPage(ld: Buffer, gpa: bigint): Buffer;
|
|
14
|
+
export declare function gctxUpdateCpuidPage(ld: Buffer, gpa: bigint): Buffer;
|
|
15
|
+
export declare function buildHashesPage(kernelHashHex: string, initrdHashHex: string, append: string, offsetInPage: number): Buffer;
|
|
16
|
+
export declare function buildVmsaPage(eip: number, vcpuSig: number, guestFeatures: bigint): Buffer;
|
|
17
|
+
export interface SevRegistryEntry {
|
|
18
|
+
vm_type: string;
|
|
19
|
+
artifacts_ver: string;
|
|
20
|
+
kernel_hash: string;
|
|
21
|
+
initrd_hash: string;
|
|
22
|
+
vcpu_type: string;
|
|
23
|
+
rootfs_hash: string;
|
|
24
|
+
ovmf_hash: string;
|
|
25
|
+
sev_hashes_table_gpa: number;
|
|
26
|
+
sev_es_reset_eip: number;
|
|
27
|
+
ovmf_sections: Array<{
|
|
28
|
+
gpa: number;
|
|
29
|
+
size: number;
|
|
30
|
+
section_type: number;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
export declare function calcSevMeasurement(entry: SevRegistryEntry, vcpus: number, cmdline: string): string;
|
|
34
|
+
export declare function parseSevFamilyId(familyIdBytes: Buffer): {
|
|
35
|
+
vmType: string;
|
|
36
|
+
templateName: string;
|
|
37
|
+
vcpus: number;
|
|
38
|
+
} | null;
|
package/dist/sevGctx.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEV-SNP GCTX launch-digest computation.
|
|
3
|
+
* Ported from sev-snp-measure (IBM, Apache-2.0).
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Constants
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const LD_SIZE = 48; // SHA-384 digest size
|
|
10
|
+
const ZEROS = Buffer.alloc(LD_SIZE);
|
|
11
|
+
const VMSA_GPA = BigInt("0xFFFFFFFFF000");
|
|
12
|
+
/** vcpu_sig for EPYC / EPYC-v1..v4: amd_cpu_sig(family=23, model=1, stepping=2) */
|
|
13
|
+
export const VCPU_SIG_EPYC = 0x00800f12;
|
|
14
|
+
export const GUEST_FEATURES = 0x1;
|
|
15
|
+
export const BSP_EIP = 0xfffffff0;
|
|
16
|
+
export const VCPU_MAP = {
|
|
17
|
+
small: 1,
|
|
18
|
+
medium: 2,
|
|
19
|
+
large: 4,
|
|
20
|
+
"2xlarge": 8,
|
|
21
|
+
};
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// SHA-384 helpers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
function sha384(data) {
|
|
26
|
+
return createHash("sha384").update(data).digest();
|
|
27
|
+
}
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// GCTX page-update primitive
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
function gctxUpdate(ld, pageType, gpa, contents) {
|
|
32
|
+
// PAGE_INFO structure per AMD SNP spec §8.17.2 Table 67
|
|
33
|
+
const buf = Buffer.allocUnsafe(0x70);
|
|
34
|
+
ld.copy(buf, 0); // current launch digest (48 bytes)
|
|
35
|
+
contents.copy(buf, 48); // page content hash (48 bytes)
|
|
36
|
+
buf.writeUInt16LE(0x70, 96); // page_info_len
|
|
37
|
+
buf.writeUInt8(pageType, 98); // page_type
|
|
38
|
+
buf.writeUInt8(0, 99); // is_imi
|
|
39
|
+
buf.writeUInt8(0, 100); // vmpl3_perms
|
|
40
|
+
buf.writeUInt8(0, 101); // vmpl2_perms
|
|
41
|
+
buf.writeUInt8(0, 102); // vmpl1_perms
|
|
42
|
+
buf.writeUInt8(0, 103); // reserved
|
|
43
|
+
buf.writeBigUInt64LE(gpa, 104);
|
|
44
|
+
return sha384(buf);
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Page-type update helpers
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
export function gctxUpdateNormalPages(ld, startGpa, data) {
|
|
50
|
+
for (let offset = 0; offset < data.length; offset += 4096) {
|
|
51
|
+
const page = data.subarray(offset, offset + 4096);
|
|
52
|
+
ld = gctxUpdate(ld, 0x01, startGpa + BigInt(offset), sha384(page));
|
|
53
|
+
}
|
|
54
|
+
return ld;
|
|
55
|
+
}
|
|
56
|
+
export function gctxUpdateVmsaPage(ld, data) {
|
|
57
|
+
return gctxUpdate(ld, 0x02, VMSA_GPA, sha384(data));
|
|
58
|
+
}
|
|
59
|
+
export function gctxUpdateZeroPages(ld, gpa, size) {
|
|
60
|
+
for (let offset = 0; offset < size; offset += 4096) {
|
|
61
|
+
ld = gctxUpdate(ld, 0x03, gpa + BigInt(offset), ZEROS);
|
|
62
|
+
}
|
|
63
|
+
return ld;
|
|
64
|
+
}
|
|
65
|
+
export function gctxUpdateSecretsPage(ld, gpa) {
|
|
66
|
+
return gctxUpdate(ld, 0x05, gpa, ZEROS);
|
|
67
|
+
}
|
|
68
|
+
export function gctxUpdateCpuidPage(ld, gpa) {
|
|
69
|
+
return gctxUpdate(ld, 0x06, gpa, ZEROS);
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Kernel hashes page builder
|
|
73
|
+
// Mirrors QEMU's sev_hashes_page construction exactly.
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
const SEV_HASH_TABLE_HEADER_GUID = "9438d606-4f22-4cc9-b479-a793d411fd21";
|
|
76
|
+
const SEV_KERNEL_ENTRY_GUID = "4de79437-abd2-427f-b835-d5b172d2045b";
|
|
77
|
+
const SEV_INITRD_ENTRY_GUID = "44baf731-3a2f-4bd7-9af1-41e29169781d";
|
|
78
|
+
const SEV_CMDLINE_ENTRY_GUID = "97d02dd8-bd20-4c94-aa78-e7714d36ab2a";
|
|
79
|
+
function uuidToLE(guid) {
|
|
80
|
+
// UUID string → RFC4122 bytes → convert first three groups to LE
|
|
81
|
+
const hex = guid.replace(/-/g, "");
|
|
82
|
+
const bytes = Buffer.from(hex, "hex");
|
|
83
|
+
// Swap bytes for little-endian encoding (groups 1, 2, 3)
|
|
84
|
+
const le = Buffer.from(bytes);
|
|
85
|
+
// group1: bytes 0-3 (4 bytes, swap)
|
|
86
|
+
le[0] = bytes[3];
|
|
87
|
+
le[1] = bytes[2];
|
|
88
|
+
le[2] = bytes[1];
|
|
89
|
+
le[3] = bytes[0];
|
|
90
|
+
// group2: bytes 4-5 (2 bytes, swap)
|
|
91
|
+
le[4] = bytes[5];
|
|
92
|
+
le[5] = bytes[4];
|
|
93
|
+
// group3: bytes 6-7 (2 bytes, swap)
|
|
94
|
+
le[6] = bytes[7];
|
|
95
|
+
le[7] = bytes[6];
|
|
96
|
+
// groups 4+5 remain big-endian
|
|
97
|
+
return le;
|
|
98
|
+
}
|
|
99
|
+
function sevHashTableEntry(guidStr, hash) {
|
|
100
|
+
// SevHashTableEntry: guid(16) + length(u16 LE) + hash(32) = 50 bytes
|
|
101
|
+
const entry = Buffer.allocUnsafe(50);
|
|
102
|
+
uuidToLE(guidStr).copy(entry, 0);
|
|
103
|
+
entry.writeUInt16LE(50, 16);
|
|
104
|
+
hash.copy(entry, 18);
|
|
105
|
+
return entry;
|
|
106
|
+
}
|
|
107
|
+
export function buildHashesPage(kernelHashHex, initrdHashHex, append, offsetInPage) {
|
|
108
|
+
const kernelHash = Buffer.from(kernelHashHex, "hex");
|
|
109
|
+
const initrdHash = initrdHashHex
|
|
110
|
+
? Buffer.from(initrdHashHex, "hex")
|
|
111
|
+
: Buffer.from(createHash("sha256").update(Buffer.alloc(0)).digest());
|
|
112
|
+
const cmdlineBytes = append ? Buffer.from(append + "\0", "utf8") : Buffer.from("\0", "utf8");
|
|
113
|
+
const cmdlineHash = Buffer.from(createHash("sha256").update(cmdlineBytes).digest());
|
|
114
|
+
// SevHashTable: guid(16) + length(u16) + cmdline_entry(50) + initrd_entry(50) + kernel_entry(50) = 168 bytes
|
|
115
|
+
const ht = Buffer.allocUnsafe(168);
|
|
116
|
+
uuidToLE(SEV_HASH_TABLE_HEADER_GUID).copy(ht, 0);
|
|
117
|
+
ht.writeUInt16LE(168, 16);
|
|
118
|
+
sevHashTableEntry(SEV_CMDLINE_ENTRY_GUID, cmdlineHash).copy(ht, 18);
|
|
119
|
+
sevHashTableEntry(SEV_INITRD_ENTRY_GUID, initrdHash).copy(ht, 68);
|
|
120
|
+
sevHashTableEntry(SEV_KERNEL_ENTRY_GUID, kernelHash).copy(ht, 118);
|
|
121
|
+
// Pad to 16-byte alignment: 168 % 16 = 8 → 8 padding bytes → 176 bytes total
|
|
122
|
+
const padded = Buffer.concat([ht, Buffer.alloc(8)]);
|
|
123
|
+
const page = Buffer.alloc(4096);
|
|
124
|
+
padded.copy(page, offsetInPage);
|
|
125
|
+
return page;
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// VMSA page builder — QEMU SEV-SNP mode
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
export function buildVmsaPage(eip, vcpuSig, guestFeatures) {
|
|
131
|
+
const page = Buffer.alloc(4096);
|
|
132
|
+
function vmcbSeg(off, sel, attr, lim, base) {
|
|
133
|
+
page.writeUInt16LE(sel, off);
|
|
134
|
+
page.writeUInt16LE(attr, off + 2);
|
|
135
|
+
page.writeUInt32LE(lim, off + 4);
|
|
136
|
+
page.writeBigUInt64LE(base, off + 8);
|
|
137
|
+
}
|
|
138
|
+
const csBase = BigInt((eip & 0xffff0000) >>> 0);
|
|
139
|
+
const rip = BigInt(eip & 0x0000ffff);
|
|
140
|
+
vmcbSeg(0x000, 0, 0x0093, 0xffff, 0n); // es
|
|
141
|
+
vmcbSeg(0x010, 0xf000, 0x009b, 0xffff, csBase); // cs
|
|
142
|
+
vmcbSeg(0x020, 0, 0x0093, 0xffff, 0n); // ss
|
|
143
|
+
vmcbSeg(0x030, 0, 0x0093, 0xffff, 0n); // ds
|
|
144
|
+
vmcbSeg(0x040, 0, 0x0093, 0xffff, 0n); // fs
|
|
145
|
+
vmcbSeg(0x050, 0, 0x0093, 0xffff, 0n); // gs
|
|
146
|
+
vmcbSeg(0x060, 0, 0x0000, 0xffff, 0n); // gdtr
|
|
147
|
+
vmcbSeg(0x070, 0, 0x0082, 0xffff, 0n); // ldtr
|
|
148
|
+
vmcbSeg(0x080, 0, 0x0000, 0xffff, 0n); // idtr
|
|
149
|
+
vmcbSeg(0x090, 0, 0x008b, 0xffff, 0n); // tr
|
|
150
|
+
page.writeBigUInt64LE(0x1000n, 0x0d0); // efer (SVME)
|
|
151
|
+
page.writeBigUInt64LE(0x40n, 0x148); // cr4 (MCE)
|
|
152
|
+
page.writeBigUInt64LE(0x10n, 0x158); // cr0 (PE)
|
|
153
|
+
page.writeBigUInt64LE(0x400n, 0x160); // dr7
|
|
154
|
+
page.writeBigUInt64LE(0xffff0ff0n, 0x168); // dr6
|
|
155
|
+
page.writeBigUInt64LE(0x2n, 0x170); // rflags
|
|
156
|
+
page.writeBigUInt64LE(rip, 0x178); // rip
|
|
157
|
+
page.writeBigUInt64LE(0x0007040600070406n, 0x268); // g_pat
|
|
158
|
+
page.writeBigUInt64LE(BigInt(vcpuSig), 0x310); // rdx (CPUID sig)
|
|
159
|
+
page.writeBigUInt64LE(guestFeatures, 0x3b0); // sev_features
|
|
160
|
+
page.writeBigUInt64LE(0x1n, 0x3e8); // xcr0
|
|
161
|
+
page.writeUInt32LE(0x1f80, 0x408); // mxcsr
|
|
162
|
+
page.writeUInt16LE(0x037f, 0x410); // x87_fcw
|
|
163
|
+
return page;
|
|
164
|
+
}
|
|
165
|
+
export function calcSevMeasurement(entry, vcpus, cmdline) {
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
let ld = Buffer.from(entry.ovmf_hash, "hex");
|
|
168
|
+
const offsetInPage = entry.sev_hashes_table_gpa & 0xfff;
|
|
169
|
+
const hashesPage = buildHashesPage(entry.kernel_hash, entry.initrd_hash, cmdline, offsetInPage);
|
|
170
|
+
for (const sec of entry.ovmf_sections) {
|
|
171
|
+
const gpa = BigInt(sec.gpa);
|
|
172
|
+
switch (sec.section_type) {
|
|
173
|
+
case 1: // SNP_SEC_MEM
|
|
174
|
+
ld = gctxUpdateZeroPages(ld, gpa, sec.size);
|
|
175
|
+
break;
|
|
176
|
+
case 2: // SNP_SECRETS
|
|
177
|
+
ld = gctxUpdateSecretsPage(ld, gpa);
|
|
178
|
+
break;
|
|
179
|
+
case 3: // CPUID
|
|
180
|
+
ld = gctxUpdateCpuidPage(ld, gpa);
|
|
181
|
+
break;
|
|
182
|
+
case 4: // SVSM_CAA
|
|
183
|
+
ld = gctxUpdateZeroPages(ld, gpa, sec.size);
|
|
184
|
+
break;
|
|
185
|
+
case 0x10: // SNP_KERNEL_HASHES
|
|
186
|
+
ld = gctxUpdateNormalPages(ld, gpa, hashesPage);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const apEip = entry.sev_es_reset_eip;
|
|
191
|
+
for (let i = 0; i < vcpus; i++) {
|
|
192
|
+
const eip = i === 0 ? BSP_EIP : apEip;
|
|
193
|
+
const vmsa = buildVmsaPage(eip, VCPU_SIG_EPYC, BigInt(GUEST_FEATURES));
|
|
194
|
+
ld = gctxUpdateVmsaPage(ld, vmsa);
|
|
195
|
+
}
|
|
196
|
+
return ld.toString("hex");
|
|
197
|
+
}
|
|
198
|
+
export function parseSevFamilyId(familyIdBytes) {
|
|
199
|
+
const s = familyIdBytes.subarray(0, 16).toString("utf8").replace(/[\x00#]+$/, "");
|
|
200
|
+
if (!s.endsWith("-sev"))
|
|
201
|
+
return null;
|
|
202
|
+
const core = s.slice(0, -4); // strip "-sev"
|
|
203
|
+
const idx = core.indexOf("-");
|
|
204
|
+
if (idx < 0)
|
|
205
|
+
return null;
|
|
206
|
+
const vmType = core.slice(0, idx);
|
|
207
|
+
const templateName = core.slice(idx + 1);
|
|
208
|
+
const vcpus = VCPU_MAP[templateName];
|
|
209
|
+
if (vcpus === undefined)
|
|
210
|
+
return null;
|
|
211
|
+
return { vmType, templateName, vcpus };
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=sevGctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sevGctx.js","sourceRoot":"","sources":["../src/sevGctx.ts"],"names":[],"mappings":"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"}
|
package/dist/tdx.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AttestationResult } from "./types.js";
|
|
2
|
+
export declare function checkTdxCpuAttestation(data: string): Promise<AttestationResult>;
|
|
3
|
+
export interface TdxQuoteFields {
|
|
4
|
+
mrtd: string;
|
|
5
|
+
rtmr0: string;
|
|
6
|
+
rtmr1: string;
|
|
7
|
+
rtmr2: string;
|
|
8
|
+
rtmr3: string;
|
|
9
|
+
}
|
|
10
|
+
/** Parse a raw TDX quote (hex-encoded) and return measurement fields only. */
|
|
11
|
+
export declare function parseTdxQuoteFields(data: string): TdxQuoteFields;
|