@mitre/hdf-schema 3.1.0 → 3.3.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.
Files changed (38) hide show
  1. package/README.md +20 -14
  2. package/dist/go/go.mod +2 -2
  3. package/dist/go/hdf.go +570 -210
  4. package/dist/helpers.d.ts +5 -1
  5. package/dist/index.d.ts +27 -52
  6. package/dist/index.js +30 -48
  7. package/dist/schemas/hdf-amendments.schema.json +565 -45
  8. package/dist/schemas/hdf-baseline.schema.json +570 -50
  9. package/dist/schemas/hdf-comparison.schema.json +820 -103
  10. package/dist/schemas/hdf-evidence-package.schema.json +564 -44
  11. package/dist/schemas/hdf-plan.schema.json +571 -50
  12. package/dist/schemas/hdf-results.schema.json +777 -80
  13. package/dist/schemas/hdf-system.schema.json +596 -59
  14. package/dist/ts/hdf.d.ts +3562 -0
  15. package/dist/ts/hdf.js +564 -0
  16. package/dist/ts/hdf.ts +3623 -0
  17. package/package.json +18 -17
  18. package/dist/ts/hdf-amendments.d.ts +0 -474
  19. package/dist/ts/hdf-amendments.js +0 -88
  20. package/dist/ts/hdf-amendments.ts +0 -486
  21. package/dist/ts/hdf-baseline.d.ts +0 -472
  22. package/dist/ts/hdf-baseline.js +0 -58
  23. package/dist/ts/hdf-baseline.ts +0 -483
  24. package/dist/ts/hdf-comparison.d.ts +0 -1185
  25. package/dist/ts/hdf-comparison.js +0 -216
  26. package/dist/ts/hdf-comparison.ts +0 -1210
  27. package/dist/ts/hdf-evidence-package.d.ts +0 -348
  28. package/dist/ts/hdf-evidence-package.js +0 -39
  29. package/dist/ts/hdf-evidence-package.ts +0 -356
  30. package/dist/ts/hdf-plan.d.ts +0 -204
  31. package/dist/ts/hdf-plan.js +0 -23
  32. package/dist/ts/hdf-plan.ts +0 -205
  33. package/dist/ts/hdf-results.d.ts +0 -1511
  34. package/dist/ts/hdf-results.js +0 -194
  35. package/dist/ts/hdf-results.ts +0 -1536
  36. package/dist/ts/hdf-system.d.ts +0 -609
  37. package/dist/ts/hdf-system.js +0 -102
  38. package/dist/ts/hdf-system.ts +0 -617
@@ -0,0 +1,3562 @@
1
+ /**
2
+ * The top level value containing all assessment results.
3
+ */
4
+ export interface HDFResults {
5
+ /**
6
+ * Information on the baselines that were evaluated, including findings.
7
+ */
8
+ baselines: EvaluatedBaseline[];
9
+ /**
10
+ * The components that were assessed. Each component describes a system element (host,
11
+ * container, cloud resource, application, etc.) with optional identity, SBOM, and external
12
+ * references.
13
+ */
14
+ components?: Component[];
15
+ /**
16
+ * Reserved for tool-specific data not defined in the HDF standard. Use this to preserve
17
+ * original tool output, auxiliary data, or custom metadata.
18
+ */
19
+ extensions?: {
20
+ [key: string]: any;
21
+ };
22
+ /**
23
+ * Information about the tool that generated this file.
24
+ */
25
+ generator?: Generator;
26
+ /**
27
+ * Unique identifier for this assessment run.
28
+ */
29
+ id?: string;
30
+ /**
31
+ * Cryptographic integrity information for verifying this file.
32
+ */
33
+ integrity?: Integrity;
34
+ /**
35
+ * Reference to an hdf-plan document describing the assessment plan that produced these
36
+ * results. May be a relative path, absolute URI, or fragment identifier.
37
+ */
38
+ planRef?: string;
39
+ /**
40
+ * Optional reference to automated remediation resources (Ansible playbooks, Terraform
41
+ * scripts, etc.) for fixing failing requirements found in this assessment.
42
+ */
43
+ remediation?: Remediation;
44
+ /**
45
+ * Information about the test execution environment where the security tool was run.
46
+ * Distinct from targets (what is being tested).
47
+ */
48
+ runner?: Runner;
49
+ /**
50
+ * Statistics for the assessment run, including duration and result counts.
51
+ */
52
+ statistics?: Statistics;
53
+ /**
54
+ * Reference to an hdf-system document describing the system under assessment. May be a
55
+ * relative path, absolute URI, or fragment identifier.
56
+ */
57
+ systemRef?: string;
58
+ /**
59
+ * When this assessment was executed.
60
+ */
61
+ timestamp?: Date;
62
+ /**
63
+ * The security tool that produced the assessment data in this file.
64
+ */
65
+ tool?: Tool;
66
+ [property: string]: any;
67
+ }
68
+ /**
69
+ * Information on a baseline that was evaluated, including any findings.
70
+ *
71
+ * Shared metadata fields for baselines. Used in both standalone baseline documents and
72
+ * evaluated baseline results.
73
+ */
74
+ export interface EvaluatedBaseline {
75
+ /**
76
+ * The set of dependencies this baseline depends on.
77
+ */
78
+ depends?: Dependency[];
79
+ /**
80
+ * The description - should be more detailed than the summary.
81
+ */
82
+ description?: string;
83
+ /**
84
+ * Reserved for tool-specific baseline metadata not defined in the HDF standard.
85
+ */
86
+ extensions?: {
87
+ [key: string]: any;
88
+ };
89
+ /**
90
+ * A set of descriptions for the requirement groups.
91
+ */
92
+ groups?: RequirementGroup[];
93
+ /**
94
+ * Typed inputs used to parameterize this baseline at execution time. See the Input
95
+ * primitive for the full schema.
96
+ */
97
+ inputs?: Input[];
98
+ /**
99
+ * Cryptographic integrity information for verifying this baseline has not been tampered
100
+ * with.
101
+ */
102
+ integrity?: Integrity;
103
+ /**
104
+ * SHA-256 checksum of the original baseline definition file (before execution). This is an
105
+ * immutable reference to the baseline as defined, used to detect tampering with baseline
106
+ * requirements or metadata.
107
+ */
108
+ originalChecksum?: Checksum;
109
+ /**
110
+ * The name of the parent baseline if this is a dependency of another.
111
+ */
112
+ parentBaseline?: string;
113
+ /**
114
+ * The set of requirements including any findings. A baseline must have at least one
115
+ * requirement.
116
+ */
117
+ requirements: EvaluatedRequirement[];
118
+ /**
119
+ * SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
120
+ * Used to detect tampering with test results. Compare with currentChecksum to verify
121
+ * amendment integrity.
122
+ */
123
+ resultsChecksum?: Checksum;
124
+ /**
125
+ * An explanation of the baseline status. Example: why it was skipped, failed to load, or
126
+ * any other status details.
127
+ */
128
+ statusMessage?: string;
129
+ /**
130
+ * The name - must be unique.
131
+ */
132
+ name: string;
133
+ /**
134
+ * The copyright holder(s).
135
+ */
136
+ copyright?: string;
137
+ /**
138
+ * The email address or other contact information of the copyright holder(s).
139
+ */
140
+ copyrightEmail?: string;
141
+ /**
142
+ * Optional key-value labels for flexible grouping. Well-known keys: system, component,
143
+ * environment, region, team. Values must be strings.
144
+ */
145
+ labels?: {
146
+ [key: string]: string;
147
+ };
148
+ /**
149
+ * The copyright license. Example: 'Apache-2.0'.
150
+ */
151
+ license?: string;
152
+ /**
153
+ * The maintainer(s).
154
+ */
155
+ maintainer?: string;
156
+ /**
157
+ * The status. Example: 'loaded'.
158
+ */
159
+ status?: string;
160
+ /**
161
+ * The summary. Example: the Security Technical Implementation Guide (STIG) header.
162
+ */
163
+ summary?: string;
164
+ /**
165
+ * The set of supported platform targets.
166
+ */
167
+ supports?: SupportedPlatform[];
168
+ /**
169
+ * The title - should be human readable.
170
+ */
171
+ title?: string;
172
+ /**
173
+ * The version of the baseline.
174
+ */
175
+ version?: string;
176
+ [property: string]: any;
177
+ }
178
+ /**
179
+ * A dependency for a baseline. Can include relative paths or URLs for where to find the
180
+ * dependency.
181
+ */
182
+ export interface Dependency {
183
+ /**
184
+ * The branch name for a git repo.
185
+ */
186
+ branch?: string;
187
+ /**
188
+ * The 'user/profilename' attribute for an Automate server.
189
+ */
190
+ compliance?: string;
191
+ /**
192
+ * The location of the git repo. Example:
193
+ * 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'.
194
+ */
195
+ git?: string;
196
+ /**
197
+ * The name or assigned alias.
198
+ */
199
+ name?: string;
200
+ /**
201
+ * The relative path if the dependency is locally available.
202
+ */
203
+ path?: string;
204
+ /**
205
+ * The status. Should be: 'loaded', 'failed', or 'skipped'.
206
+ */
207
+ status?: string;
208
+ /**
209
+ * The reason for the status if it is 'failed' or 'skipped'.
210
+ */
211
+ statusMessage?: string;
212
+ /**
213
+ * The 'user/profilename' attribute for a Supermarket server.
214
+ */
215
+ supermarket?: string;
216
+ /**
217
+ * The address of the dependency.
218
+ */
219
+ url?: string;
220
+ [property: string]: any;
221
+ }
222
+ /**
223
+ * Describes a group of requirements, such as those defined in a single file.
224
+ */
225
+ export interface RequirementGroup {
226
+ /**
227
+ * The unique identifier for the group. Example: the relative path to the file specifying
228
+ * the requirements.
229
+ */
230
+ id: string;
231
+ /**
232
+ * The set of requirements as specified by their ids in this group. Example: 'SV-238196'.
233
+ */
234
+ requirements: string[];
235
+ /**
236
+ * The title of the group - should be human readable.
237
+ */
238
+ title?: string;
239
+ [property: string]: any;
240
+ }
241
+ /**
242
+ * A typed input parameter that bridges governance requirements and scanner automation.
243
+ * Inputs carry expected configuration values with type information, comparison operators,
244
+ * and validation constraints, enabling traceability from policy through to scan results.
245
+ */
246
+ export interface Input {
247
+ /**
248
+ * Validation constraints for the input value.
249
+ */
250
+ constraints?: InputConstraints;
251
+ /**
252
+ * Human-readable description of what this input controls.
253
+ */
254
+ description?: string;
255
+ /**
256
+ * The input name. Must be unique within a baseline or results document. Example:
257
+ * 'max_concurrent_sessions'.
258
+ */
259
+ name: string;
260
+ /**
261
+ * The comparison operator used when evaluating this input against observed values.
262
+ */
263
+ operator?: ComparisonOperator;
264
+ /**
265
+ * Whether this input must be provided. Defaults to false if omitted.
266
+ */
267
+ required?: boolean;
268
+ /**
269
+ * Whether this input contains sensitive data (passwords, keys). Sensitive values should be
270
+ * redacted in output. Defaults to false if omitted.
271
+ */
272
+ sensitive?: boolean;
273
+ /**
274
+ * The data type of this input.
275
+ */
276
+ type?: InputType;
277
+ /**
278
+ * The input value. Type should match the declared type field. Accepts any JSON value.
279
+ */
280
+ value?: any;
281
+ [property: string]: any;
282
+ }
283
+ /**
284
+ * Validation constraints for the input value.
285
+ *
286
+ * Validation constraints for an input value.
287
+ */
288
+ export interface InputConstraints {
289
+ /**
290
+ * Enumeration of permitted values.
291
+ */
292
+ allowedValues?: any[];
293
+ /**
294
+ * Maximum allowed value (for Numeric inputs).
295
+ */
296
+ max?: number;
297
+ /**
298
+ * Minimum allowed value (for Numeric inputs).
299
+ */
300
+ min?: number;
301
+ /**
302
+ * Regular expression pattern the value must match (for String inputs).
303
+ */
304
+ pattern?: string;
305
+ [property: string]: any;
306
+ }
307
+ /**
308
+ * The comparison operator used when evaluating this input against observed values.
309
+ *
310
+ * Comparison operator for evaluating the input value against observed values. Numeric:
311
+ * eq/ne/lt/le/gt/ge. String: eq/ne/contains/matches. Collection: in/notIn.
312
+ */
313
+ export declare enum ComparisonOperator {
314
+ Contains = "contains",
315
+ Eq = "eq",
316
+ Ge = "ge",
317
+ Gt = "gt",
318
+ In = "in",
319
+ LE = "le",
320
+ Lt = "lt",
321
+ Matches = "matches",
322
+ Ne = "ne",
323
+ NotIn = "notIn"
324
+ }
325
+ /**
326
+ * The data type of this input.
327
+ *
328
+ * The data type of the input value. Aligns with InSpec input types.
329
+ */
330
+ export declare enum InputType {
331
+ Array = "Array",
332
+ Boolean = "Boolean",
333
+ Hash = "Hash",
334
+ Numeric = "Numeric",
335
+ Regexp = "Regexp",
336
+ String = "String"
337
+ }
338
+ /**
339
+ * Cryptographic integrity information for verifying this baseline has not been tampered
340
+ * with.
341
+ *
342
+ * Cryptographic integrity information for verifying the HDF file has not been tampered
343
+ * with. If algorithm is provided, checksum must also be provided, and vice versa.
344
+ *
345
+ * Cryptographic integrity information for verifying this file.
346
+ *
347
+ * Cryptographic integrity information for verifying this comparison document.
348
+ *
349
+ * Cryptographic integrity information for verifying this system document has not been
350
+ * tampered with.
351
+ *
352
+ * Cryptographic integrity information for verifying this plan document has not been
353
+ * tampered with.
354
+ *
355
+ * Cryptographic integrity information for verifying this amendments document has not been
356
+ * tampered with.
357
+ *
358
+ * Cryptographic integrity information for verifying this evidence package has not been
359
+ * tampered with.
360
+ */
361
+ export interface Integrity {
362
+ /**
363
+ * The hash algorithm used for the checksum.
364
+ */
365
+ algorithm?: HashAlgorithm;
366
+ /**
367
+ * The checksum value.
368
+ */
369
+ checksum?: string;
370
+ /**
371
+ * Optional cryptographic signature.
372
+ */
373
+ signature?: string;
374
+ /**
375
+ * Identifier of who signed this file.
376
+ */
377
+ signedBy?: string;
378
+ [property: string]: any;
379
+ }
380
+ /**
381
+ * The hash algorithm used for the checksum.
382
+ *
383
+ * Supported cryptographic hash algorithms for checksums and integrity verification.
384
+ */
385
+ export declare enum HashAlgorithm {
386
+ Sha256 = "sha256",
387
+ Sha384 = "sha384",
388
+ Sha512 = "sha512"
389
+ }
390
+ /**
391
+ * SHA-256 checksum of the original baseline definition file (before execution). This is an
392
+ * immutable reference to the baseline as defined, used to detect tampering with baseline
393
+ * requirements or metadata.
394
+ *
395
+ * Cryptographic checksum for baseline integrity verification.
396
+ *
397
+ * SHA-256 checksum of the previous amendment in chronological order. Creates a
398
+ * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
399
+ * on a requirement.
400
+ *
401
+ * SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
402
+ * Used to detect tampering with test results. Compare with currentChecksum to verify
403
+ * amendment integrity.
404
+ *
405
+ * Optional cryptographic checksum for verifying the integrity of remediation resources
406
+ * fetched from the URI. Recommended for security when referencing external automation
407
+ * scripts.
408
+ *
409
+ * Cryptographic checksum of the source document for integrity verification.
410
+ *
411
+ * Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
412
+ * for the first amendment.
413
+ *
414
+ * Cryptographic checksum for verifying the referenced document's integrity.
415
+ */
416
+ export interface Checksum {
417
+ /**
418
+ * The hash algorithm used for the checksum.
419
+ */
420
+ algorithm: HashAlgorithm;
421
+ /**
422
+ * The checksum value.
423
+ */
424
+ value: string;
425
+ [property: string]: any;
426
+ }
427
+ /**
428
+ * A requirement that has been evaluated, including any findings.
429
+ *
430
+ * Core requirement fields shared between baseline requirements and evaluated requirements.
431
+ * Contains the fundamental requirement definition without assessment results.
432
+ */
433
+ export interface EvaluatedRequirement {
434
+ /**
435
+ * Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
436
+ * components[] on hdf-system for component-level package inventories. One entry per matched
437
+ * package signature (scanners often report multiple CPE variations per CVE).
438
+ */
439
+ affectedPackages?: AffectedPackage[];
440
+ /**
441
+ * Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding
442
+ * may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base
443
+ * metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for
444
+ * risk adjustment. See cvss.schema.json.
445
+ */
446
+ cvss?: Cvss[];
447
+ /**
448
+ * Common Weakness Enumeration IDs associated with this finding. Use CWE-N format with no
449
+ * leading zeros (matches the MITRE catalog convention). For NIST control mappings derived
450
+ * from CWE, see tags.nist.
451
+ */
452
+ cwe?: string[];
453
+ /**
454
+ * Array of labeled descriptions. At least one description with label 'default' must be
455
+ * present. Convention: place default description first. Common labels: 'default', 'check',
456
+ * 'fix', 'rationale'.
457
+ */
458
+ descriptions: Description[];
459
+ /**
460
+ * The type of the most recent non-expired override or POAM governing this requirement.
461
+ * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
462
+ * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
463
+ * POAMs apply.
464
+ */
465
+ disposition?: OverrideType;
466
+ /**
467
+ * The current effective impact score (0.0–1.0) after applying the most recent non-expired
468
+ * override with an impact field. Absent when no impact overrides apply; consumers should
469
+ * use the requirement's impact field in that case.
470
+ */
471
+ effectiveImpact?: number;
472
+ /**
473
+ * The current effective compliance status of this requirement after applying the most
474
+ * recent non-expired override with a status field, or computed from results (worst-wins) if
475
+ * no status-bearing overrides exist.
476
+ */
477
+ effectiveStatus?: ResultStatus;
478
+ /**
479
+ * FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
480
+ * alongside CVSS for prioritization — captures the probability the vulnerability will be
481
+ * exploited.
482
+ */
483
+ epss?: Epss;
484
+ /**
485
+ * Supporting evidence for this requirement's findings, such as screenshots, code samples,
486
+ * or log excerpts.
487
+ */
488
+ evidence?: Evidence[];
489
+ /**
490
+ * CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
491
+ * dueDate carry the federal patching deadline.
492
+ */
493
+ kev?: Kev;
494
+ /**
495
+ * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
496
+ * POAMs do NOT change effectiveStatus - they track the work being done to address a
497
+ * failure. Separate from statusOverrides which DO change status.
498
+ */
499
+ poams?: Poam[];
500
+ /**
501
+ * The set of all tests within the requirement and their results.
502
+ */
503
+ results: RequirementResult[];
504
+ /**
505
+ * Explicit severity rating. Typically derived from impact score but provided explicitly for
506
+ * clarity.
507
+ */
508
+ severity?: Severity;
509
+ /**
510
+ * The explicit location of the requirement within the source code.
511
+ */
512
+ sourceLocation?: SourceLocation;
513
+ /**
514
+ * Chronological history of all overrides applied to this requirement. Overrides are
515
+ * intentional changes to the compliance status and/or impact score (waivers, attestations,
516
+ * false positives, risk adjustments). Most recent override should be first in array.
517
+ * Preserves full audit trail.
518
+ */
519
+ statusOverrides?: StatusOverride[];
520
+ /**
521
+ * The requirement identifier. Example: 'SV-238196'.
522
+ */
523
+ id: string;
524
+ /**
525
+ * The impactfulness or severity (0.0 to 1.0).
526
+ */
527
+ impact: number;
528
+ /**
529
+ * A set of tags - usually metadata like CCI, STIG ID, severity.
530
+ */
531
+ tags: {
532
+ [key: string]: any;
533
+ };
534
+ /**
535
+ * Whether the requirement is mandatory within its baseline. Distinct from severity (risk
536
+ * weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
537
+ * FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
538
+ * memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
539
+ * Optional: when omitted, consumers should treat the requirement as 'required' by
540
+ * convention.
541
+ */
542
+ applicability?: Applicability;
543
+ /**
544
+ * The raw source code of the requirement. Set to null for manual-only requirements or
545
+ * requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
546
+ * from manual-pending-automation. Note that if this is an overlay, it does not include the
547
+ * underlying source code.
548
+ */
549
+ code?: string;
550
+ /**
551
+ * Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
552
+ * categories. 'policy' = an authored governance statement; 'procedure' = a documented
553
+ * process; 'technical' = an enforced technical configuration; 'management' = a
554
+ * programmatic/management activity; 'operational' = a recurring operational activity (e.g.
555
+ * AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
556
+ * family/id but should not assume a default.
557
+ */
558
+ controlType?: ControlType;
559
+ /**
560
+ * The set of references to external documents.
561
+ */
562
+ refs?: Reference[];
563
+ /**
564
+ * The title - is nullable.
565
+ */
566
+ title?: string;
567
+ /**
568
+ * How this requirement is intended to be verified. Disambiguates the two cases that null
569
+ * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
570
+ * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
571
+ * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
572
+ * runs without operator action; 'hybrid' = part automated, part manual. Optional: when
573
+ * omitted, consumers should not infer a default.
574
+ */
575
+ verificationMethod?: VerificationMethodEnum;
576
+ [property: string]: any;
577
+ }
578
+ /**
579
+ * Represents a package referenced by a vulnerability finding or by an amendment's scope. On
580
+ * Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
581
+ * On Standalone_Override.affectedPackages it says 'this amendment is scoped to these
582
+ * packages' (used by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a
583
+ * system-level component identifier — see `components[]` on hdf-system for those. Validity
584
+ * requires at least one of: (name + version + ecosystem), purl alone, or cpe alone. purl
585
+ * and cpe are self-describing identifiers that encode name/version implicitly, so either
586
+ * may stand on its own; the name+version+ecosystem combination is the explicit form for
587
+ * sources without formal identifiers.
588
+ */
589
+ export interface AffectedPackage {
590
+ /**
591
+ * Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
592
+ * 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
593
+ * system) are enforced here. Use `hdf-utilities.parseCpe` for full-grammar parsing.
594
+ * Example: 'cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*'.
595
+ */
596
+ cpe?: string;
597
+ /**
598
+ * The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
599
+ * anything outside the listed language/OS package managers.
600
+ */
601
+ ecosystem?: Ecosystem;
602
+ /**
603
+ * Optional version string identifying the first release that contains the fix for the
604
+ * vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes
605
+ * 'openssl@1.1.1k'.
606
+ */
607
+ fixedInVersion?: string;
608
+ /**
609
+ * The package name as published in its ecosystem. Examples: 'openssl' (rpm), 'lodash'
610
+ * (npm), 'org.apache.logging.log4j:log4j-core' (maven, group:artifact).
611
+ */
612
+ name?: string;
613
+ /**
614
+ * Optional Package URL (PURL) identifying the affected package. Validated leniently: only
615
+ * the 'pkg:TYPE/' scheme prefix is enforced here, where TYPE follows the PURL grammar (a
616
+ * letter followed by letters, digits, '.', '+', or '-') and is matched case-insensitively
617
+ * to mirror `hdf-utilities.parsePurl`'s accept-and-warn behavior. Use `parsePurl` for full
618
+ * PURL parsing. Example: 'pkg:rpm/redhat/openssl@1.1.1k-7.el8_4?arch=x86_64'.
619
+ */
620
+ purl?: string;
621
+ /**
622
+ * The exact version of the package that the vulnerability scanner observed. Use the
623
+ * ecosystem's native version string verbatim (e.g., '1.1.1k-7.el8_4' for rpm, '4.17.20' for
624
+ * npm).
625
+ */
626
+ version?: string;
627
+ [property: string]: any;
628
+ }
629
+ /**
630
+ * The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
631
+ * anything outside the listed language/OS package managers.
632
+ */
633
+ export declare enum Ecosystem {
634
+ Cargo = "cargo",
635
+ Deb = "deb",
636
+ Gem = "gem",
637
+ Generic = "generic",
638
+ Go = "go",
639
+ Maven = "maven",
640
+ Npm = "npm",
641
+ Nuget = "nuget",
642
+ Pypi = "pypi",
643
+ RPM = "rpm"
644
+ }
645
+ /**
646
+ * Whether the requirement is mandatory within its baseline. Distinct from severity (risk
647
+ * weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
648
+ * FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
649
+ * memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
650
+ * Optional: when omitted, consumers should treat the requirement as 'required' by
651
+ * convention.
652
+ */
653
+ export declare enum Applicability {
654
+ Advisory = "advisory",
655
+ Optional = "optional",
656
+ Required = "required"
657
+ }
658
+ /**
659
+ * Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
660
+ * categories. 'policy' = an authored governance statement; 'procedure' = a documented
661
+ * process; 'technical' = an enforced technical configuration; 'management' = a
662
+ * programmatic/management activity; 'operational' = a recurring operational activity (e.g.
663
+ * AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
664
+ * family/id but should not assume a default.
665
+ */
666
+ export declare enum ControlType {
667
+ Management = "management",
668
+ Operational = "operational",
669
+ Policy = "policy",
670
+ Procedure = "procedure",
671
+ Technical = "technical"
672
+ }
673
+ /**
674
+ * Structured CVSS scoring data backing this override. Captures the rubric (which
675
+ * Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
676
+ * a riskAdjustment. For other override types this is optional context.
677
+ *
678
+ * A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding.
679
+ * Captures the vendor-supplied Base metric group and optional consumer-supplied Threat,
680
+ * Environmental, and Supplemental metric groups. Supports all four CVSS major versions
681
+ * (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
682
+ * semantic validation (correct metrics per version, correct values per metric) is performed
683
+ * by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
684
+ */
685
+ export interface Cvss {
686
+ /**
687
+ * The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
688
+ * vendor-published severity before consumer enrichment.
689
+ */
690
+ baseScore?: number;
691
+ /**
692
+ * Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
693
+ * 'none' or 'critical' bands; map accordingly when populating.
694
+ */
695
+ baseSeverity?: CVSSSeverity;
696
+ /**
697
+ * Optional Base metric group vector string as emitted by the source (e.g.,
698
+ * 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'). For CVSS 2.0 the version prefix is
699
+ * omitted. Some vendor tools emit a final baseScore without the vector — in that case this
700
+ * field is absent and the score cannot be recomputed or decomposed. The pattern accepts any
701
+ * version-prefixed or prefix-less metric token sequence; semantic validity of individual
702
+ * metrics is checked by hdf-utilities, not by the schema.
703
+ */
704
+ baseVector?: string;
705
+ /**
706
+ * Optional final score after combining Base + Threat + Environmental metrics. This is the
707
+ * score consumers should treat as authoritative for risk decisions when present.
708
+ */
709
+ computedScore?: number;
710
+ /**
711
+ * Qualitative severity band corresponding to computedScore. Same band convention as
712
+ * baseSeverity.
713
+ */
714
+ computedSeverity?: CVSSSeverity;
715
+ /**
716
+ * Optional score (0.0–10.0) recomputed after applying Environmental metrics.
717
+ */
718
+ environmentalScore?: number;
719
+ /**
720
+ * Optional Environmental metric group vector segment (e.g., 'MAV:N/CR:H/IR:H/AR:H').
721
+ * Consumer-supplied — reflects the deployment context (criticality, mitigations, network
722
+ * exposure).
723
+ */
724
+ environmentalVector?: string;
725
+ /**
726
+ * Optional identifier the CVSS data is associated with — most commonly a CVE ID (e.g.,
727
+ * 'CVE-2024-12345'), but may also be a vendor advisory ID, GHSA, or similar.
728
+ */
729
+ source?: string;
730
+ /**
731
+ * Optional Supplemental metric group vector segment (CVSS 4.0 only). Examples:
732
+ * 'S:P/AU:N/V:C/RE:M/U:Amber'. Per CVSS 4.0 spec, supplemental metrics convey additional
733
+ * context but have no impact on the computed score.
734
+ */
735
+ supplementalVector?: string;
736
+ /**
737
+ * Optional score (0.0–10.0) recomputed after applying Threat metrics. Always less than or
738
+ * equal to baseScore in practice.
739
+ */
740
+ threatScore?: number;
741
+ /**
742
+ * Optional Threat metric group vector segment (e.g., 'E:U/RL:O/RC:C' for CVSS 3.1, or 'E:A'
743
+ * for CVSS 4.0). Consumer-supplied — captures real-world exploitation and remediation
744
+ * context the vendor cannot know.
745
+ */
746
+ threatVector?: string;
747
+ /**
748
+ * The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
749
+ * or 4.0; legacy data may use 2.0 or 3.0.
750
+ */
751
+ version: Version;
752
+ [property: string]: any;
753
+ }
754
+ /**
755
+ * Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
756
+ * 'none' or 'critical' bands; map accordingly when populating.
757
+ *
758
+ * Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
759
+ * medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
760
+ * used on Requirement_Core (which includes 'informational').
761
+ *
762
+ * Qualitative severity band corresponding to computedScore. Same band convention as
763
+ * baseSeverity.
764
+ */
765
+ export declare enum CVSSSeverity {
766
+ Critical = "critical",
767
+ High = "high",
768
+ Low = "low",
769
+ Medium = "medium",
770
+ None = "none"
771
+ }
772
+ /**
773
+ * The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
774
+ * or 4.0; legacy data may use 2.0 or 3.0.
775
+ */
776
+ export declare enum Version {
777
+ The20 = "2.0",
778
+ The30 = "3.0",
779
+ The31 = "3.1",
780
+ The40 = "4.0"
781
+ }
782
+ export interface Description {
783
+ /**
784
+ * The description text content.
785
+ */
786
+ data: string;
787
+ /**
788
+ * Description category. The 'default' label is required for the primary description. Common
789
+ * labels: 'default', 'check', 'fix', 'rationale'. Tools may use custom labels.
790
+ */
791
+ label: string;
792
+ [property: string]: any;
793
+ }
794
+ /**
795
+ * The type of the most recent non-expired override or POAM governing this requirement.
796
+ * Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
797
+ * riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
798
+ * POAMs apply.
799
+ *
800
+ * The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
801
+ * accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
802
+ * remediation tracked (no status change). 'inherited': control provided by another
803
+ * component or system. 'falsePositive': scanner incorrectly identified a finding — for
804
+ * compliance scans (STIG, CIS), the check actually passes, so status is typically set to
805
+ * 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
806
+ * this system, so status is typically set to 'notApplicable'. The disposition field on the
807
+ * requirement distinguishes false positives from genuinely not-applicable findings.
808
+ * 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
809
+ * Adjustment); does not change pass/fail status, only impact via the impact field.
810
+ * 'operationalRequirement': deviation required by operational constraints (FedRAMP
811
+ * Operational Requirement); the finding cannot be remediated because the system requires
812
+ * the affected functionality. Remains an open risk. Migration note: 'exception' was removed
813
+ * in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
814
+ *
815
+ * The type of override applied to this requirement.
816
+ *
817
+ * The type of amendment.
818
+ */
819
+ export declare enum OverrideType {
820
+ Attestation = "attestation",
821
+ FalsePositive = "falsePositive",
822
+ Inherited = "inherited",
823
+ OperationalRequirement = "operationalRequirement",
824
+ Poam = "poam",
825
+ RiskAdjustment = "riskAdjustment",
826
+ Waiver = "waiver"
827
+ }
828
+ /**
829
+ * The current effective compliance status of this requirement after applying the most
830
+ * recent non-expired override with a status field, or computed from results (worst-wins) if
831
+ * no status-bearing overrides exist.
832
+ *
833
+ * The status of an individual test result. 'notApplicable' indicates the requirement does
834
+ * not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
835
+ * requires manual verification).
836
+ *
837
+ * The status of this test within the requirement. Example: 'failed'.
838
+ *
839
+ * The new status this override sets for the requirement. Optional when only impact is being
840
+ * overridden.
841
+ *
842
+ * The new status this amendment sets. Optional when only impact is being overridden.
843
+ */
844
+ export declare enum ResultStatus {
845
+ Error = "error",
846
+ Failed = "failed",
847
+ NotApplicable = "notApplicable",
848
+ NotReviewed = "notReviewed",
849
+ Passed = "passed"
850
+ }
851
+ /**
852
+ * FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
853
+ * alongside CVSS for prioritization — captures the probability the vulnerability will be
854
+ * exploited.
855
+ *
856
+ * FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
857
+ * three fields are required when an Epss object is present; the date disambiguates which
858
+ * day's score this is, since EPSS recomputes daily.
859
+ */
860
+ export interface Epss {
861
+ /**
862
+ * ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
863
+ */
864
+ date: Date;
865
+ /**
866
+ * Rank of this score relative to all scored CVEs, expressed as a value between 0.0 and 1.0
867
+ * inclusive. A percentile of 0.99 means this CVE is scored at or above 99% of all scored
868
+ * CVEs.
869
+ */
870
+ percentile: number;
871
+ /**
872
+ * Exploit probability as a value between 0.0 and 1.0 inclusive. Higher values indicate
873
+ * greater predicted likelihood of exploitation in the next 30 days. Example: 0.97532 means
874
+ * roughly a 97.5% predicted probability.
875
+ */
876
+ score: number;
877
+ [property: string]: any;
878
+ }
879
+ /**
880
+ * Supporting evidence for a finding or override, such as screenshots, code samples, log
881
+ * excerpts, or URLs.
882
+ */
883
+ export interface Evidence {
884
+ /**
885
+ * Timestamp when this evidence was captured. ISO 8601 format.
886
+ */
887
+ capturedAt?: Date;
888
+ /**
889
+ * Identity of who or what captured this evidence.
890
+ */
891
+ capturedBy?: Identity;
892
+ /**
893
+ * The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs:
894
+ * the raw text. For URLs: the URL string.
895
+ */
896
+ data: string;
897
+ /**
898
+ * Human-readable description of what this evidence shows.
899
+ */
900
+ description?: string;
901
+ /**
902
+ * Encoding used for the data. Example: 'base64', 'utf-8'.
903
+ */
904
+ encoding?: string;
905
+ /**
906
+ * MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'.
907
+ */
908
+ mimeType?: string;
909
+ /**
910
+ * Size of the evidence data in bytes.
911
+ */
912
+ size?: number;
913
+ /**
914
+ * The type of evidence being provided.
915
+ */
916
+ type: EvidenceType;
917
+ [property: string]: any;
918
+ }
919
+ /**
920
+ * Identity of who or what captured this evidence.
921
+ *
922
+ * Represents an identity that performed an action, such as capturing evidence or applying
923
+ * an override.
924
+ *
925
+ * Identity of who created this POA&M. For simple cases, use type 'simple' with just an
926
+ * identifier.
927
+ *
928
+ * Identity of who completed this milestone.
929
+ *
930
+ * The identity that created this signature.
931
+ *
932
+ * Identity of who applied this override. For simple cases, use type 'simple' with just an
933
+ * identifier.
934
+ *
935
+ * Identity of the person or system that approved this override.
936
+ *
937
+ * Team or individual responsible for this component. Enables per-component ownership when
938
+ * different teams manage different parts of a system.
939
+ *
940
+ * The identity of the person or system responsible for executing the test. This could be a
941
+ * human auditor manually completing a checklist, an automated CI/CD system, or a security
942
+ * tool. Optional field to support both automated and manual HDF generation.
943
+ *
944
+ * Team or individual responsible for this system's authorization and compliance. Maps to
945
+ * OSCAL responsible-party with role 'system-owner'.
946
+ *
947
+ * Default identity of who created this amendments document. Individual overrides may
948
+ * specify their own appliedBy.
949
+ *
950
+ * Identity of the authorizing official who approved these amendments.
951
+ *
952
+ * Identity of who applied this amendment.
953
+ *
954
+ * Identity of who prepared this evidence package.
955
+ */
956
+ export interface Identity {
957
+ /**
958
+ * Optional description of the identity or identity system, particularly useful when type is
959
+ * 'other'.
960
+ */
961
+ description?: string;
962
+ /**
963
+ * The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
964
+ */
965
+ identifier: string;
966
+ /**
967
+ * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
968
+ * 'system' for automated systems, 'simple' for basic string identifiers without additional
969
+ * classification, or 'other' for custom identity systems.
970
+ */
971
+ type: IdentityType;
972
+ [property: string]: any;
973
+ }
974
+ /**
975
+ * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
976
+ * 'system' for automated systems, 'simple' for basic string identifiers without additional
977
+ * classification, or 'other' for custom identity systems.
978
+ */
979
+ export declare enum IdentityType {
980
+ Email = "email",
981
+ Other = "other",
982
+ Simple = "simple",
983
+ System = "system",
984
+ Username = "username"
985
+ }
986
+ /**
987
+ * The type of evidence being provided.
988
+ */
989
+ export declare enum EvidenceType {
990
+ Code = "code",
991
+ File = "file",
992
+ Log = "log",
993
+ Other = "other",
994
+ Screenshot = "screenshot",
995
+ URL = "url"
996
+ }
997
+ /**
998
+ * CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
999
+ * dueDate carry the federal patching deadline.
1000
+ */
1001
+ export interface Kev {
1002
+ /**
1003
+ * ISO 8601 calendar date (YYYY-MM-DD) the vulnerability was added to the CISA KEV catalog.
1004
+ * Required when inKev is true.
1005
+ */
1006
+ dateAdded?: Date;
1007
+ /**
1008
+ * ISO 8601 calendar date (YYYY-MM-DD) by which federal agencies must remediate per CISA BOD
1009
+ * 22-01. Normally later than dateAdded, but the schema does not enforce ordering because
1010
+ * CISA occasionally adjusts published dates. Required when inKev is true.
1011
+ */
1012
+ dueDate?: Date;
1013
+ /**
1014
+ * Whether this vulnerability is currently in the CISA Known Exploited Vulnerabilities
1015
+ * catalog. When true, dateAdded and dueDate are required.
1016
+ */
1017
+ inKev: boolean;
1018
+ /**
1019
+ * CISA's notes describing the vulnerability, observed exploitation, or remediation guidance.
1020
+ */
1021
+ notes?: string;
1022
+ [property: string]: any;
1023
+ }
1024
+ /**
1025
+ * Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
1026
+ * POAMs do NOT change the effectiveStatus - the requirement remains in its current state
1027
+ * while the POA&M tracks remediation efforts.
1028
+ */
1029
+ export interface Poam {
1030
+ /**
1031
+ * Timestamp when this POA&M was created. ISO 8601 format.
1032
+ */
1033
+ appliedAt: Date;
1034
+ /**
1035
+ * Identity of who created this POA&M. For simple cases, use type 'simple' with just an
1036
+ * identifier.
1037
+ */
1038
+ appliedBy: Identity;
1039
+ /**
1040
+ * Supporting evidence for this POA&M, such as documentation of compensating controls or
1041
+ * mitigation implementation.
1042
+ */
1043
+ evidence?: Evidence[];
1044
+ /**
1045
+ * Optional expiration date for this POA&M requiring review/renewal. ISO 8601 format.
1046
+ */
1047
+ expiresAt?: Date;
1048
+ /**
1049
+ * Detailed explanation of the plan, including what actions will be taken.
1050
+ */
1051
+ explanation: string;
1052
+ /**
1053
+ * Optional array of milestones tracking progress toward completion.
1054
+ */
1055
+ milestones?: Milestone[];
1056
+ /**
1057
+ * SHA-256 checksum of the previous amendment in chronological order. Creates a
1058
+ * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
1059
+ * on a requirement.
1060
+ */
1061
+ previousChecksum?: Checksum;
1062
+ /**
1063
+ * Optional digital signature for enhanced trust and non-repudiation.
1064
+ */
1065
+ signature?: Signature;
1066
+ /**
1067
+ * The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
1068
+ * compensating controls. 'riskAcceptance' documents decision to accept risk.
1069
+ * 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
1070
+ */
1071
+ type: POAMType;
1072
+ [property: string]: any;
1073
+ }
1074
+ /**
1075
+ * A milestone or task within a POA&M remediation plan.
1076
+ */
1077
+ export interface Milestone {
1078
+ /**
1079
+ * Actual completion timestamp. ISO 8601 format.
1080
+ */
1081
+ completedAt?: Date;
1082
+ /**
1083
+ * Identity of who completed this milestone.
1084
+ */
1085
+ completedBy?: Identity;
1086
+ /**
1087
+ * Description of this milestone or task.
1088
+ */
1089
+ description: string;
1090
+ /**
1091
+ * Estimated completion date. ISO 8601 format.
1092
+ */
1093
+ estimatedCompletion: Date;
1094
+ /**
1095
+ * Current status of this milestone.
1096
+ */
1097
+ status: MilestoneStatus;
1098
+ [property: string]: any;
1099
+ }
1100
+ /**
1101
+ * Current status of this milestone.
1102
+ */
1103
+ export declare enum MilestoneStatus {
1104
+ Completed = "completed",
1105
+ InProgress = "inProgress",
1106
+ Pending = "pending"
1107
+ }
1108
+ /**
1109
+ * Optional digital signature for enhanced trust and non-repudiation.
1110
+ *
1111
+ * A digital signature following W3C Data Integrity Proofs pattern. Supports hardware
1112
+ * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic
1113
+ * signing methods via JWK, PEM, or Base58 key formats.
1114
+ *
1115
+ * Optional digital signature for enhanced trust and non-repudiation. Supports hardware
1116
+ * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
1117
+ * methods.
1118
+ *
1119
+ * Digital signature for non-repudiation.
1120
+ *
1121
+ * Document-level digital signature covering all amendments.
1122
+ *
1123
+ * Digital signature covering the entire evidence package.
1124
+ */
1125
+ export interface Signature {
1126
+ /**
1127
+ * Challenge value from the verifier, used in challenge-response authentication.
1128
+ */
1129
+ challenge?: string;
1130
+ /**
1131
+ * When the signature was created. ISO 8601 format.
1132
+ */
1133
+ created: Date;
1134
+ /**
1135
+ * The identity that created this signature.
1136
+ */
1137
+ creator: Identity;
1138
+ /**
1139
+ * Domain restriction for the signature, prevents cross-domain replay attacks.
1140
+ */
1141
+ domain?: string;
1142
+ /**
1143
+ * Random value to prevent replay attacks.
1144
+ */
1145
+ nonce?: string;
1146
+ /**
1147
+ * The purpose of this signature. Example: 'attestation', 'authentication',
1148
+ * 'assertionMethod'.
1149
+ */
1150
+ proofPurpose: string;
1151
+ /**
1152
+ * The base64-encoded or base58-encoded signature value.
1153
+ */
1154
+ signatureValue: string;
1155
+ /**
1156
+ * The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018',
1157
+ * 'Ed25519Signature2020'.
1158
+ */
1159
+ type: string;
1160
+ /**
1161
+ * The verification method containing the public key for signature verification.
1162
+ */
1163
+ verificationMethod: VerificationMethod;
1164
+ [property: string]: any;
1165
+ }
1166
+ /**
1167
+ * The verification method containing the public key for signature verification.
1168
+ *
1169
+ * Verification method containing the public key needed to verify a digital signature.
1170
+ * Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.
1171
+ */
1172
+ export interface VerificationMethod {
1173
+ /**
1174
+ * The entity that controls this verification method. Can be a DID, URI, or other identifier.
1175
+ */
1176
+ controller: string;
1177
+ /**
1178
+ * Public key in Base58 format, commonly used with Ed25519 keys.
1179
+ */
1180
+ publicKeyBase58?: string;
1181
+ /**
1182
+ * Public key in JSON Web Key format.
1183
+ */
1184
+ publicKeyJwk?: {
1185
+ [key: string]: any;
1186
+ };
1187
+ /**
1188
+ * Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC
1189
+ * KEY-----'.
1190
+ */
1191
+ publicKeyPem?: string;
1192
+ /**
1193
+ * The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018',
1194
+ * 'Ed25519VerificationKey2020'.
1195
+ */
1196
+ type: string;
1197
+ [property: string]: any;
1198
+ }
1199
+ /**
1200
+ * The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
1201
+ * compensating controls. 'riskAcceptance' documents decision to accept risk.
1202
+ * 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
1203
+ */
1204
+ export declare enum POAMType {
1205
+ Mitigation = "mitigation",
1206
+ Remediation = "remediation",
1207
+ RiskAcceptance = "riskAcceptance",
1208
+ VendorDependency = "vendorDependency"
1209
+ }
1210
+ /**
1211
+ * A reference to an external document.
1212
+ *
1213
+ * A reference using the 'ref' field.
1214
+ *
1215
+ * A URL pointing at the reference.
1216
+ *
1217
+ * A URI pointing at the reference.
1218
+ */
1219
+ export interface Reference {
1220
+ ref?: {
1221
+ [key: string]: any;
1222
+ }[] | string;
1223
+ url?: string;
1224
+ uri?: string;
1225
+ [property: string]: any;
1226
+ }
1227
+ /**
1228
+ * A test within a requirement and its results and findings such as how long it took to run.
1229
+ */
1230
+ export interface RequirementResult {
1231
+ /**
1232
+ * The stacktrace/backtrace of the exception if one occurred.
1233
+ */
1234
+ backtrace?: string[];
1235
+ /**
1236
+ * A description of this test. Example: 'limits.conf * is expected to include ["hard",
1237
+ * "maxlogins", "10"]'.
1238
+ */
1239
+ codeDesc: string;
1240
+ /**
1241
+ * The type of exception if an exception was thrown.
1242
+ */
1243
+ exception?: string;
1244
+ /**
1245
+ * An explanation of the test result. Typically provided for failed tests, errors, or to
1246
+ * explain why a test was not applicable or not reviewed.
1247
+ */
1248
+ message?: string;
1249
+ /**
1250
+ * The resource used in the test. Example: 'file', 'command', 'service'.
1251
+ */
1252
+ resource?: string;
1253
+ /**
1254
+ * The unique identifier of the resource. Example: '/etc/passwd'.
1255
+ */
1256
+ resourceId?: string;
1257
+ /**
1258
+ * The execution time in seconds for the test.
1259
+ */
1260
+ runTime?: number;
1261
+ /**
1262
+ * The time at which the test started.
1263
+ */
1264
+ startTime: Date;
1265
+ /**
1266
+ * The status of this test within the requirement. Example: 'failed'.
1267
+ */
1268
+ status: ResultStatus;
1269
+ [property: string]: any;
1270
+ }
1271
+ /**
1272
+ * Explicit severity rating. Typically derived from impact score but provided explicitly for
1273
+ * clarity.
1274
+ *
1275
+ * Severity rating for a requirement. Typically derived from the numeric impact score.
1276
+ */
1277
+ export declare enum Severity {
1278
+ Critical = "critical",
1279
+ High = "high",
1280
+ Informational = "informational",
1281
+ Low = "low",
1282
+ Medium = "medium"
1283
+ }
1284
+ /**
1285
+ * The explicit location of the requirement within the source code.
1286
+ *
1287
+ * The explicit location of a requirement within source code.
1288
+ */
1289
+ export interface SourceLocation {
1290
+ /**
1291
+ * The line on which this requirement is located.
1292
+ */
1293
+ line?: number;
1294
+ /**
1295
+ * Path to the file that this requirement originates from.
1296
+ */
1297
+ ref?: string;
1298
+ [property: string]: any;
1299
+ }
1300
+ /**
1301
+ * An intentional change to a requirement's compliance status and/or impact score. At least
1302
+ * one of status or impact must be set. Overrides change the effectiveStatus or impact of
1303
+ * the requirement. All overrides must have an expiration date to enforce periodic review.
1304
+ */
1305
+ export interface StatusOverride {
1306
+ /**
1307
+ * Timestamp when this override was applied. ISO 8601 format.
1308
+ */
1309
+ appliedAt: Date;
1310
+ /**
1311
+ * Identity of who applied this override. For simple cases, use type 'simple' with just an
1312
+ * identifier.
1313
+ */
1314
+ appliedBy: Identity;
1315
+ /**
1316
+ * Structured CVSS scoring data backing this override. Captures the rubric (which
1317
+ * Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
1318
+ * a riskAdjustment. For other override types this is optional context.
1319
+ */
1320
+ cvss?: Cvss;
1321
+ /**
1322
+ * Supporting evidence for this override, such as screenshots demonstrating manual
1323
+ * verification for attestations.
1324
+ */
1325
+ evidence?: Evidence[];
1326
+ /**
1327
+ * Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
1328
+ * permanent overrides allowed. ISO 8601 format.
1329
+ */
1330
+ expiresAt: Date;
1331
+ /**
1332
+ * Override to the requirement's impact score. At least one of status or impact must be set.
1333
+ */
1334
+ impact?: ImpactOverride;
1335
+ /**
1336
+ * Structured controlled-vocabulary classification for why this override applies.
1337
+ * Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
1338
+ * and attestation overrides where the structured category enables filtering and lossless
1339
+ * round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
1340
+ * precedent vocabulary and rationale.
1341
+ */
1342
+ justification?: Justification;
1343
+ /**
1344
+ * SHA-256 checksum of the previous amendment in chronological order. Creates a
1345
+ * tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
1346
+ * on a requirement.
1347
+ */
1348
+ previousChecksum?: Checksum;
1349
+ /**
1350
+ * Explanation for why this override was applied.
1351
+ */
1352
+ reason: string;
1353
+ /**
1354
+ * Optional digital signature for enhanced trust and non-repudiation. Supports hardware
1355
+ * security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
1356
+ * methods.
1357
+ */
1358
+ signature?: Signature;
1359
+ /**
1360
+ * The new status this override sets for the requirement. Optional when only impact is being
1361
+ * overridden.
1362
+ */
1363
+ status?: ResultStatus;
1364
+ /**
1365
+ * The type of override applied to this requirement.
1366
+ */
1367
+ type: OverrideType;
1368
+ [property: string]: any;
1369
+ }
1370
+ /**
1371
+ * Override to the requirement's impact score. At least one of status or impact must be
1372
+ * set.
1373
+ *
1374
+ * An override to the requirement's impact score. The prior impact is the original result
1375
+ * value or the preceding override in the chain.
1376
+ */
1377
+ export interface ImpactOverride {
1378
+ /**
1379
+ * The overridden impact score (0.0–1.0).
1380
+ */
1381
+ value: number;
1382
+ [property: string]: any;
1383
+ }
1384
+ /**
1385
+ * Structured controlled-vocabulary classification for why this override applies.
1386
+ * Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
1387
+ * and attestation overrides where the structured category enables filtering and lossless
1388
+ * round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
1389
+ * precedent vocabulary and rationale.
1390
+ *
1391
+ * Structured controlled-vocabulary reason for an override, complementing the free-text
1392
+ * 'reason' field. 'reason' carries the human-readable rationale an auditor reads;
1393
+ * 'justification' carries the machine-readable category enabling filtering, aggregation,
1394
+ * and lossless round-trip with structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields
1395
+ * may be present simultaneously and are NOT redundant: 'reason' explains the specific
1396
+ * circumstance; 'justification' classifies it. Authors SHOULD populate both when a
1397
+ * controlled-vocabulary value applies — the enum value alone is not self-explanatory to an
1398
+ * auditor. The vocabulary is drawn from the VEX ecosystem: the first five values are common
1399
+ * across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six (requires_configuration /
1400
+ * requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
1401
+ * / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
1402
+ * path is unreachable in the deployed configuration. The enum is extended additively across
1403
+ * schema versions as other ecosystems' controlled vocabularies are integrated; documents
1404
+ * using values added in a newer schema version will fail validation against an older
1405
+ * schema. Consumers SHOULD validate against the schema version declared by the document
1406
+ * ($schema) rather than assume a fixed vocabulary.
1407
+ */
1408
+ export declare enum Justification {
1409
+ ComponentNotPresent = "component_not_present",
1410
+ InlineMitigationsAlreadyExist = "inline_mitigations_already_exist",
1411
+ ProtectedAtPerimeter = "protected_at_perimeter",
1412
+ ProtectedAtRuntime = "protected_at_runtime",
1413
+ ProtectedByCompiler = "protected_by_compiler",
1414
+ RequiresConfiguration = "requires_configuration",
1415
+ RequiresDependency = "requires_dependency",
1416
+ RequiresEnvironment = "requires_environment",
1417
+ VulnerableCodeCannotBeControlledByAdversary = "vulnerable_code_cannot_be_controlled_by_adversary",
1418
+ VulnerableCodeNotInExecutePath = "vulnerable_code_not_in_execute_path",
1419
+ VulnerableCodeNotPresent = "vulnerable_code_not_present"
1420
+ }
1421
+ /**
1422
+ * How this requirement is intended to be verified. Disambiguates the two cases that null
1423
+ * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1424
+ * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1425
+ * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1426
+ * runs without operator action; 'hybrid' = part automated, part manual. Optional: when
1427
+ * omitted, consumers should not infer a default.
1428
+ *
1429
+ * How a requirement is intended to be verified. Disambiguates the two cases that null
1430
+ * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
1431
+ * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
1432
+ * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
1433
+ * runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
1434
+ * disambiguate from the unrelated Verification_Method DID-context struct.
1435
+ */
1436
+ export declare enum VerificationMethodEnum {
1437
+ Automated = "automated",
1438
+ Hybrid = "hybrid",
1439
+ ManualByDesign = "manual-by-design",
1440
+ ManualPendingAutomation = "manual-pending-automation"
1441
+ }
1442
+ /**
1443
+ * A supported platform target. Example: the platform name being 'ubuntu'.
1444
+ */
1445
+ export interface SupportedPlatform {
1446
+ /**
1447
+ * The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'.
1448
+ */
1449
+ platform?: string;
1450
+ /**
1451
+ * The platform family. Example: 'redhat'.
1452
+ */
1453
+ platformFamily?: string;
1454
+ /**
1455
+ * The platform name - can include wildcards. Example: 'debian'.
1456
+ */
1457
+ platformName?: string;
1458
+ /**
1459
+ * The release of the platform. Example: '20.04' for 'ubuntu'.
1460
+ */
1461
+ release?: string;
1462
+ [property: string]: any;
1463
+ }
1464
+ /**
1465
+ * A system component. Uses discriminated union pattern with 'type' field as discriminator.
1466
+ * Superset of Target with identity, external IDs, and SBOM support.
1467
+ *
1468
+ * A physical or virtual server, workstation, or network device.
1469
+ *
1470
+ * Base properties shared by all component types. Extends the Target concept with stable
1471
+ * identity, external references, and SBOM embedding.
1472
+ *
1473
+ * A static container image (not running).
1474
+ *
1475
+ * A running container instance.
1476
+ *
1477
+ * A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).
1478
+ *
1479
+ * A cloud provider account (AWS account, Azure subscription, GCP project).
1480
+ *
1481
+ * A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).
1482
+ *
1483
+ * A code repository (for SAST tools).
1484
+ *
1485
+ * A running application or API (for DAST tools).
1486
+ *
1487
+ * A software artifact or dependency (for SCA tools).
1488
+ *
1489
+ * A network segment or network device.
1490
+ *
1491
+ * A database instance.
1492
+ */
1493
+ export interface Component {
1494
+ /**
1495
+ * Names of baselines that apply to this component.
1496
+ */
1497
+ baselineRefs?: string[];
1498
+ /**
1499
+ * Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
1500
+ * hdf-results. Enables cross-document correlation, diffing, and data flow references.
1501
+ */
1502
+ componentId?: string;
1503
+ /**
1504
+ * Description of this component's role or purpose.
1505
+ */
1506
+ description?: string;
1507
+ /**
1508
+ * Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure
1509
+ * (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are
1510
+ * allowed.
1511
+ */
1512
+ externalIds?: {
1513
+ [key: string]: string;
1514
+ };
1515
+ /**
1516
+ * System-specific overrides for baseline input values.
1517
+ */
1518
+ inputOverrides?: InputOverride[];
1519
+ /**
1520
+ * Optional key-value labels for flexible grouping. Well-known keys: system, component,
1521
+ * environment, region, team. Values must be strings.
1522
+ */
1523
+ labels?: {
1524
+ [key: string]: string;
1525
+ };
1526
+ /**
1527
+ * Human-readable name for this component.
1528
+ */
1529
+ name: string;
1530
+ /**
1531
+ * Team or individual responsible for this component. Enables per-component ownership when
1532
+ * different teams manage different parts of a system.
1533
+ */
1534
+ owner?: Identity;
1535
+ /**
1536
+ * Embedded CycloneDX or SPDX SBOM document representing this component's software
1537
+ * inventory. The sbomFormat field determines which format constraints apply.
1538
+ */
1539
+ sbom?: any;
1540
+ /**
1541
+ * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1542
+ */
1543
+ sbomFormat?: SBOMFormat;
1544
+ /**
1545
+ * URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
1546
+ * relative path, absolute URI, or fragment identifier.
1547
+ */
1548
+ sbomRef?: string;
1549
+ /**
1550
+ * Label selector to match targets belonging to this component during migration. Targets
1551
+ * with matching labels are automatically included.
1552
+ */
1553
+ targetSelector?: {
1554
+ [key: string]: string;
1555
+ };
1556
+ /**
1557
+ * Component type discriminator. Same values as Target types.
1558
+ */
1559
+ type: TargetType;
1560
+ /**
1561
+ * Fully qualified domain name.
1562
+ */
1563
+ fqdn?: string;
1564
+ /**
1565
+ * IP address of the host.
1566
+ */
1567
+ ipAddress?: string;
1568
+ /**
1569
+ * MAC address in colon-separated hexadecimal format.
1570
+ */
1571
+ macAddress?: string;
1572
+ /**
1573
+ * Operating system name.
1574
+ */
1575
+ osName?: string;
1576
+ /**
1577
+ * Operating system version.
1578
+ */
1579
+ osVersion?: string;
1580
+ /**
1581
+ * Image digest for immutable reference.
1582
+ */
1583
+ digest?: string;
1584
+ /**
1585
+ * Container image ID.
1586
+ */
1587
+ imageId?: string;
1588
+ /**
1589
+ * Container registry. Example: 'docker.io'.
1590
+ */
1591
+ registry?: string;
1592
+ /**
1593
+ * Repository name. Example: 'library/nginx'.
1594
+ */
1595
+ repository?: string;
1596
+ /**
1597
+ * Image tag. Example: '1.25'.
1598
+ */
1599
+ tag?: string;
1600
+ /**
1601
+ * Running container ID.
1602
+ */
1603
+ containerId?: string;
1604
+ /**
1605
+ * Image the container was started from.
1606
+ */
1607
+ image?: string;
1608
+ /**
1609
+ * Container runtime. Example: 'docker', 'containerd', 'cri-o'.
1610
+ */
1611
+ runtime?: string;
1612
+ /**
1613
+ * Cluster name.
1614
+ */
1615
+ clusterName?: string;
1616
+ /**
1617
+ * Namespace within the cluster, if applicable.
1618
+ */
1619
+ namespace?: string;
1620
+ /**
1621
+ * Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'.
1622
+ */
1623
+ platformType?: string;
1624
+ /**
1625
+ * Platform version.
1626
+ *
1627
+ * Application version.
1628
+ *
1629
+ * Package version.
1630
+ *
1631
+ * Database version.
1632
+ */
1633
+ version?: string;
1634
+ /**
1635
+ * Cloud account identifier.
1636
+ */
1637
+ accountId?: string;
1638
+ /**
1639
+ * Cloud provider.
1640
+ */
1641
+ provider?: CloudProvider | null;
1642
+ /**
1643
+ * Cloud region, if applicable.
1644
+ *
1645
+ * Cloud region where the resource resides.
1646
+ */
1647
+ region?: string;
1648
+ /**
1649
+ * Amazon Resource Name (AWS only).
1650
+ */
1651
+ arn?: string;
1652
+ /**
1653
+ * Provider-specific resource identifier.
1654
+ */
1655
+ resourceId?: string;
1656
+ /**
1657
+ * Type of cloud resource. Example: 'ec2:instance', 's3:bucket'.
1658
+ */
1659
+ resourceType?: string;
1660
+ /**
1661
+ * Branch that was scanned.
1662
+ */
1663
+ branch?: string;
1664
+ /**
1665
+ * Commit SHA that was scanned.
1666
+ */
1667
+ commit?: string;
1668
+ /**
1669
+ * Repository URL.
1670
+ *
1671
+ * Application URL (for DAST tools).
1672
+ */
1673
+ url?: string;
1674
+ /**
1675
+ * Environment. Example: 'production', 'staging', 'development'.
1676
+ */
1677
+ environment?: string;
1678
+ /**
1679
+ * Package checksum for verification.
1680
+ */
1681
+ checksum?: string;
1682
+ /**
1683
+ * Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
1684
+ */
1685
+ packageManager?: string;
1686
+ /**
1687
+ * Package name.
1688
+ */
1689
+ packageName?: string;
1690
+ /**
1691
+ * Network CIDR block.
1692
+ */
1693
+ cidr?: string;
1694
+ /**
1695
+ * Network gateway address.
1696
+ */
1697
+ gateway?: string;
1698
+ /**
1699
+ * Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'.
1700
+ */
1701
+ engine?: string;
1702
+ /**
1703
+ * Database host.
1704
+ */
1705
+ host?: string;
1706
+ /**
1707
+ * Database port.
1708
+ */
1709
+ port?: number;
1710
+ [property: string]: any;
1711
+ }
1712
+ /**
1713
+ * An override of a baseline input value for a specific component. Enables system-specific
1714
+ * tailoring of baseline parameters.
1715
+ */
1716
+ export interface InputOverride {
1717
+ /**
1718
+ * Identity of the person or system that approved this override.
1719
+ */
1720
+ approvedBy?: Identity;
1721
+ /**
1722
+ * Name of the baseline this override applies to. If omitted, applies to all baselines that
1723
+ * define this input.
1724
+ */
1725
+ baselineRef?: string;
1726
+ /**
1727
+ * Name of the input being overridden. Must match an Input.name in the referenced baseline.
1728
+ */
1729
+ inputName: string;
1730
+ /**
1731
+ * Rationale for why this override is needed.
1732
+ */
1733
+ justification?: string;
1734
+ /**
1735
+ * The overridden value. Should match the type of the original input.
1736
+ */
1737
+ value: any;
1738
+ [property: string]: any;
1739
+ }
1740
+ export declare enum CloudProvider {
1741
+ Aws = "aws",
1742
+ Azure = "azure",
1743
+ Gcp = "gcp",
1744
+ Oci = "oci",
1745
+ Other = "other"
1746
+ }
1747
+ /**
1748
+ * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1749
+ */
1750
+ export declare enum SBOMFormat {
1751
+ Cyclonedx = "cyclonedx",
1752
+ Spdx = "spdx"
1753
+ }
1754
+ /**
1755
+ * Component type discriminator. Same values as Target types.
1756
+ */
1757
+ export declare enum TargetType {
1758
+ Application = "application",
1759
+ Artifact = "artifact",
1760
+ CloudAccount = "cloudAccount",
1761
+ CloudResource = "cloudResource",
1762
+ ContainerImage = "containerImage",
1763
+ ContainerInstance = "containerInstance",
1764
+ ContainerPlatform = "containerPlatform",
1765
+ Database = "database",
1766
+ Host = "host",
1767
+ Network = "network",
1768
+ Repository = "repository"
1769
+ }
1770
+ /**
1771
+ * Information about the tool that generated this file.
1772
+ *
1773
+ * Information about the tool that generated this HDF file.
1774
+ *
1775
+ * The tool that generated this file.
1776
+ *
1777
+ * Information about the tool that generated this comparison.
1778
+ *
1779
+ * Information about the tool that generated this system document.
1780
+ *
1781
+ * Information about the tool that generated this plan.
1782
+ *
1783
+ * Information about the tool that generated this document.
1784
+ */
1785
+ export interface Generator {
1786
+ /**
1787
+ * The name of the software that produced this HDF file. Example: 'gosec-to-hdf'.
1788
+ */
1789
+ name: string;
1790
+ /**
1791
+ * The version of the tool. Example: '5.22.3'.
1792
+ */
1793
+ version: string;
1794
+ [property: string]: any;
1795
+ }
1796
+ /**
1797
+ * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1798
+ * scripts, etc.) for fixing failing requirements found in this assessment.
1799
+ *
1800
+ * Reference to automated remediation resources for implementing security controls. Points
1801
+ * to external automation content like Ansible playbooks, Terraform scripts, or
1802
+ * vendor-provided remediation tools.
1803
+ *
1804
+ * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1805
+ * scripts, etc.) for implementing the security controls defined in this baseline.
1806
+ */
1807
+ export interface Remediation {
1808
+ /**
1809
+ * Optional cryptographic checksum for verifying the integrity of remediation resources
1810
+ * fetched from the URI. Recommended for security when referencing external automation
1811
+ * scripts.
1812
+ */
1813
+ checksum?: Checksum;
1814
+ /**
1815
+ * URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts,
1816
+ * etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content,
1817
+ * vendor-provided scripts.
1818
+ */
1819
+ uri: string;
1820
+ [property: string]: any;
1821
+ }
1822
+ /**
1823
+ * Information about the test execution environment where the security tool was run.
1824
+ * Distinct from targets (what is being tested).
1825
+ *
1826
+ * Information about the test execution environment. This is distinct from the target being
1827
+ * scanned - the runner is where the security tool executes, while targets are what is being
1828
+ * assessed.
1829
+ */
1830
+ export interface Runner {
1831
+ /**
1832
+ * The CPU architecture of the runner system. Example: 'x86_64', 'arm64', 'aarch64'.
1833
+ */
1834
+ architecture?: string;
1835
+ /**
1836
+ * The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'.
1837
+ * Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier.
1838
+ */
1839
+ containerId?: string;
1840
+ /**
1841
+ * The container image used for the test execution. Example: 'inspec/inspec:latest',
1842
+ * 'ghcr.io/my-org/scanner:v2.1.0'. Useful for CI/CD pipelines where tests run in containers.
1843
+ */
1844
+ containerImage?: string;
1845
+ /**
1846
+ * The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1847
+ * 'k8s-node-worker-03'.
1848
+ */
1849
+ hostname?: string;
1850
+ /**
1851
+ * The name of the runner environment. Examples: 'ubuntu', 'macos', 'windows', 'docker',
1852
+ * 'kubernetes-pod', 'manual'.
1853
+ */
1854
+ name: string;
1855
+ /**
1856
+ * The identity of the person or system responsible for executing the test. This could be a
1857
+ * human auditor manually completing a checklist, an automated CI/CD system, or a security
1858
+ * tool. Optional field to support both automated and manual HDF generation.
1859
+ */
1860
+ operator?: Identity;
1861
+ /**
1862
+ * The version/release of the operating system or runtime. Example: '20.04', '13.2', '11'.
1863
+ */
1864
+ release?: string;
1865
+ [property: string]: any;
1866
+ }
1867
+ /**
1868
+ * Statistics for the assessment run, including duration and result counts.
1869
+ *
1870
+ * Statistics for the assessment run(s) such as duration and result counts.
1871
+ */
1872
+ export interface Statistics {
1873
+ /**
1874
+ * How long (in seconds) this assessment run took.
1875
+ */
1876
+ duration?: number;
1877
+ /**
1878
+ * Breakdowns of requirement statistics by result status.
1879
+ */
1880
+ requirements?: StatisticHash;
1881
+ [property: string]: any;
1882
+ }
1883
+ /**
1884
+ * Breakdowns of requirement statistics by result status.
1885
+ *
1886
+ * Statistics for requirement results, grouped by status.
1887
+ */
1888
+ export interface StatisticHash {
1889
+ /**
1890
+ * Statistics for requirements that encountered an error during assessment.
1891
+ */
1892
+ error?: StatisticBlock;
1893
+ /**
1894
+ * Statistics for requirements that failed.
1895
+ */
1896
+ failed?: StatisticBlock;
1897
+ /**
1898
+ * Statistics for requirements that are not applicable to the target.
1899
+ */
1900
+ notApplicable?: StatisticBlock;
1901
+ /**
1902
+ * Statistics for requirements that were not reviewed (manual check required).
1903
+ */
1904
+ notReviewed?: StatisticBlock;
1905
+ /**
1906
+ * Statistics for requirements that passed.
1907
+ */
1908
+ passed?: StatisticBlock;
1909
+ [property: string]: any;
1910
+ }
1911
+ /**
1912
+ * Statistics for requirements that encountered an error during assessment.
1913
+ *
1914
+ * Statistics for a given item, such as the total count.
1915
+ *
1916
+ * Statistics for requirements that failed.
1917
+ *
1918
+ * Statistics for requirements that are not applicable to the target.
1919
+ *
1920
+ * Statistics for requirements that were not reviewed (manual check required).
1921
+ *
1922
+ * Statistics for requirements that passed.
1923
+ */
1924
+ export interface StatisticBlock {
1925
+ /**
1926
+ * The total count. Example: the total number of requirements in a given category for a run.
1927
+ */
1928
+ total: number;
1929
+ [property: string]: any;
1930
+ }
1931
+ /**
1932
+ * The security tool that produced the assessment data in this file.
1933
+ *
1934
+ * The security tool that produced the assessment data represented in this HDF file. Aligns
1935
+ * with SARIF, OSCAL, and CycloneDX terminology.
1936
+ *
1937
+ * The security tool that produced the assessment data in this source.
1938
+ */
1939
+ export interface Tool {
1940
+ /**
1941
+ * The file format, if it is a recognized named format shared by multiple tools. Examples:
1942
+ * 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the
1943
+ * format (Nessus XML, gosec JSON).
1944
+ */
1945
+ format?: string;
1946
+ /**
1947
+ * The name of the security tool that produced the data. Examples: 'gosec', 'Semgrep',
1948
+ * 'OpenSCAP', 'AWS Config', 'Nessus'. Omit if the tool cannot be identified.
1949
+ */
1950
+ name?: string;
1951
+ /**
1952
+ * Version of the source tool, if available in the tool's output. Example: '5.22.3'.
1953
+ */
1954
+ version?: string;
1955
+ [property: string]: any;
1956
+ }
1957
+ /**
1958
+ * Information on the set of requirements that can be assessed, including baseline metadata
1959
+ * and requirement definitions.
1960
+ *
1961
+ * Shared metadata fields for baselines. Used in both standalone baseline documents and
1962
+ * evaluated baseline results.
1963
+ */
1964
+ export interface HDFBaseline {
1965
+ /**
1966
+ * The set of dependencies this baseline depends on.
1967
+ */
1968
+ depends?: Dependency[];
1969
+ /**
1970
+ * The tool that generated this file.
1971
+ */
1972
+ generator?: Generator;
1973
+ /**
1974
+ * A set of descriptions for the requirement groups.
1975
+ */
1976
+ groups?: RequirementGroup[];
1977
+ /**
1978
+ * The input(s) or attribute(s) to be used in the run.
1979
+ */
1980
+ inputs?: Input[];
1981
+ /**
1982
+ * Cryptographic integrity information for verifying this baseline has not been tampered
1983
+ * with.
1984
+ */
1985
+ integrity?: Integrity;
1986
+ /**
1987
+ * Optional reference to automated remediation resources (Ansible playbooks, Terraform
1988
+ * scripts, etc.) for implementing the security controls defined in this baseline.
1989
+ */
1990
+ remediation?: Remediation;
1991
+ /**
1992
+ * The set of requirements - contains no findings as the assessment has not yet occurred.
1993
+ */
1994
+ requirements: BaselineRequirement[];
1995
+ /**
1996
+ * The name - must be unique.
1997
+ */
1998
+ name: string;
1999
+ /**
2000
+ * The copyright holder(s).
2001
+ */
2002
+ copyright?: string;
2003
+ /**
2004
+ * The email address or other contact information of the copyright holder(s).
2005
+ */
2006
+ copyrightEmail?: string;
2007
+ /**
2008
+ * Optional key-value labels for flexible grouping. Well-known keys: system, component,
2009
+ * environment, region, team. Values must be strings.
2010
+ */
2011
+ labels?: {
2012
+ [key: string]: string;
2013
+ };
2014
+ /**
2015
+ * The copyright license. Example: 'Apache-2.0'.
2016
+ */
2017
+ license?: string;
2018
+ /**
2019
+ * The maintainer(s).
2020
+ */
2021
+ maintainer?: string;
2022
+ /**
2023
+ * The status. Example: 'loaded'.
2024
+ */
2025
+ status?: string;
2026
+ /**
2027
+ * The summary. Example: the Security Technical Implementation Guide (STIG) header.
2028
+ */
2029
+ summary?: string;
2030
+ /**
2031
+ * The set of supported platform targets.
2032
+ */
2033
+ supports?: SupportedPlatform[];
2034
+ /**
2035
+ * The title - should be human readable.
2036
+ */
2037
+ title?: string;
2038
+ /**
2039
+ * The version of the baseline.
2040
+ */
2041
+ version?: string;
2042
+ [property: string]: any;
2043
+ }
2044
+ /**
2045
+ * A requirement definition without assessment results.
2046
+ *
2047
+ * Core requirement fields shared between baseline requirements and evaluated requirements.
2048
+ * Contains the fundamental requirement definition without assessment results.
2049
+ */
2050
+ export interface BaselineRequirement {
2051
+ /**
2052
+ * Array of labeled descriptions. At least one description with label 'default' must be
2053
+ * present. Convention: place default description first. Common labels: 'default', 'check',
2054
+ * 'fix', 'rationale'.
2055
+ */
2056
+ descriptions: Description[];
2057
+ /**
2058
+ * Explicit severity rating. Typically derived from impact score but provided explicitly for
2059
+ * clarity.
2060
+ */
2061
+ severity?: Severity;
2062
+ /**
2063
+ * The requirement identifier. Example: 'SV-238196'.
2064
+ */
2065
+ id: string;
2066
+ /**
2067
+ * The impactfulness or severity (0.0 to 1.0).
2068
+ */
2069
+ impact: number;
2070
+ /**
2071
+ * A set of tags - usually metadata like CCI, STIG ID, severity.
2072
+ */
2073
+ tags: {
2074
+ [key: string]: any;
2075
+ };
2076
+ /**
2077
+ * Whether the requirement is mandatory within its baseline. Distinct from severity (risk
2078
+ * weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
2079
+ * FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
2080
+ * memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
2081
+ * Optional: when omitted, consumers should treat the requirement as 'required' by
2082
+ * convention.
2083
+ */
2084
+ applicability?: Applicability;
2085
+ /**
2086
+ * The raw source code of the requirement. Set to null for manual-only requirements or
2087
+ * requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
2088
+ * from manual-pending-automation. Note that if this is an overlay, it does not include the
2089
+ * underlying source code.
2090
+ */
2091
+ code?: string;
2092
+ /**
2093
+ * Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
2094
+ * categories. 'policy' = an authored governance statement; 'procedure' = a documented
2095
+ * process; 'technical' = an enforced technical configuration; 'management' = a
2096
+ * programmatic/management activity; 'operational' = a recurring operational activity (e.g.
2097
+ * AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
2098
+ * family/id but should not assume a default.
2099
+ */
2100
+ controlType?: ControlType;
2101
+ /**
2102
+ * The set of references to external documents.
2103
+ */
2104
+ refs?: Reference[];
2105
+ /**
2106
+ * The explicit location of the requirement within the source code.
2107
+ */
2108
+ sourceLocation?: SourceLocation;
2109
+ /**
2110
+ * The title - is nullable.
2111
+ */
2112
+ title?: string;
2113
+ /**
2114
+ * How this requirement is intended to be verified. Disambiguates the two cases that null
2115
+ * 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
2116
+ * to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
2117
+ * exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
2118
+ * runs without operator action; 'hybrid' = part automated, part manual. Optional: when
2119
+ * omitted, consumers should not infer a default.
2120
+ */
2121
+ verificationMethod?: VerificationMethodEnum;
2122
+ [property: string]: any;
2123
+ }
2124
+ /**
2125
+ * Structured comparison between two or more HDF security assessment documents. Supports
2126
+ * temporal, baseline, fleet, and multi-source comparison modes.
2127
+ */
2128
+ export interface HDFComparison {
2129
+ /**
2130
+ * Map of annotation IDs to annotation objects, providing context or action items for
2131
+ * requirement diffs.
2132
+ */
2133
+ annotations?: {
2134
+ [key: string]: Annotation;
2135
+ };
2136
+ /**
2137
+ * Comparison of baselines between sources.
2138
+ */
2139
+ baselineDiffs?: BaselineDiff[];
2140
+ /**
2141
+ * The mode of comparison being performed.
2142
+ */
2143
+ comparisonMode: ComparisonMode;
2144
+ /**
2145
+ * Comparison of components between two system documents. Used in systemDrift mode.
2146
+ */
2147
+ componentDiffs?: ComponentDiff[];
2148
+ /**
2149
+ * External/metadata changes separate from status changes (Terraform pattern).
2150
+ */
2151
+ drift?: RequirementDiff[];
2152
+ /**
2153
+ * Reserved for tool-specific data not defined in the HDF standard.
2154
+ */
2155
+ extensions?: {
2156
+ [key: string]: any;
2157
+ };
2158
+ /**
2159
+ * Schema version for this comparison format.
2160
+ */
2161
+ formatVersion: FormatVersion;
2162
+ /**
2163
+ * Information about the tool that generated this comparison.
2164
+ */
2165
+ generator?: Generator;
2166
+ /**
2167
+ * Cryptographic integrity information for verifying this comparison document.
2168
+ */
2169
+ integrity?: Integrity;
2170
+ /**
2171
+ * Configuration for how requirements were matched across sources.
2172
+ */
2173
+ matching?: MatchingConfig;
2174
+ /**
2175
+ * Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
2176
+ */
2177
+ packageDiffs?: PackageDiff[];
2178
+ /**
2179
+ * Detailed comparison of individual requirements between sources.
2180
+ */
2181
+ requirementDiffs: RequirementDiff[];
2182
+ /**
2183
+ * The source documents being compared. At least two sources are required.
2184
+ */
2185
+ sources: Source[];
2186
+ /**
2187
+ * Summary statistics for the overall comparison.
2188
+ */
2189
+ summary: ComparisonSummary;
2190
+ /**
2191
+ * URI identifying the system being compared in systemDrift mode.
2192
+ */
2193
+ systemRef?: string;
2194
+ /**
2195
+ * When this comparison was performed.
2196
+ */
2197
+ timestamp?: Date;
2198
+ [property: string]: any;
2199
+ }
2200
+ /**
2201
+ * An annotation attached to a comparison, providing context or action items.
2202
+ */
2203
+ export interface Annotation {
2204
+ /**
2205
+ * The category of this annotation.
2206
+ */
2207
+ category?: AnnotationCategory;
2208
+ /**
2209
+ * Detailed description of the annotation.
2210
+ */
2211
+ description?: string;
2212
+ /**
2213
+ * Human-readable label for this annotation.
2214
+ */
2215
+ label: string;
2216
+ /**
2217
+ * Whether this annotation requires human confirmation before acting on it.
2218
+ */
2219
+ needsConfirmation?: boolean;
2220
+ [property: string]: any;
2221
+ }
2222
+ /**
2223
+ * The category of this annotation.
2224
+ *
2225
+ * The category of an annotation attached to a comparison.
2226
+ */
2227
+ export declare enum AnnotationCategory {
2228
+ BaselineChange = "baselineChange",
2229
+ Drift = "drift",
2230
+ Remediation = "remediation",
2231
+ ScannerNote = "scannerNote",
2232
+ Waiver = "waiver"
2233
+ }
2234
+ /**
2235
+ * Comparison of a baseline between sources.
2236
+ */
2237
+ export interface BaselineDiff {
2238
+ /**
2239
+ * The source of any ID mapping used to correlate requirements across baseline versions.
2240
+ */
2241
+ mappingSource?: string;
2242
+ /**
2243
+ * Name of the baseline being compared.
2244
+ */
2245
+ name: string;
2246
+ /**
2247
+ * Version of the baseline in the new source.
2248
+ */
2249
+ newVersion?: string;
2250
+ /**
2251
+ * Version of the baseline in the old source.
2252
+ */
2253
+ oldVersion?: string;
2254
+ /**
2255
+ * The state of this baseline in the comparison.
2256
+ */
2257
+ state: BaselineDiffState;
2258
+ [property: string]: any;
2259
+ }
2260
+ /**
2261
+ * The state of this baseline in the comparison.
2262
+ *
2263
+ * The state of this component in the comparison.
2264
+ */
2265
+ export declare enum BaselineDiffState {
2266
+ Absent = "absent",
2267
+ New = "new",
2268
+ Unchanged = "unchanged",
2269
+ Updated = "updated"
2270
+ }
2271
+ /**
2272
+ * The mode of comparison being performed.
2273
+ *
2274
+ * The mode of comparison. 'temporal' compares the same target over time. 'baseline'
2275
+ * compares against a golden reference. 'fleet' compares across multiple systems.
2276
+ * 'multiSource' compares outputs from different scanners. 'baselineEvolution' compares two
2277
+ * baseline documents to detect requirement changes between versions. 'systemDrift' compares
2278
+ * two system documents to detect component-level changes.
2279
+ */
2280
+ export declare enum ComparisonMode {
2281
+ Baseline = "baseline",
2282
+ BaselineEvolution = "baselineEvolution",
2283
+ Fleet = "fleet",
2284
+ MultiSource = "multiSource",
2285
+ SystemDrift = "systemDrift",
2286
+ Temporal = "temporal"
2287
+ }
2288
+ /**
2289
+ * Comparison of a single component between two system document versions.
2290
+ */
2291
+ export interface ComponentDiff {
2292
+ /**
2293
+ * Component snapshot from the new system document. Null when state is 'absent'.
2294
+ */
2295
+ after?: any;
2296
+ /**
2297
+ * Component snapshot from the old system document. Null when state is 'new'.
2298
+ */
2299
+ before?: any;
2300
+ /**
2301
+ * Detailed field-level changes between the before and after component snapshots.
2302
+ */
2303
+ fieldChanges?: FieldChange[];
2304
+ /**
2305
+ * Component name used for matching across system versions.
2306
+ */
2307
+ name: string;
2308
+ /**
2309
+ * The state of this component in the comparison.
2310
+ */
2311
+ state: BaselineDiffState;
2312
+ [property: string]: any;
2313
+ }
2314
+ /**
2315
+ * A single field-level change between two versions of a requirement.
2316
+ */
2317
+ export interface FieldChange {
2318
+ /**
2319
+ * The new value of the field (for 'add' and 'replace' operations).
2320
+ */
2321
+ newValue?: any;
2322
+ /**
2323
+ * The previous value of the field (for 'remove' and 'replace' operations).
2324
+ */
2325
+ oldValue?: any;
2326
+ /**
2327
+ * The type of change operation.
2328
+ */
2329
+ op: Op;
2330
+ /**
2331
+ * JSON Pointer path to the changed field.
2332
+ */
2333
+ path: string;
2334
+ [property: string]: any;
2335
+ }
2336
+ /**
2337
+ * The type of change operation.
2338
+ */
2339
+ export declare enum Op {
2340
+ Add = "add",
2341
+ Remove = "remove",
2342
+ Replace = "replace"
2343
+ }
2344
+ /**
2345
+ * A comparison of a single requirement between sources, including state, changes, and full
2346
+ * before/after snapshots.
2347
+ */
2348
+ export interface RequirementDiff {
2349
+ /**
2350
+ * The requirement as it appeared in the new source. Null when state is 'absent'.
2351
+ */
2352
+ after: any;
2353
+ /**
2354
+ * Sensitive data from the new source that should not be included in the main after snapshot.
2355
+ */
2356
+ afterSensitive?: {
2357
+ [key: string]: any;
2358
+ };
2359
+ /**
2360
+ * IDs of annotations attached to this requirement diff.
2361
+ */
2362
+ annotationIds?: string[];
2363
+ /**
2364
+ * The requirement as it appeared in the old/reference source. Null when state is 'new'.
2365
+ */
2366
+ before: any;
2367
+ /**
2368
+ * Sensitive data from the old source that should not be included in the main before
2369
+ * snapshot.
2370
+ */
2371
+ beforeSensitive?: {
2372
+ [key: string]: any;
2373
+ };
2374
+ /**
2375
+ * The reasons for the state change.
2376
+ */
2377
+ changeReasons: ChangeReason[];
2378
+ /**
2379
+ * Conflicts between multiple scanner results for this requirement.
2380
+ */
2381
+ conflicts?: ScannerConflict[];
2382
+ /**
2383
+ * Detailed field-level changes between the before and after versions.
2384
+ */
2385
+ fieldChanges: FieldChange[];
2386
+ /**
2387
+ * The canonical requirement identifier used for this diff.
2388
+ */
2389
+ id: string;
2390
+ /**
2391
+ * Confidence score for the match (0-1).
2392
+ */
2393
+ matchConfidence?: number;
2394
+ /**
2395
+ * Whether the match was manually confirmed by a human.
2396
+ */
2397
+ matchManual?: boolean;
2398
+ /**
2399
+ * The strategy that was used to match this requirement across sources.
2400
+ */
2401
+ matchStrategy?: MatchStrategy;
2402
+ /**
2403
+ * The effective status of the requirement in the new source.
2404
+ */
2405
+ newEffectiveStatus?: string;
2406
+ /**
2407
+ * The requirement ID in the new source, if different from the canonical id.
2408
+ */
2409
+ newId?: string;
2410
+ /**
2411
+ * The impact score of the requirement in the new source (0-1).
2412
+ */
2413
+ newImpact?: number;
2414
+ /**
2415
+ * The effective status of the requirement in the old source.
2416
+ */
2417
+ oldEffectiveStatus?: string;
2418
+ /**
2419
+ * The requirement ID in the old source, if different from the canonical id.
2420
+ */
2421
+ oldId?: string;
2422
+ /**
2423
+ * The impact score of the requirement in the old source (0-1).
2424
+ */
2425
+ oldImpact?: number;
2426
+ /**
2427
+ * Index into the sources array for multi-source comparisons.
2428
+ */
2429
+ sourceIndex?: number;
2430
+ /**
2431
+ * The state of this requirement in the comparison.
2432
+ */
2433
+ state: RequirementState;
2434
+ /**
2435
+ * The requirement title for human readability.
2436
+ */
2437
+ title?: string;
2438
+ [property: string]: any;
2439
+ }
2440
+ /**
2441
+ * The reason a requirement's state changed between sources.
2442
+ */
2443
+ export declare enum ChangeReason {
2444
+ BaselineUpgraded = "baselineUpgraded",
2445
+ ConfigChanged = "configChanged",
2446
+ ControlMapped = "controlMapped",
2447
+ ImpactChanged = "impactChanged",
2448
+ MetadataChanged = "metadataChanged",
2449
+ OverrideAdded = "overrideAdded",
2450
+ OverrideExpired = "overrideExpired",
2451
+ OverrideModified = "overrideModified",
2452
+ OverrideRemoved = "overrideRemoved",
2453
+ ResultChanged = "resultChanged",
2454
+ ScannerChanged = "scannerChanged",
2455
+ TargetChanged = "targetChanged"
2456
+ }
2457
+ /**
2458
+ * A conflict between scanner results for the same requirement.
2459
+ */
2460
+ export interface ScannerConflict {
2461
+ /**
2462
+ * The field where the conflict occurs.
2463
+ */
2464
+ field: string;
2465
+ /**
2466
+ * How the conflict was resolved.
2467
+ */
2468
+ resolution?: ConflictResolution;
2469
+ /**
2470
+ * Index of the source whose value was chosen as the resolution.
2471
+ */
2472
+ resolvedIndex?: number;
2473
+ /**
2474
+ * The conflicting values from each source.
2475
+ */
2476
+ values: Value[];
2477
+ [property: string]: any;
2478
+ }
2479
+ /**
2480
+ * How the conflict was resolved.
2481
+ *
2482
+ * How a conflict between multiple scanner results was resolved.
2483
+ */
2484
+ export declare enum ConflictResolution {
2485
+ Manual = "manual",
2486
+ MostRecent = "mostRecent",
2487
+ MostSevere = "mostSevere",
2488
+ Unresolved = "unresolved"
2489
+ }
2490
+ export interface Value {
2491
+ /**
2492
+ * Zero-based index into the sources array.
2493
+ */
2494
+ sourceIndex: number;
2495
+ /**
2496
+ * Human-readable label for the source.
2497
+ */
2498
+ sourceLabel: string;
2499
+ /**
2500
+ * The value reported by this source for the conflicting field.
2501
+ */
2502
+ value: any;
2503
+ [property: string]: any;
2504
+ }
2505
+ /**
2506
+ * The strategy that was used to match this requirement across sources.
2507
+ *
2508
+ * The strategy used to match requirements across sources. 'exactId' matches by identical
2509
+ * IDs. 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework
2510
+ * identifiers. 'fuzzyTitle'/'fuzzyContent' use text similarity.
2511
+ *
2512
+ * The primary strategy used to match requirements across sources.
2513
+ */
2514
+ export declare enum MatchStrategy {
2515
+ CciMatch = "cciMatch",
2516
+ ExactID = "exactId",
2517
+ FuzzyContent = "fuzzyContent",
2518
+ FuzzyTitle = "fuzzyTitle",
2519
+ MappedID = "mappedId",
2520
+ NISTMatch = "nistMatch"
2521
+ }
2522
+ /**
2523
+ * The state of this requirement in the comparison.
2524
+ *
2525
+ * SARIF-compatible vocabulary extended for security. 'new' = present only in new source,
2526
+ * 'absent' = present only in old, 'unchanged' = same effective status, 'updated' = status
2527
+ * changed (generic), 'fixed' = was failing now passing, 'regressed' = was passing now
2528
+ * failing, 'moved' = reorganized same content, 'split'/'merged' = reserved for v1.1.
2529
+ */
2530
+ export declare enum RequirementState {
2531
+ Absent = "absent",
2532
+ Fixed = "fixed",
2533
+ Merged = "merged",
2534
+ Moved = "moved",
2535
+ New = "new",
2536
+ Regressed = "regressed",
2537
+ Split = "split",
2538
+ Unchanged = "unchanged",
2539
+ Updated = "updated"
2540
+ }
2541
+ export declare enum FormatVersion {
2542
+ The100 = "1.0.0"
2543
+ }
2544
+ /**
2545
+ * Configuration for how requirements were matched across sources.
2546
+ *
2547
+ * Configuration for how requirements are matched across sources.
2548
+ */
2549
+ export interface MatchingConfig {
2550
+ /**
2551
+ * Ordered list of fallback strategies tried when the primary strategy fails to find a match.
2552
+ */
2553
+ fallbackStrategies?: MatchStrategy[];
2554
+ /**
2555
+ * Fields used to compute a fingerprint for fuzzy matching.
2556
+ */
2557
+ fingerprintFields?: string[];
2558
+ /**
2559
+ * URI pointing to an external mapping table used for ID translation.
2560
+ */
2561
+ mappingTableUri?: string;
2562
+ /**
2563
+ * Minimum confidence score (0-1) required to accept a match.
2564
+ */
2565
+ minimumConfidence?: number;
2566
+ /**
2567
+ * The primary strategy used to match requirements across sources.
2568
+ */
2569
+ primaryStrategy: MatchStrategy;
2570
+ [property: string]: any;
2571
+ }
2572
+ /**
2573
+ * Comparison of a single package between two SBOM versions, matched by purl.
2574
+ */
2575
+ export interface PackageDiff {
2576
+ /**
2577
+ * License identifiers for this package.
2578
+ */
2579
+ licenses?: string[];
2580
+ /**
2581
+ * Human-readable package name.
2582
+ */
2583
+ name?: string;
2584
+ /**
2585
+ * Package version in the new SBOM.
2586
+ */
2587
+ newVersion?: string;
2588
+ /**
2589
+ * Package version in the old SBOM.
2590
+ */
2591
+ oldVersion?: string;
2592
+ /**
2593
+ * Package URL (purl) used as the identity key for matching across SBOMs.
2594
+ */
2595
+ purl: string;
2596
+ /**
2597
+ * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2598
+ * updated (version changed), unchanged.
2599
+ */
2600
+ state: PackageDiffState;
2601
+ [property: string]: any;
2602
+ }
2603
+ /**
2604
+ * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2605
+ * updated (version changed), unchanged.
2606
+ */
2607
+ export declare enum PackageDiffState {
2608
+ Added = "added",
2609
+ Removed = "removed",
2610
+ Unchanged = "unchanged",
2611
+ Updated = "updated"
2612
+ }
2613
+ /**
2614
+ * A source document participating in the comparison.
2615
+ */
2616
+ export interface Source {
2617
+ /**
2618
+ * When the source assessment was performed. ISO 8601 format.
2619
+ */
2620
+ assessmentTimestamp?: Date;
2621
+ /**
2622
+ * Reference to the baseline used in this source assessment.
2623
+ */
2624
+ baselineRef?: BaselineRef;
2625
+ /**
2626
+ * Cryptographic checksum of the source document for integrity verification.
2627
+ */
2628
+ checksum?: Checksum;
2629
+ /**
2630
+ * The components assessed in this source.
2631
+ */
2632
+ components?: Component[];
2633
+ /**
2634
+ * Human-readable label for this source. Example: 'Before remediation scan'.
2635
+ */
2636
+ label: string;
2637
+ /**
2638
+ * The original format of the source document before conversion to HDF.
2639
+ */
2640
+ originalFormat?: OriginalFormat;
2641
+ /**
2642
+ * The role of this source in the comparison.
2643
+ */
2644
+ role: SourceRole;
2645
+ /**
2646
+ * The security tool that produced the assessment data in this source.
2647
+ */
2648
+ tool?: Tool;
2649
+ /**
2650
+ * URI pointing to the source document.
2651
+ */
2652
+ uri?: string;
2653
+ [property: string]: any;
2654
+ }
2655
+ /**
2656
+ * Reference to the baseline used in this source assessment.
2657
+ */
2658
+ export interface BaselineRef {
2659
+ /**
2660
+ * Name of the baseline used in this source.
2661
+ */
2662
+ name: string;
2663
+ /**
2664
+ * Version of the baseline used in this source.
2665
+ */
2666
+ version?: string;
2667
+ [property: string]: any;
2668
+ }
2669
+ /**
2670
+ * The original format of the source document before conversion to HDF.
2671
+ */
2672
+ export declare enum OriginalFormat {
2673
+ HdfV2 = "hdf-v2",
2674
+ InspecV1 = "inspec-v1",
2675
+ OscalAr = "oscal-ar",
2676
+ Sarif = "sarif",
2677
+ Xccdf = "xccdf"
2678
+ }
2679
+ /**
2680
+ * The role of this source in the comparison.
2681
+ *
2682
+ * The role of a source document in the comparison.
2683
+ */
2684
+ export declare enum SourceRole {
2685
+ Golden = "golden",
2686
+ New = "new",
2687
+ Old = "old",
2688
+ Reference = "reference",
2689
+ System = "system"
2690
+ }
2691
+ /**
2692
+ * Summary statistics for the overall comparison.
2693
+ */
2694
+ export interface ComparisonSummary {
2695
+ /**
2696
+ * Number of requirements present only in the old source.
2697
+ */
2698
+ absent?: number;
2699
+ /**
2700
+ * Average confidence score across all requirement matches (0-1).
2701
+ */
2702
+ averageMatchConfidence?: number;
2703
+ /**
2704
+ * State counts broken down by severity level.
2705
+ */
2706
+ bySeverity?: SeverityBreakdown;
2707
+ /**
2708
+ * Change in compliance percentage (new - old).
2709
+ */
2710
+ complianceDelta?: number;
2711
+ /**
2712
+ * Number of requirements that changed from failing to passing.
2713
+ */
2714
+ fixed?: number;
2715
+ /**
2716
+ * Number of requirements successfully matched between sources.
2717
+ */
2718
+ matchedCount: number;
2719
+ /**
2720
+ * Number of requirements that were reorganized without content change.
2721
+ */
2722
+ moved?: number;
2723
+ /**
2724
+ * Number of requirements present only in the new source.
2725
+ */
2726
+ new?: number;
2727
+ /**
2728
+ * Compliance percentage of the new source (0-100).
2729
+ */
2730
+ newCompliancePercent?: number;
2731
+ /**
2732
+ * Compliance percentage of the old source (0-100).
2733
+ */
2734
+ oldCompliancePercent?: number;
2735
+ /**
2736
+ * Summary statistics for each individual source in a multi-source comparison.
2737
+ */
2738
+ perSource?: PerSourceSummary[];
2739
+ /**
2740
+ * Number of requirements that changed from passing to failing.
2741
+ */
2742
+ regressed?: number;
2743
+ /**
2744
+ * Total number of unique requirements across all sources.
2745
+ */
2746
+ total: number;
2747
+ /**
2748
+ * Number of requirements with the same effective status.
2749
+ */
2750
+ unchanged?: number;
2751
+ /**
2752
+ * Number of requirements in the new source with no match in the old source.
2753
+ */
2754
+ unmatchedNewCount: number;
2755
+ /**
2756
+ * Number of requirements in the old source with no match in the new source.
2757
+ */
2758
+ unmatchedOldCount: number;
2759
+ /**
2760
+ * Number of requirements with a generic status change.
2761
+ */
2762
+ updated?: number;
2763
+ [property: string]: any;
2764
+ }
2765
+ /**
2766
+ * State counts broken down by severity level.
2767
+ *
2768
+ * Breakdown of state counts by severity level.
2769
+ */
2770
+ export interface SeverityBreakdown {
2771
+ /**
2772
+ * State counts for critical severity requirements.
2773
+ */
2774
+ critical?: StateCounts;
2775
+ /**
2776
+ * State counts for high severity requirements.
2777
+ */
2778
+ high?: StateCounts;
2779
+ /**
2780
+ * State counts for low severity requirements.
2781
+ */
2782
+ low?: StateCounts;
2783
+ /**
2784
+ * State counts for medium severity requirements.
2785
+ */
2786
+ medium?: StateCounts;
2787
+ [property: string]: any;
2788
+ }
2789
+ /**
2790
+ * State counts for critical severity requirements.
2791
+ *
2792
+ * Counts of requirements in each state.
2793
+ *
2794
+ * State counts for high severity requirements.
2795
+ *
2796
+ * State counts for low severity requirements.
2797
+ *
2798
+ * State counts for medium severity requirements.
2799
+ */
2800
+ export interface StateCounts {
2801
+ /**
2802
+ * Number of requirements present only in the old source.
2803
+ */
2804
+ absent?: number;
2805
+ /**
2806
+ * Number of requirements that changed from failing to passing.
2807
+ */
2808
+ fixed?: number;
2809
+ /**
2810
+ * Number of requirements that were reorganized without content change.
2811
+ */
2812
+ moved?: number;
2813
+ /**
2814
+ * Number of requirements present only in the new source.
2815
+ */
2816
+ new?: number;
2817
+ /**
2818
+ * Number of requirements that changed from passing to failing.
2819
+ */
2820
+ regressed?: number;
2821
+ /**
2822
+ * Number of requirements with the same effective status.
2823
+ */
2824
+ unchanged?: number;
2825
+ /**
2826
+ * Number of requirements with a generic status change.
2827
+ */
2828
+ updated?: number;
2829
+ [property: string]: any;
2830
+ }
2831
+ /**
2832
+ * Summary statistics for a single source in a multi-source comparison.
2833
+ */
2834
+ export interface PerSourceSummary {
2835
+ /**
2836
+ * Number of requirements present only in the old source.
2837
+ */
2838
+ absent?: number;
2839
+ /**
2840
+ * Number of requirements that changed from failing to passing.
2841
+ */
2842
+ fixed?: number;
2843
+ /**
2844
+ * Human-readable label for this source.
2845
+ */
2846
+ label: string;
2847
+ /**
2848
+ * Number of requirements that were reorganized without content change.
2849
+ */
2850
+ moved?: number;
2851
+ /**
2852
+ * Number of requirements present only in the new source.
2853
+ */
2854
+ new?: number;
2855
+ /**
2856
+ * Number of requirements that changed from passing to failing.
2857
+ */
2858
+ regressed?: number;
2859
+ /**
2860
+ * Zero-based index into the sources array identifying which source this summary is for.
2861
+ */
2862
+ sourceIndex: number;
2863
+ /**
2864
+ * Number of requirements with the same effective status.
2865
+ */
2866
+ unchanged?: number;
2867
+ /**
2868
+ * Number of requirements with a generic status change.
2869
+ */
2870
+ updated?: number;
2871
+ [property: string]: any;
2872
+ }
2873
+ /**
2874
+ * Describes a system's authorization boundary, components, and interconnections. Maps to
2875
+ * OSCAL SSP system-characteristics and FedRAMP system inventory.
2876
+ */
2877
+ export interface HDFSystem {
2878
+ /**
2879
+ * Date the current authorization status was granted. ISO 8601 format.
2880
+ */
2881
+ authorizationDate?: Date;
2882
+ /**
2883
+ * Current Authorization to Operate (ATO) status.
2884
+ */
2885
+ authorizationStatus?: AuthorizationStatus;
2886
+ /**
2887
+ * Description of the system's authorization boundary. Example: network CIDR blocks, cloud
2888
+ * VPC IDs, physical locations.
2889
+ */
2890
+ boundaryDescription?: string;
2891
+ /**
2892
+ * FIPS 199 security categorization (impact level).
2893
+ */
2894
+ categorizationLevel?: CategorizationLevel;
2895
+ /**
2896
+ * System components within the authorization boundary. Uses the full polymorphic Component
2897
+ * type with stable identity (componentId), external references, and SBOM support.
2898
+ */
2899
+ components: Component[];
2900
+ /**
2901
+ * Declares which controls are common, hybrid, or system-specific, and which component
2902
+ * provides them. Maps to NIST SP 800-53 control designations and OSCAL
2903
+ * leveraged-authorizations.
2904
+ */
2905
+ controlDesignations?: ControlDesignation[];
2906
+ /**
2907
+ * Inter-component data flows describing how components communicate. Supports local,
2908
+ * cross-system, and external flows. Replaces the interconnections[] field.
2909
+ */
2910
+ dataFlows?: DataFlow[];
2911
+ /**
2912
+ * Description of the system's purpose and mission.
2913
+ */
2914
+ description?: string;
2915
+ /**
2916
+ * Information about the tool that generated this system document.
2917
+ */
2918
+ generator?: Generator;
2919
+ /**
2920
+ * System identifier from an authoritative source. Example: eMASS system ID, FedRAMP package
2921
+ * ID.
2922
+ */
2923
+ identifier?: string;
2924
+ /**
2925
+ * URI identifying the scheme of the system identifier. Example: 'https://emass.mil',
2926
+ * 'https://fedramp.gov'.
2927
+ */
2928
+ identifierScheme?: string;
2929
+ /**
2930
+ * Cryptographic integrity information for verifying this system document has not been
2931
+ * tampered with.
2932
+ */
2933
+ integrity?: Integrity;
2934
+ /**
2935
+ * Optional key-value labels for grouping and querying systems.
2936
+ */
2937
+ labels?: {
2938
+ [key: string]: string;
2939
+ };
2940
+ /**
2941
+ * Human-readable system name. Example: 'Enterprise Portal Production'.
2942
+ */
2943
+ name: string;
2944
+ /**
2945
+ * Team or individual responsible for this system's authorization and compliance. Maps to
2946
+ * OSCAL responsible-party with role 'system-owner'.
2947
+ */
2948
+ owner?: Identity;
2949
+ /**
2950
+ * Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of
2951
+ * file location. Optional in casual use, expected in production documents.
2952
+ */
2953
+ systemId?: string;
2954
+ /**
2955
+ * Version of this system document.
2956
+ */
2957
+ version?: string;
2958
+ [property: string]: any;
2959
+ }
2960
+ /**
2961
+ * Current Authorization to Operate (ATO) status.
2962
+ *
2963
+ * Authorization to Operate (ATO) status for the system.
2964
+ */
2965
+ export declare enum AuthorizationStatus {
2966
+ Authorized = "authorized",
2967
+ ConditionallyAuthorized = "conditionallyAuthorized",
2968
+ Denied = "denied",
2969
+ NotYetRequested = "notYetRequested",
2970
+ PendingAuthorization = "pendingAuthorization",
2971
+ Revoked = "revoked"
2972
+ }
2973
+ /**
2974
+ * FIPS 199 security categorization (impact level).
2975
+ *
2976
+ * FIPS 199 security categorization level (impact level).
2977
+ */
2978
+ export declare enum CategorizationLevel {
2979
+ High = "high",
2980
+ Low = "low",
2981
+ Moderate = "moderate"
2982
+ }
2983
+ /**
2984
+ * Declares a control's designation within a system — whether it is common (provided by
2985
+ * another component or system), system-specific (implemented locally), or hybrid (shared
2986
+ * responsibility). Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP
2987
+ * by-component provided/inherited semantics.
2988
+ */
2989
+ export interface ControlDesignation {
2990
+ /**
2991
+ * The control identifier (e.g., 'SC-7', 'AC-2 (1)'). Must match a NIST tag in a baseline
2992
+ * requirement's tags.
2993
+ */
2994
+ controlId: string;
2995
+ /**
2996
+ * Justification for this designation — who provides the control, why it's inherited, and
2997
+ * any relevant authorization references.
2998
+ */
2999
+ description: string;
3000
+ /**
3001
+ * NIST SP 800-53 control designation. 'common': fully provided by another component or
3002
+ * system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
3003
+ * shared responsibility between provider and inheritor.
3004
+ */
3005
+ designation: Designation;
3006
+ /**
3007
+ * componentIds that inherit this control. If omitted, all components in the system inherit
3008
+ * it.
3009
+ */
3010
+ inheritedBy?: string[];
3011
+ /**
3012
+ * componentId of a local component that provides this control. Omit when the provider is an
3013
+ * external system.
3014
+ */
3015
+ providedBy?: string;
3016
+ /**
3017
+ * Reference to another hdf-system document whose component provides this control. Use when
3018
+ * the provider is in a different system. Omit when the provider is local.
3019
+ */
3020
+ systemRef?: string;
3021
+ [property: string]: any;
3022
+ }
3023
+ /**
3024
+ * NIST SP 800-53 control designation. 'common': fully provided by another component or
3025
+ * system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
3026
+ * shared responsibility between provider and inheritor.
3027
+ */
3028
+ export declare enum Designation {
3029
+ Common = "common",
3030
+ Hybrid = "hybrid",
3031
+ SystemSpecific = "system-specific"
3032
+ }
3033
+ /**
3034
+ * A data flow between two endpoints. The 'from' endpoint is always a local component; the
3035
+ * 'to' endpoint can be local, cross-system, or external. Use 'direction' to indicate
3036
+ * whether data flows one-way or both ways.
3037
+ */
3038
+ export interface DataFlow {
3039
+ /**
3040
+ * Authentication mechanism used for this connection. Examples: 'mTLS', 'OAuth2', 'API key',
3041
+ * 'SAML', 'Kerberos'.
3042
+ */
3043
+ authentication?: string;
3044
+ /**
3045
+ * Human-readable description of this data flow's purpose and the data exchanged.
3046
+ */
3047
+ description?: string;
3048
+ /**
3049
+ * Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
3050
+ * means data flows in both directions (e.g., request/response).
3051
+ */
3052
+ direction?: Direction;
3053
+ /**
3054
+ * UUID of the local component that is one end of this data flow. Always references a
3055
+ * component in the current system document.
3056
+ */
3057
+ from: string;
3058
+ /**
3059
+ * Network port number.
3060
+ */
3061
+ port?: number;
3062
+ /**
3063
+ * Communication protocol. Examples: 'http', 'https', 'grpc', 'ssh', 'jdbc', 'k8s-api',
3064
+ * 'socket', 'sftp'.
3065
+ */
3066
+ protocol?: string;
3067
+ /**
3068
+ * The other end of this data flow. Can be a local component (UUID), a cross-system
3069
+ * component reference, or an external endpoint.
3070
+ */
3071
+ to: any;
3072
+ [property: string]: any;
3073
+ }
3074
+ /**
3075
+ * Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
3076
+ * means data flows in both directions (e.g., request/response).
3077
+ */
3078
+ export declare enum Direction {
3079
+ Bidirectional = "bidirectional",
3080
+ Unidirectional = "unidirectional"
3081
+ }
3082
+ /**
3083
+ * Defines an assessment plan — what baselines to run against which targets, with resolved
3084
+ * inputs and scheduling. Maps to OSCAL Assessment Plan.
3085
+ */
3086
+ export interface HDFPlan {
3087
+ /**
3088
+ * The assessments to perform. Each assessment pairs a baseline with targets and resolved
3089
+ * inputs.
3090
+ */
3091
+ assessments: Assessment[];
3092
+ /**
3093
+ * Description of the plan's purpose and scope.
3094
+ */
3095
+ description?: string;
3096
+ /**
3097
+ * Information about the tool that generated this plan.
3098
+ */
3099
+ generator?: Generator;
3100
+ /**
3101
+ * Cryptographic integrity information for verifying this plan document has not been
3102
+ * tampered with.
3103
+ */
3104
+ integrity?: Integrity;
3105
+ /**
3106
+ * Optional key-value labels for grouping and querying plans.
3107
+ */
3108
+ labels?: {
3109
+ [key: string]: string;
3110
+ };
3111
+ /**
3112
+ * Human-readable plan name. Example: 'Portal Monthly Assessment'.
3113
+ */
3114
+ name: string;
3115
+ /**
3116
+ * Unique identifier for this plan. Optional in casual use, expected in production
3117
+ * documents. Auto-generated if omitted during creation.
3118
+ */
3119
+ planId?: string;
3120
+ /**
3121
+ * Optional scheduling configuration for recurring assessments.
3122
+ */
3123
+ schedule?: Schedule;
3124
+ /**
3125
+ * URI to the hdf-system document this plan targets. Example: 'portal-prod.hdf-system.json'.
3126
+ */
3127
+ systemRef?: string;
3128
+ /**
3129
+ * The type of assessment plan.
3130
+ */
3131
+ type?: PlanType;
3132
+ /**
3133
+ * Version of this plan document.
3134
+ */
3135
+ version?: string;
3136
+ [property: string]: any;
3137
+ }
3138
+ /**
3139
+ * A single assessment within a plan — defines which baseline to run against which targets
3140
+ * with what configuration.
3141
+ */
3142
+ export interface Assessment {
3143
+ /**
3144
+ * Reference to the baseline to evaluate. May be a baseline name (e.g. 'RHEL9-STIG'), a
3145
+ * relative path to an HDF Baseline document (e.g. 'rhel9-stig.hdf-baseline.json'), or an
3146
+ * absolute URI.
3147
+ */
3148
+ baselineRef: string;
3149
+ /**
3150
+ * componentId of the system component this assessment targets. Use for direct component
3151
+ * binding. Alternative to targetSelector.
3152
+ */
3153
+ componentRef?: string;
3154
+ /**
3155
+ * Description of this assessment's purpose.
3156
+ */
3157
+ description?: string;
3158
+ /**
3159
+ * Resolved input values for this assessment. Keys are input names, values are the final
3160
+ * resolved values (after baseline defaults + system overrides).
3161
+ */
3162
+ inputs?: {
3163
+ [key: string]: any;
3164
+ };
3165
+ /**
3166
+ * Runner/scanner configuration for this assessment.
3167
+ */
3168
+ runner?: RunnerConfig;
3169
+ /**
3170
+ * Label selector to match targets for this assessment. Overrides the system component's
3171
+ * targetSelector if provided.
3172
+ */
3173
+ targetSelector?: {
3174
+ [key: string]: string;
3175
+ };
3176
+ [property: string]: any;
3177
+ }
3178
+ /**
3179
+ * Runner/scanner configuration for this assessment.
3180
+ *
3181
+ * Configuration for the assessment runner/scanner.
3182
+ */
3183
+ export interface RunnerConfig {
3184
+ /**
3185
+ * Name of the assessment runner. Example: 'cinc-auditor', 'inspec', 'openscap'.
3186
+ */
3187
+ name?: string;
3188
+ /**
3189
+ * Version of the runner.
3190
+ */
3191
+ version?: string;
3192
+ [property: string]: any;
3193
+ }
3194
+ /**
3195
+ * Optional scheduling configuration for recurring assessments.
3196
+ *
3197
+ * Scheduling configuration for recurring assessments.
3198
+ */
3199
+ export interface Schedule {
3200
+ /**
3201
+ * Cron expression for recurring assessments. Example: '0 2 1 * *' (2 AM on the 1st of each
3202
+ * month).
3203
+ */
3204
+ cron?: string;
3205
+ /**
3206
+ * Date after which assessments should no longer run. ISO 8601 format.
3207
+ */
3208
+ endDate?: Date;
3209
+ /**
3210
+ * Email addresses or notification endpoints to alert when assessments complete.
3211
+ */
3212
+ notifyOnCompletion?: string[];
3213
+ /**
3214
+ * Email addresses or notification endpoints to alert when regressions are detected.
3215
+ */
3216
+ notifyOnRegression?: string[];
3217
+ /**
3218
+ * Earliest date to begin assessments. ISO 8601 format.
3219
+ */
3220
+ startDate?: Date;
3221
+ [property: string]: any;
3222
+ }
3223
+ /**
3224
+ * The type of assessment plan.
3225
+ *
3226
+ * The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed,
3227
+ * 'hybrid' for both.
3228
+ */
3229
+ export declare enum PlanType {
3230
+ Automated = "automated",
3231
+ Hybrid = "hybrid",
3232
+ Manual = "manual"
3233
+ }
3234
+ /**
3235
+ * Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
3236
+ * Amendments are standalone documents that can be applied to results via merge operations.
3237
+ */
3238
+ export interface HDFAmendments {
3239
+ /**
3240
+ * Unique identifier for this amendments document. Useful for cross-referencing when
3241
+ * multiple amendment documents target the same results.
3242
+ */
3243
+ amendmentId?: string;
3244
+ /**
3245
+ * Default identity of who created this amendments document. Individual overrides may
3246
+ * specify their own appliedBy.
3247
+ */
3248
+ appliedBy?: Identity;
3249
+ /**
3250
+ * Identity of the authorizing official who approved these amendments.
3251
+ */
3252
+ approvedBy?: Identity;
3253
+ /**
3254
+ * Description of the amendments' purpose and scope.
3255
+ */
3256
+ description?: string;
3257
+ /**
3258
+ * Information about the tool that generated this document.
3259
+ */
3260
+ generator?: Generator;
3261
+ /**
3262
+ * Cryptographic integrity information for verifying this amendments document has not been
3263
+ * tampered with.
3264
+ */
3265
+ integrity?: Integrity;
3266
+ /**
3267
+ * Optional key-value labels for grouping and querying amendments.
3268
+ */
3269
+ labels?: {
3270
+ [key: string]: string;
3271
+ };
3272
+ /**
3273
+ * Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
3274
+ */
3275
+ name: string;
3276
+ /**
3277
+ * The set of amendments (waivers, attestations, POA&Ms, and other overrides).
3278
+ */
3279
+ overrides: StandaloneOverride[];
3280
+ /**
3281
+ * Document-level digital signature covering all amendments.
3282
+ */
3283
+ signature?: Signature;
3284
+ /**
3285
+ * URI to the hdf-system document these amendments apply to.
3286
+ */
3287
+ systemRef?: string;
3288
+ /**
3289
+ * Version of this amendments document.
3290
+ */
3291
+ version?: string;
3292
+ [property: string]: any;
3293
+ }
3294
+ /**
3295
+ * A standalone override to a requirement's compliance status or risk impact. Validation has
3296
+ * two branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor
3297
+ * 'impact' may be set — the override records accepted risk without changing the finding
3298
+ * (documentation-only). For all other types, at least one of 'status' or 'impact' must be
3299
+ * set. This rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
3300
+ * finding.associated-risk[].facet[] are separate axes
3301
+ * (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
3302
+ * FedRAMP deviation request types — Risk Adjustment changes impact only, Operational
3303
+ * Requirement documents acceptance only, False Positive changes status
3304
+ * (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
3305
+ * NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from
3306
+ * control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
3307
+ */
3308
+ export interface StandaloneOverride {
3309
+ /**
3310
+ * Software packages this amendment is scoped to, distinct from componentRef (which scopes
3311
+ * to an HDF-internal Component by UUID). Use when the source amendment format references
3312
+ * packages by purl/cpe/name+version — e.g., VEX `affects[]` / `products[]`, OSCAL POA&M
3313
+ * `subjects[]`, FedRAMP component-aware amendments. Symmetric with
3314
+ * Evaluated_Requirement.affectedPackages, which scopes findings to the same package
3315
+ * vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when
3316
+ * that is set).
3317
+ */
3318
+ affectedPackages?: AffectedPackage[];
3319
+ /**
3320
+ * When this amendment was applied. ISO 8601 format.
3321
+ */
3322
+ appliedAt: Date;
3323
+ /**
3324
+ * Identity of who applied this amendment.
3325
+ */
3326
+ appliedBy: Identity;
3327
+ /**
3328
+ * Name of the baseline containing the requirement. Required when the system has multiple
3329
+ * baselines with potentially overlapping requirement IDs.
3330
+ */
3331
+ baselineRef?: string;
3332
+ /**
3333
+ * componentId of the component this amendment is scoped to. When set, the amendment only
3334
+ * applies to the specified component. When omitted, the amendment applies system-wide.
3335
+ */
3336
+ componentRef?: string;
3337
+ /**
3338
+ * Structured CVSS scoring data backing this override. Captures the rubric (which
3339
+ * Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
3340
+ * a riskAdjustment. For other override types this is optional context.
3341
+ */
3342
+ cvss?: Cvss;
3343
+ /**
3344
+ * Supporting evidence (screenshots, logs, URLs, documents).
3345
+ */
3346
+ evidence?: Evidence[];
3347
+ /**
3348
+ * When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
3349
+ * format.
3350
+ */
3351
+ expiresAt: Date;
3352
+ /**
3353
+ * Override to the requirement's impact score. At least one of status or impact must be set.
3354
+ */
3355
+ impact?: ImpactOverride;
3356
+ /**
3357
+ * componentId of the local component that provides this control. Set when the provider is
3358
+ * in the same system. Omit for external or cross-system providers; the reason field
3359
+ * explains the source. Primarily used with type 'inherited'.
3360
+ */
3361
+ inheritedFrom?: string;
3362
+ /**
3363
+ * Structured controlled-vocabulary classification for why this override applies.
3364
+ * Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
3365
+ * and attestation overrides where the structured category enables filtering and lossless
3366
+ * round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
3367
+ * precedent vocabulary and rationale.
3368
+ */
3369
+ justification?: Justification;
3370
+ /**
3371
+ * Remediation milestones (primarily for POA&M type amendments).
3372
+ */
3373
+ milestones?: Milestone[];
3374
+ /**
3375
+ * Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
3376
+ * for the first amendment.
3377
+ */
3378
+ previousChecksum?: Checksum;
3379
+ /**
3380
+ * Justification for this amendment.
3381
+ */
3382
+ reason: string;
3383
+ /**
3384
+ * The ID of the requirement being amended. Must match a requirement ID in the referenced
3385
+ * baseline.
3386
+ */
3387
+ requirementId: string;
3388
+ /**
3389
+ * Digital signature for non-repudiation.
3390
+ */
3391
+ signature?: Signature;
3392
+ /**
3393
+ * The new status this amendment sets. Optional when only impact is being overridden.
3394
+ */
3395
+ status?: ResultStatus;
3396
+ /**
3397
+ * The type of amendment.
3398
+ */
3399
+ type: OverrideType;
3400
+ [property: string]: any;
3401
+ }
3402
+ /**
3403
+ * Bundles references to all HDF documents for audit, authorization, and compliance review.
3404
+ * Each content entry references a document by type, URI, and checksum for integrity
3405
+ * verification.
3406
+ */
3407
+ export interface HDFEvidencePackage {
3408
+ /**
3409
+ * Summary of assessment completeness and compliance status.
3410
+ */
3411
+ completenessCheck?: CompletenessCheck;
3412
+ /**
3413
+ * References to HDF documents included in this evidence package.
3414
+ */
3415
+ contents: ContentReference[];
3416
+ /**
3417
+ * Description of the evidence package's purpose and scope.
3418
+ */
3419
+ description?: string;
3420
+ /**
3421
+ * Information about the tool that generated this document.
3422
+ */
3423
+ generator?: Generator;
3424
+ /**
3425
+ * Cryptographic integrity information for verifying this evidence package has not been
3426
+ * tampered with.
3427
+ */
3428
+ integrity?: Integrity;
3429
+ /**
3430
+ * Optional key-value labels for grouping and querying evidence packages.
3431
+ */
3432
+ labels?: {
3433
+ [key: string]: string;
3434
+ };
3435
+ /**
3436
+ * Human-readable name for this evidence package. Example: 'Enterprise Portal ATO Evidence -
3437
+ * Q1 2026'.
3438
+ */
3439
+ name: string;
3440
+ /**
3441
+ * Unique identifier for this evidence package. Optional in casual use, expected in
3442
+ * production ATO submissions. Auto-generated if omitted during creation.
3443
+ */
3444
+ packageId?: string;
3445
+ /**
3446
+ * URI to the hdf-plan document that drove this assessment. Used for completeness
3447
+ * verification — every baseline in the plan should have a corresponding results document in
3448
+ * this package.
3449
+ */
3450
+ planRef?: string;
3451
+ /**
3452
+ * When this evidence package was prepared. ISO 8601 format.
3453
+ */
3454
+ preparedAt?: Date;
3455
+ /**
3456
+ * Identity of who prepared this evidence package.
3457
+ */
3458
+ preparedBy?: Identity;
3459
+ /**
3460
+ * Digital signature covering the entire evidence package.
3461
+ */
3462
+ signature?: Signature;
3463
+ /**
3464
+ * URI to the hdf-system document this evidence package covers.
3465
+ */
3466
+ systemRef?: string;
3467
+ /**
3468
+ * Version of this evidence package.
3469
+ */
3470
+ version?: string;
3471
+ [property: string]: any;
3472
+ }
3473
+ /**
3474
+ * Summary of assessment completeness and compliance status.
3475
+ *
3476
+ * Informational summary of assessment completeness. Not authoritative — tools should
3477
+ * compute these from the referenced documents.
3478
+ */
3479
+ export interface CompletenessCheck {
3480
+ /**
3481
+ * Whether all baselines referenced by system components have assessment results.
3482
+ */
3483
+ allBaselinesAssessed?: boolean;
3484
+ /**
3485
+ * Whether all system components have at least one matching target in the results.
3486
+ */
3487
+ allComponentsCovered?: boolean;
3488
+ /**
3489
+ * Overall compliance percentage across all assessments.
3490
+ */
3491
+ compliancePercent?: number;
3492
+ /**
3493
+ * Number of waivers/amendments that have expired.
3494
+ */
3495
+ expiredWaivers?: number;
3496
+ /**
3497
+ * SBOM coverage across system components.
3498
+ */
3499
+ sbomCoverage?: SBOMCoverage;
3500
+ /**
3501
+ * Number of POA&M items that are still open (not completed).
3502
+ */
3503
+ unresolvedPoams?: number;
3504
+ [property: string]: any;
3505
+ }
3506
+ /**
3507
+ * SBOM coverage across system components.
3508
+ *
3509
+ * SBOM coverage statistics for the system.
3510
+ */
3511
+ export interface SBOMCoverage {
3512
+ /**
3513
+ * Number of system components that have an associated SBOM.
3514
+ */
3515
+ componentsWithSbom?: number;
3516
+ /**
3517
+ * Total number of components in the system.
3518
+ */
3519
+ totalComponents?: number;
3520
+ [property: string]: any;
3521
+ }
3522
+ /**
3523
+ * A reference to an HDF document or SBOM included in the evidence package.
3524
+ */
3525
+ export interface ContentReference {
3526
+ /**
3527
+ * Cryptographic checksum for verifying the referenced document's integrity.
3528
+ */
3529
+ checksum?: Checksum;
3530
+ /**
3531
+ * componentId of the component this content entry relates to. Use to link SBOMs, results,
3532
+ * or other documents to a specific system component.
3533
+ */
3534
+ componentRef?: string;
3535
+ /**
3536
+ * Optional description of this content entry.
3537
+ */
3538
+ description?: string;
3539
+ /**
3540
+ * The type of HDF document being referenced.
3541
+ */
3542
+ type: ContentType;
3543
+ /**
3544
+ * URI to the document. Can be a relative path or absolute URL.
3545
+ */
3546
+ uri: string;
3547
+ [property: string]: any;
3548
+ }
3549
+ /**
3550
+ * The type of HDF document being referenced.
3551
+ *
3552
+ * The type of document referenced in the evidence package.
3553
+ */
3554
+ export declare enum ContentType {
3555
+ HdfAmendments = "hdf-amendments",
3556
+ HdfBaseline = "hdf-baseline",
3557
+ HdfComparison = "hdf-comparison",
3558
+ HdfPlan = "hdf-plan",
3559
+ HdfResults = "hdf-results",
3560
+ HdfSystem = "hdf-system",
3561
+ Sbom = "sbom"
3562
+ }