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/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
@@ -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;
@@ -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;