@mitre/hdf-schema 3.3.2 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/go/hdf.go +585 -534
- package/dist/helpers.js +5 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +26 -25
- package/dist/schemas/hdf-amendments.schema.json +53 -46
- package/dist/schemas/hdf-baseline.schema.json +58 -51
- package/dist/schemas/hdf-comparison.schema.json +846 -243
- package/dist/schemas/hdf-evidence-package.schema.json +204 -51
- package/dist/schemas/hdf-plan.schema.json +58 -51
- package/dist/schemas/hdf-results.schema.json +785 -214
- package/dist/schemas/hdf-system.schema.json +760 -187
- package/dist/ts/hdf.d.ts +628 -468
- package/dist/ts/hdf.js +95 -139
- package/dist/ts/hdf.ts +637 -468
- package/package.json +2 -2
package/dist/go/hdf.go
CHANGED
|
@@ -138,9 +138,6 @@ type HDFResults struct {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
// Information on a baseline that was evaluated, including any findings.
|
|
141
|
-
//
|
|
142
|
-
// Shared metadata fields for baselines. Used in both standalone baseline documents and
|
|
143
|
-
// evaluated baseline results.
|
|
144
141
|
type EvaluatedBaseline struct {
|
|
145
142
|
// The set of dependencies this baseline depends on.
|
|
146
143
|
Depends []Dependency `json:"depends,omitempty"`
|
|
@@ -197,8 +194,7 @@ type EvaluatedBaseline struct {
|
|
|
197
194
|
Version *string `json:"version,omitempty"`
|
|
198
195
|
}
|
|
199
196
|
|
|
200
|
-
// A dependency for a baseline. Can include relative paths or URLs for where to find the
|
|
201
|
-
// dependency.
|
|
197
|
+
// A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.
|
|
202
198
|
type Dependency struct {
|
|
203
199
|
// The branch name for a git repo.
|
|
204
200
|
Branch *string `json:"branch,omitempty"`
|
|
@@ -232,9 +228,9 @@ type RequirementGroup struct {
|
|
|
232
228
|
Title *string `json:"title,omitempty"`
|
|
233
229
|
}
|
|
234
230
|
|
|
235
|
-
// A typed input parameter that bridges governance requirements and scanner automation.
|
|
236
|
-
//
|
|
237
|
-
//
|
|
231
|
+
// A typed input parameter that bridges governance requirements and scanner automation. Inputs carry
|
|
232
|
+
// expected configuration values with type information, comparison operators, and validation
|
|
233
|
+
// constraints, enabling traceability from policy through to scan results.
|
|
238
234
|
type Input struct {
|
|
239
235
|
// Validation constraints for the input value.
|
|
240
236
|
Constraints *InputConstraints `json:"constraints,omitempty"`
|
|
@@ -256,8 +252,6 @@ type Input struct {
|
|
|
256
252
|
Value interface{} `json:"value,omitempty"`
|
|
257
253
|
}
|
|
258
254
|
|
|
259
|
-
// Validation constraints for the input value.
|
|
260
|
-
//
|
|
261
255
|
// Validation constraints for an input value.
|
|
262
256
|
type InputConstraints struct {
|
|
263
257
|
// Enumeration of permitted values.
|
|
@@ -270,27 +264,8 @@ type InputConstraints struct {
|
|
|
270
264
|
Pattern *string `json:"pattern,omitempty"`
|
|
271
265
|
}
|
|
272
266
|
|
|
273
|
-
// Cryptographic integrity information for verifying
|
|
274
|
-
//
|
|
275
|
-
//
|
|
276
|
-
// Cryptographic integrity information for verifying the HDF file has not been tampered
|
|
277
|
-
// with. If algorithm is provided, checksum must also be provided, and vice versa.
|
|
278
|
-
//
|
|
279
|
-
// Cryptographic integrity information for verifying this file.
|
|
280
|
-
//
|
|
281
|
-
// Cryptographic integrity information for verifying this comparison document.
|
|
282
|
-
//
|
|
283
|
-
// Cryptographic integrity information for verifying this system document has not been
|
|
284
|
-
// tampered with.
|
|
285
|
-
//
|
|
286
|
-
// Cryptographic integrity information for verifying this plan document has not been
|
|
287
|
-
// tampered with.
|
|
288
|
-
//
|
|
289
|
-
// Cryptographic integrity information for verifying this amendments document has not been
|
|
290
|
-
// tampered with.
|
|
291
|
-
//
|
|
292
|
-
// Cryptographic integrity information for verifying this evidence package has not been
|
|
293
|
-
// tampered with.
|
|
267
|
+
// Cryptographic integrity information for verifying the HDF file has not been tampered with. If
|
|
268
|
+
// algorithm is provided, checksum must also be provided, and vice versa.
|
|
294
269
|
type Integrity struct {
|
|
295
270
|
// The hash algorithm used for the checksum.
|
|
296
271
|
Algorithm *HashAlgorithm `json:"algorithm,omitempty"`
|
|
@@ -302,30 +277,7 @@ type Integrity struct {
|
|
|
302
277
|
SignedBy *string `json:"signedBy,omitempty"`
|
|
303
278
|
}
|
|
304
279
|
|
|
305
|
-
// SHA-256 checksum of the original baseline definition file (before execution). This is an
|
|
306
|
-
// immutable reference to the baseline as defined, used to detect tampering with baseline
|
|
307
|
-
// requirements or metadata.
|
|
308
|
-
//
|
|
309
280
|
// Cryptographic checksum for baseline integrity verification.
|
|
310
|
-
//
|
|
311
|
-
// SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
312
|
-
// tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
313
|
-
// on a requirement.
|
|
314
|
-
//
|
|
315
|
-
// SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
|
|
316
|
-
// Used to detect tampering with test results. Compare with currentChecksum to verify
|
|
317
|
-
// amendment integrity.
|
|
318
|
-
//
|
|
319
|
-
// Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
320
|
-
// fetched from the URI. Recommended for security when referencing external automation
|
|
321
|
-
// scripts.
|
|
322
|
-
//
|
|
323
|
-
// Cryptographic checksum of the source document for integrity verification.
|
|
324
|
-
//
|
|
325
|
-
// Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
|
|
326
|
-
// for the first amendment.
|
|
327
|
-
//
|
|
328
|
-
// Cryptographic checksum for verifying the referenced document's integrity.
|
|
329
281
|
type Checksum struct {
|
|
330
282
|
// The hash algorithm used for the checksum.
|
|
331
283
|
Algorithm HashAlgorithm `json:"algorithm"`
|
|
@@ -334,9 +286,6 @@ type Checksum struct {
|
|
|
334
286
|
}
|
|
335
287
|
|
|
336
288
|
// A requirement that has been evaluated, including any findings.
|
|
337
|
-
//
|
|
338
|
-
// Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
339
|
-
// Contains the fundamental requirement definition without assessment results.
|
|
340
289
|
type EvaluatedRequirement struct {
|
|
341
290
|
// Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
|
|
342
291
|
// components[] on hdf-system for component-level package inventories. One entry per matched
|
|
@@ -433,14 +382,13 @@ type EvaluatedRequirement struct {
|
|
|
433
382
|
}
|
|
434
383
|
|
|
435
384
|
// Represents a package referenced by a vulnerability finding or by an amendment's scope. On
|
|
436
|
-
// Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
|
|
437
|
-
//
|
|
438
|
-
//
|
|
439
|
-
//
|
|
440
|
-
//
|
|
441
|
-
//
|
|
442
|
-
//
|
|
443
|
-
// sources without formal identifiers.
|
|
385
|
+
// Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'. On
|
|
386
|
+
// Standalone_Override.affectedPackages it says 'this amendment is scoped to these packages' (used
|
|
387
|
+
// by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a system-level component identifier
|
|
388
|
+
// — see `components[]` on hdf-system for those. Validity requires at least one of: (name + version
|
|
389
|
+
// + ecosystem), purl alone, or cpe alone. purl and cpe are self-describing identifiers that encode
|
|
390
|
+
// name/version implicitly, so either may stand on its own; the name+version+ecosystem combination
|
|
391
|
+
// is the explicit form for sources without formal identifiers.
|
|
444
392
|
type AffectedPackage struct {
|
|
445
393
|
// Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
|
|
446
394
|
// 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
|
|
@@ -469,16 +417,12 @@ type AffectedPackage struct {
|
|
|
469
417
|
Version *string `json:"version,omitempty"`
|
|
470
418
|
}
|
|
471
419
|
|
|
472
|
-
//
|
|
473
|
-
//
|
|
474
|
-
//
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
// Environmental, and Supplemental metric groups. Supports all four CVSS major versions
|
|
479
|
-
// (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
|
|
480
|
-
// semantic validation (correct metrics per version, correct values per metric) is performed
|
|
481
|
-
// by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
|
|
420
|
+
// A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding. Captures
|
|
421
|
+
// the vendor-supplied Base metric group and optional consumer-supplied Threat, Environmental, and
|
|
422
|
+
// Supplemental metric groups. Supports all four CVSS major versions (2.0, 3.0, 3.1, 4.0). Vector
|
|
423
|
+
// strings are validated against a permissive umbrella grammar; semantic validation (correct metrics
|
|
424
|
+
// per version, correct values per metric) is performed by the hdf-utilities `validateCvssVector`
|
|
425
|
+
// helper rather than at the schema layer.
|
|
482
426
|
type Cvss struct {
|
|
483
427
|
// The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
|
|
484
428
|
// vendor-published severity before consumer enrichment.
|
|
@@ -532,13 +476,9 @@ type Description struct {
|
|
|
532
476
|
Label string `json:"label"`
|
|
533
477
|
}
|
|
534
478
|
|
|
535
|
-
// FIRST.org
|
|
536
|
-
//
|
|
537
|
-
//
|
|
538
|
-
//
|
|
539
|
-
// FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
|
|
540
|
-
// three fields are required when an Epss object is present; the date disambiguates which
|
|
541
|
-
// day's score this is, since EPSS recomputes daily.
|
|
479
|
+
// FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All three
|
|
480
|
+
// fields are required when an Epss object is present; the date disambiguates which day's score this
|
|
481
|
+
// is, since EPSS recomputes daily.
|
|
542
482
|
type Epss struct {
|
|
543
483
|
// ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
|
|
544
484
|
Date string `json:"date"`
|
|
@@ -552,8 +492,8 @@ type Epss struct {
|
|
|
552
492
|
Score float64 `json:"score"`
|
|
553
493
|
}
|
|
554
494
|
|
|
555
|
-
// Supporting evidence for a finding or override, such as screenshots, code samples, log
|
|
556
|
-
//
|
|
495
|
+
// Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts,
|
|
496
|
+
// or URLs.
|
|
557
497
|
type Evidence struct {
|
|
558
498
|
// Timestamp when this evidence was captured. ISO 8601 format.
|
|
559
499
|
CapturedAt *time.Time `json:"capturedAt,omitempty"`
|
|
@@ -574,41 +514,8 @@ type Evidence struct {
|
|
|
574
514
|
Type EvidenceType `json:"type"`
|
|
575
515
|
}
|
|
576
516
|
|
|
577
|
-
//
|
|
578
|
-
//
|
|
579
|
-
// Represents an identity that performed an action, such as capturing evidence or applying
|
|
580
|
-
// an override.
|
|
581
|
-
//
|
|
582
|
-
// Identity of who created this POA&M. For simple cases, use type 'simple' with just an
|
|
583
|
-
// identifier.
|
|
584
|
-
//
|
|
585
|
-
// Identity of who completed this milestone.
|
|
586
|
-
//
|
|
587
|
-
// The identity that created this signature.
|
|
588
|
-
//
|
|
589
|
-
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
590
|
-
// identifier.
|
|
591
|
-
//
|
|
592
|
-
// Identity of the person or system that approved this override.
|
|
593
|
-
//
|
|
594
|
-
// Team or individual responsible for this component. Enables per-component ownership when
|
|
595
|
-
// different teams manage different parts of a system.
|
|
596
|
-
//
|
|
597
|
-
// The identity of the person or system responsible for executing the test. This could be a
|
|
598
|
-
// human auditor manually completing a checklist, an automated CI/CD system, or a security
|
|
599
|
-
// tool. Optional field to support both automated and manual HDF generation.
|
|
600
|
-
//
|
|
601
|
-
// Team or individual responsible for this system's authorization and compliance. Maps to
|
|
602
|
-
// OSCAL responsible-party with role 'system-owner'.
|
|
603
|
-
//
|
|
604
|
-
// Default identity of who created this amendments document. Individual overrides may
|
|
605
|
-
// specify their own appliedBy.
|
|
606
|
-
//
|
|
607
|
-
// Identity of the authorizing official who approved these amendments.
|
|
608
|
-
//
|
|
609
|
-
// Identity of who applied this amendment.
|
|
610
|
-
//
|
|
611
|
-
// Identity of who prepared this evidence package.
|
|
517
|
+
// Represents an identity that performed an action, such as capturing evidence or applying an
|
|
518
|
+
// override.
|
|
612
519
|
type Identity struct {
|
|
613
520
|
// Optional description of the identity or identity system, particularly useful when type is
|
|
614
521
|
// 'other'.
|
|
@@ -616,8 +523,12 @@ type Identity struct {
|
|
|
616
523
|
// The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
617
524
|
Identifier string `json:"identifier"`
|
|
618
525
|
// The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
619
|
-
// 'system' for
|
|
620
|
-
//
|
|
526
|
+
// 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
527
|
+
// for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
528
|
+
// apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
529
|
+
// satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
530
|
+
// 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
531
|
+
// custom identity systems.
|
|
621
532
|
Type IdentityType `json:"type"`
|
|
622
533
|
}
|
|
623
534
|
|
|
@@ -682,21 +593,9 @@ type Milestone struct {
|
|
|
682
593
|
Status MilestoneStatus `json:"status"`
|
|
683
594
|
}
|
|
684
595
|
|
|
685
|
-
//
|
|
686
|
-
//
|
|
687
|
-
//
|
|
688
|
-
// security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic
|
|
689
|
-
// signing methods via JWK, PEM, or Base58 key formats.
|
|
690
|
-
//
|
|
691
|
-
// Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
692
|
-
// security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
693
|
-
// methods.
|
|
694
|
-
//
|
|
695
|
-
// Digital signature for non-repudiation.
|
|
696
|
-
//
|
|
697
|
-
// Document-level digital signature covering all amendments.
|
|
698
|
-
//
|
|
699
|
-
// Digital signature covering the entire evidence package.
|
|
596
|
+
// A digital signature following W3C Data Integrity Proofs pattern. Supports hardware security
|
|
597
|
+
// tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic signing methods
|
|
598
|
+
// via JWK, PEM, or Base58 key formats.
|
|
700
599
|
type Signature struct {
|
|
701
600
|
// Challenge value from the verifier, used in challenge-response authentication.
|
|
702
601
|
Challenge *string `json:"challenge,omitempty"`
|
|
@@ -720,10 +619,8 @@ type Signature struct {
|
|
|
720
619
|
VerificationMethod VerificationMethod `json:"verificationMethod"`
|
|
721
620
|
}
|
|
722
621
|
|
|
723
|
-
//
|
|
724
|
-
//
|
|
725
|
-
// Verification method containing the public key needed to verify a digital signature.
|
|
726
|
-
// Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.
|
|
622
|
+
// Verification method containing the public key needed to verify a digital signature. Supports
|
|
623
|
+
// multiple key formats including JWK (for RSA, EC), PEM, and Base58.
|
|
727
624
|
type VerificationMethod struct {
|
|
728
625
|
// The entity that controls this verification method. Can be a DID, URI, or other identifier.
|
|
729
626
|
Controller string `json:"controller"`
|
|
@@ -740,12 +637,6 @@ type VerificationMethod struct {
|
|
|
740
637
|
}
|
|
741
638
|
|
|
742
639
|
// A reference to an external document.
|
|
743
|
-
//
|
|
744
|
-
// A reference using the 'ref' field.
|
|
745
|
-
//
|
|
746
|
-
// A URL pointing at the reference.
|
|
747
|
-
//
|
|
748
|
-
// A URI pointing at the reference.
|
|
749
640
|
type Reference struct {
|
|
750
641
|
Ref *Ref `json:"ref,omitempty"`
|
|
751
642
|
URL *string `json:"url,omitempty"`
|
|
@@ -776,8 +667,6 @@ type RequirementResult struct {
|
|
|
776
667
|
Status ResultStatus `json:"status"`
|
|
777
668
|
}
|
|
778
669
|
|
|
779
|
-
// The explicit location of the requirement within the source code.
|
|
780
|
-
//
|
|
781
670
|
// The explicit location of a requirement within source code.
|
|
782
671
|
type SourceLocation struct {
|
|
783
672
|
// The line on which this requirement is located.
|
|
@@ -786,9 +675,9 @@ type SourceLocation struct {
|
|
|
786
675
|
Ref *string `json:"ref,omitempty"`
|
|
787
676
|
}
|
|
788
677
|
|
|
789
|
-
// An intentional change to a requirement's compliance status and/or impact score. At least
|
|
790
|
-
//
|
|
791
|
-
//
|
|
678
|
+
// An intentional change to a requirement's compliance status and/or impact score. At least one of
|
|
679
|
+
// status or impact must be set. Overrides change the effectiveStatus or impact of the requirement.
|
|
680
|
+
// All overrides must have an expiration date to enforce periodic review.
|
|
792
681
|
type StatusOverride struct {
|
|
793
682
|
// Timestamp when this override was applied. ISO 8601 format.
|
|
794
683
|
AppliedAt time.Time `json:"appliedAt"`
|
|
@@ -830,11 +719,8 @@ type StatusOverride struct {
|
|
|
830
719
|
Type OverrideType `json:"type"`
|
|
831
720
|
}
|
|
832
721
|
|
|
833
|
-
//
|
|
834
|
-
//
|
|
835
|
-
//
|
|
836
|
-
// An override to the requirement's impact score. The prior impact is the original result
|
|
837
|
-
// value or the preceding override in the chain.
|
|
722
|
+
// An override to the requirement's impact score. The prior impact is the original result value or
|
|
723
|
+
// the preceding override in the chain.
|
|
838
724
|
type ImpactOverride struct {
|
|
839
725
|
// The overridden impact score (0.0–1.0).
|
|
840
726
|
Value float64 `json:"value"`
|
|
@@ -852,36 +738,16 @@ type SupportedPlatform struct {
|
|
|
852
738
|
Release *string `json:"release,omitempty"`
|
|
853
739
|
}
|
|
854
740
|
|
|
855
|
-
// A system component. Uses discriminated union pattern with 'type' field as discriminator.
|
|
856
|
-
//
|
|
857
|
-
//
|
|
858
|
-
// A physical or virtual server, workstation, or network device.
|
|
859
|
-
//
|
|
860
|
-
// Base properties shared by all component types. Extends the Target concept with stable
|
|
861
|
-
// identity, external references, and SBOM embedding.
|
|
862
|
-
//
|
|
863
|
-
// A static container image (not running).
|
|
864
|
-
//
|
|
865
|
-
// A running container instance.
|
|
866
|
-
//
|
|
867
|
-
// A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).
|
|
868
|
-
//
|
|
869
|
-
// A cloud provider account (AWS account, Azure subscription, GCP project).
|
|
870
|
-
//
|
|
871
|
-
// A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).
|
|
872
|
-
//
|
|
873
|
-
// A code repository (for SAST tools).
|
|
874
|
-
//
|
|
875
|
-
// A running application or API (for DAST tools).
|
|
876
|
-
//
|
|
877
|
-
// A software artifact or dependency (for SCA tools).
|
|
878
|
-
//
|
|
879
|
-
// A network segment or network device.
|
|
880
|
-
//
|
|
881
|
-
// A database instance.
|
|
741
|
+
// A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset
|
|
742
|
+
// of Target with identity, external IDs, and SBOM support.
|
|
882
743
|
type Component struct {
|
|
883
744
|
// Names of baselines that apply to this component.
|
|
884
745
|
BaselineRefs []string `json:"baselineRefs,omitempty"`
|
|
746
|
+
// Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
|
|
747
|
+
// each carried by passthrough (ref/document) or normalized. Replaces the former
|
|
748
|
+
// sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
|
|
749
|
+
// ai-model BOM). See primitives/bom.schema.json.
|
|
750
|
+
Boms []BillOfMaterials `json:"boms,omitempty"`
|
|
885
751
|
// Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
886
752
|
// hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
887
753
|
ComponentID *string `json:"componentId,omitempty"`
|
|
@@ -893,6 +759,13 @@ type Component struct {
|
|
|
893
759
|
ExternalIDS map[string]string `json:"externalIds,omitempty"`
|
|
894
760
|
// System-specific overrides for baseline input values.
|
|
895
761
|
InputOverrides []InputOverride `json:"inputOverrides,omitempty"`
|
|
762
|
+
// Cryptographic integrity of this component's underlying artifact — model weights or
|
|
763
|
+
// shards, dataset archive, container image, or package bytes. An array supports
|
|
764
|
+
// multi-file/sharded artifacts. This is the single, generic home for artifact/subject
|
|
765
|
+
// integrity across all component types (it replaced the former per-type Container_Image
|
|
766
|
+
// digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
|
|
767
|
+
// and from the document tamper-evidence Integrity type.
|
|
768
|
+
Integrity []Checksum `json:"integrity,omitempty"`
|
|
896
769
|
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
897
770
|
// environment, region, team. Values must be strings.
|
|
898
771
|
Labels map[string]string `json:"labels,omitempty"`
|
|
@@ -901,21 +774,27 @@ type Component struct {
|
|
|
901
774
|
// Team or individual responsible for this component. Enables per-component ownership when
|
|
902
775
|
// different teams manage different parts of a system.
|
|
903
776
|
Owner *Identity `json:"owner,omitempty"`
|
|
904
|
-
// Embedded CycloneDX or SPDX SBOM document representing this component's software
|
|
905
|
-
// inventory. The sbomFormat field determines which format constraints apply.
|
|
906
|
-
Sbom interface{} `json:"sbom,omitempty"`
|
|
907
|
-
// Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
908
|
-
SbomFormat *SBOMFormat `json:"sbomFormat,omitempty"`
|
|
909
|
-
// URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
|
|
910
|
-
// relative path, absolute URI, or fragment identifier.
|
|
911
|
-
SbomRef *string `json:"sbomRef,omitempty"`
|
|
912
777
|
// Label selector to match targets belonging to this component during migration. Targets
|
|
913
778
|
// with matching labels are automatically included.
|
|
914
779
|
TargetSelector map[string]string `json:"targetSelector,omitempty"`
|
|
915
|
-
// Component type discriminator. Same values as Target types
|
|
780
|
+
// Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
781
|
+
// AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
916
782
|
Type TargetType `json:"type"`
|
|
917
|
-
//
|
|
783
|
+
// Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
|
|
784
|
+
// host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
|
|
785
|
+
// workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
|
|
786
|
+
// from a source that carries directory membership.
|
|
787
|
+
Domain *string `json:"domain,omitempty"`
|
|
788
|
+
// Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
|
|
789
|
+
// (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
|
|
790
|
+
// schema does not enforce case so source fidelity is preserved on round-trip.
|
|
918
791
|
FQDN *string `json:"fqdn,omitempty"`
|
|
792
|
+
// Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
|
|
793
|
+
// from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
|
|
794
|
+
// (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
|
|
795
|
+
// suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
|
|
796
|
+
// the source reports; do not derive it from the FQDN.
|
|
797
|
+
Hostname *string `json:"hostname,omitempty"`
|
|
919
798
|
// IP address of the host.
|
|
920
799
|
IPAddress *string `json:"ipAddress,omitempty"`
|
|
921
800
|
// MAC address in colon-separated hexadecimal format.
|
|
@@ -924,8 +803,6 @@ type Component struct {
|
|
|
924
803
|
OSName *string `json:"osName,omitempty"`
|
|
925
804
|
// Operating system version.
|
|
926
805
|
OSVersion *string `json:"osVersion,omitempty"`
|
|
927
|
-
// Image digest for immutable reference.
|
|
928
|
-
Digest *string `json:"digest,omitempty"`
|
|
929
806
|
// Container image ID.
|
|
930
807
|
ImageID *string `json:"imageId,omitempty"`
|
|
931
808
|
// Container registry. Example: 'docker.io'.
|
|
@@ -953,6 +830,11 @@ type Component struct {
|
|
|
953
830
|
// Package version.
|
|
954
831
|
//
|
|
955
832
|
// Database version.
|
|
833
|
+
//
|
|
834
|
+
// Model version, revision, or checkpoint tag.
|
|
835
|
+
//
|
|
836
|
+
// Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
|
|
837
|
+
// release marker.
|
|
956
838
|
Version *string `json:"version,omitempty"`
|
|
957
839
|
// Cloud account identifier.
|
|
958
840
|
AccountID *string `json:"accountId,omitempty"`
|
|
@@ -978,8 +860,6 @@ type Component struct {
|
|
|
978
860
|
URL *string `json:"url,omitempty"`
|
|
979
861
|
// Environment. Example: 'production', 'staging', 'development'.
|
|
980
862
|
Environment *string `json:"environment,omitempty"`
|
|
981
|
-
// Package checksum for verification.
|
|
982
|
-
Checksum *string `json:"checksum,omitempty"`
|
|
983
863
|
// Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
984
864
|
PackageManager *string `json:"packageManager,omitempty"`
|
|
985
865
|
// Package name.
|
|
@@ -994,10 +874,190 @@ type Component struct {
|
|
|
994
874
|
Host *string `json:"host,omitempty"`
|
|
995
875
|
// Database port.
|
|
996
876
|
Port *int64 `json:"port,omitempty"`
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
//
|
|
1000
|
-
|
|
877
|
+
// Provider/registry identifier for the model. Examples: a Hugging Face repo id
|
|
878
|
+
// ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
|
|
879
|
+
// BOM(s) and to lineage references from other models.
|
|
880
|
+
ModelID *string `json:"modelId,omitempty"`
|
|
881
|
+
// Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
|
|
882
|
+
// ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
|
|
883
|
+
// its dataset BOM(s) and to datasetRefs from ai-model components.
|
|
884
|
+
DatasetID *string `json:"datasetId,omitempty"`
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
type BillOfMaterials struct {
|
|
888
|
+
// The manifest kind. Determines which normalized type-extension (model/dataset/packages)
|
|
889
|
+
// may appear.
|
|
890
|
+
BOMType string `json:"bomType"`
|
|
891
|
+
// Normalized dataset extension. Permitted only when bomType is dataset.
|
|
892
|
+
Dataset *DatasetBOMExtension `json:"dataset,omitempty"`
|
|
893
|
+
// Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
|
|
894
|
+
// SPDX object). HDF does not constrain its internal shape — full manifest validation is a
|
|
895
|
+
// tool-level concern.
|
|
896
|
+
Document map[string]interface{} `json:"document,omitempty"`
|
|
897
|
+
// Source manifest format the BOM was produced from or references. Examples: cyclonedx,
|
|
898
|
+
// cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
|
|
899
|
+
// schema change; the converter that emits the BOM owns the value.
|
|
900
|
+
Format string `json:"format"`
|
|
901
|
+
// Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
|
|
902
|
+
// NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
|
|
903
|
+
// weights, dataset archive) is a component-level concern, not carried here. Subject
|
|
904
|
+
// identity is inherited from the host component/system; per-node identity lives in the
|
|
905
|
+
// type-extension.
|
|
906
|
+
Hashes []Checksum `json:"hashes,omitempty"`
|
|
907
|
+
// Optional license of the BOM document as a whole (SPDX license expression). Nullable and
|
|
908
|
+
// often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
|
|
909
|
+
// live in the type-extension, not here.
|
|
910
|
+
License *string `json:"license,omitempty"`
|
|
911
|
+
// Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
912
|
+
Model *AIModelBOMExtension `json:"model,omitempty"`
|
|
913
|
+
// Normalized sbom extension: the flattened software package inventory. Permitted only when
|
|
914
|
+
// bomType is sbom.
|
|
915
|
+
Packages []SBOMPackage `json:"packages,omitempty"`
|
|
916
|
+
// Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
|
|
917
|
+
// manifest document. Present for externally-hosted BOMs.
|
|
918
|
+
Ref *string `json:"ref,omitempty"`
|
|
919
|
+
// Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
|
|
920
|
+
// documentNamespace). Correlates the same BOM across evidence packages.
|
|
921
|
+
UniqueID *string `json:"uniqueId,omitempty"`
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
// Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All optional;
|
|
925
|
+
// open for partial-fidelity passthrough of unmapped native fields. Symmetric with
|
|
926
|
+
// AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just as the
|
|
927
|
+
// model extension carries baseModelRef/adaptationType.
|
|
928
|
+
type DatasetBOMExtension struct {
|
|
929
|
+
// References to the source dataset(s) this one was derived from — a dataset componentId, or
|
|
930
|
+
// a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
|
|
931
|
+
// ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
|
|
932
|
+
BaseDatasetRefs []string `json:"baseDatasetRefs,omitempty"`
|
|
933
|
+
// Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
|
|
934
|
+
// phi.
|
|
935
|
+
DataClassification *string `json:"dataClassification,omitempty"`
|
|
936
|
+
// Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
|
|
937
|
+
DatasetFormat *string `json:"datasetFormat,omitempty"`
|
|
938
|
+
// Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
939
|
+
// adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
940
|
+
// (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
941
|
+
Derivation *DatasetDerivationType `json:"derivation,omitempty"`
|
|
942
|
+
// Free-text statement of the dataset's intended use (CISA/G7 minimum element).
|
|
943
|
+
IntendedUse *string `json:"intendedUse,omitempty"`
|
|
944
|
+
// Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
945
|
+
// image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
946
|
+
// encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
947
|
+
// physical format. String or array of strings.
|
|
948
|
+
Modality *Modality `json:"modality,omitempty"`
|
|
949
|
+
// Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
|
|
950
|
+
// provenance'; SPDX 3.0 dataset_dataCollectionProcess).
|
|
951
|
+
Provenance *string `json:"provenance,omitempty"`
|
|
952
|
+
// Number of records/examples in the dataset.
|
|
953
|
+
RecordCount *int64 `json:"recordCount,omitempty"`
|
|
954
|
+
// Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
|
|
955
|
+
// open-ended by design). Intentionally free-text and will remain so permanently:
|
|
956
|
+
// recordCount is the one structured statistic, and restructuring this into an object later
|
|
957
|
+
// would break existing consumers, so it stays a string (additive-only).
|
|
958
|
+
StatisticalProperties *string `json:"statisticalProperties,omitempty"`
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All fields
|
|
962
|
+
// optional (standards-correct; only the EU AI Act makes a subset binding for high-risk/GPAI). Left
|
|
963
|
+
// open (additionalProperties: true) so a converter can carry unmapped native fields opaquely
|
|
964
|
+
// (partial-fidelity pattern). Subject name/version are inherited from the host aiModel component,
|
|
965
|
+
// not repeated here.
|
|
966
|
+
type AIModelBOMExtension struct {
|
|
967
|
+
// Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
968
|
+
// vocabulary (the only typed lineage enum in the ecosystem).
|
|
969
|
+
AdaptationType *ModelAdaptationType `json:"adaptationType,omitempty"`
|
|
970
|
+
// Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
|
|
971
|
+
// purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
|
|
972
|
+
BaseModelRef *string `json:"baseModelRef,omitempty"`
|
|
973
|
+
// References to the training/evaluation datasets this model was produced from — preferably
|
|
974
|
+
// a dataset component's componentId (correlating to a first-class dataset subject rather
|
|
975
|
+
// than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
|
|
976
|
+
// component exists.
|
|
977
|
+
DatasetRefs []string `json:"datasetRefs,omitempty"`
|
|
978
|
+
// Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
|
|
979
|
+
// is the set of training knobs, NOT the model's trainable parameterCount — the two are
|
|
980
|
+
// routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
|
|
981
|
+
// ai_hyperparameter.
|
|
982
|
+
Hyperparameters []Hyperparameter `json:"hyperparameters,omitempty"`
|
|
983
|
+
// Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
984
|
+
// context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
985
|
+
// modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
986
|
+
InputOutput *InputOutput `json:"inputOutput,omitempty"`
|
|
987
|
+
// Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
|
|
988
|
+
IntendedUse *string `json:"intendedUse,omitempty"`
|
|
989
|
+
// Model's learning/training paradigm. Free-text because the value set varies across
|
|
990
|
+
// standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
|
|
991
|
+
// Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
|
|
992
|
+
// modelParameters.approach.type ∩ CISA/G7 learning type.
|
|
993
|
+
LearningApproach *string `json:"learningApproach,omitempty"`
|
|
994
|
+
// Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
|
|
995
|
+
ModelArchitecture *string `json:"modelArchitecture,omitempty"`
|
|
996
|
+
// Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
|
|
997
|
+
// because the EU AI Act keys GPAI obligations off model scale.
|
|
998
|
+
ParameterCount *int64 `json:"parameterCount,omitempty"`
|
|
999
|
+
// Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
|
|
1000
|
+
// heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
|
|
1001
|
+
// true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
|
|
1002
|
+
// intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
|
|
1003
|
+
// CISA/G7 KPI cluster.
|
|
1004
|
+
PerformanceMetrics []PerformanceMetric `json:"performanceMetrics,omitempty"`
|
|
1005
|
+
// On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
|
|
1006
|
+
// pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
|
|
1007
|
+
// safetensors, pytorch, gguf, onnx, tensorflow.
|
|
1008
|
+
SerializationFormat *string `json:"serializationFormat,omitempty"`
|
|
1009
|
+
// The ML task the model performs. Free-text. Examples: text-classification,
|
|
1010
|
+
// sentiment-analysis, object-detection, translation. Sourced from CycloneDX
|
|
1011
|
+
// modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
|
|
1012
|
+
// intended-application.
|
|
1013
|
+
Task *string `json:"task,omitempty"`
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
type Hyperparameter struct {
|
|
1017
|
+
// Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
|
|
1018
|
+
Name *string `json:"name,omitempty"`
|
|
1019
|
+
// Hyper-parameter value (free-text).
|
|
1020
|
+
Value *string `json:"value,omitempty"`
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
// Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1024
|
+
// context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1025
|
+
// modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1026
|
+
type InputOutput struct {
|
|
1027
|
+
// Maximum context/sequence length the model accepts, in tokens.
|
|
1028
|
+
ContextLength *int64 `json:"contextLength,omitempty"`
|
|
1029
|
+
// Input/output data types. Examples: string, byte[], float32, image.
|
|
1030
|
+
DataTypes []string `json:"dataTypes,omitempty"`
|
|
1031
|
+
// Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
1032
|
+
// Symmetric with Dataset_Extension.modality.
|
|
1033
|
+
Modality *Modality `json:"modality,omitempty"`
|
|
1034
|
+
// Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
|
|
1035
|
+
Tokenizer *string `json:"tokenizer,omitempty"`
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
type PerformanceMetric struct {
|
|
1039
|
+
// Metric name. Examples: accuracy, f1, BLEU, latency.
|
|
1040
|
+
Name *string `json:"name,omitempty"`
|
|
1041
|
+
// Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
|
|
1042
|
+
// milliseconds).
|
|
1043
|
+
Value *string `json:"value,omitempty"`
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
// A single normalized software package entry within an sbom BOM. Minimal identity + version for
|
|
1047
|
+
// querying/diffing; the full native record remains available via passthrough (document/ref).
|
|
1048
|
+
type SBOMPackage struct {
|
|
1049
|
+
// SPDX license identifiers/expressions for this package.
|
|
1050
|
+
Licenses []string `json:"licenses,omitempty"`
|
|
1051
|
+
// Package name.
|
|
1052
|
+
Name string `json:"name"`
|
|
1053
|
+
// Package URL (purl) — the preferred cross-BOM identity key when present.
|
|
1054
|
+
Purl *string `json:"purl,omitempty"`
|
|
1055
|
+
// Package version.
|
|
1056
|
+
Version *string `json:"version,omitempty"`
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
// An override of a baseline input value for a specific component. Enables system-specific tailoring
|
|
1060
|
+
// of baseline parameters.
|
|
1001
1061
|
type InputOverride struct {
|
|
1002
1062
|
// Identity of the person or system that approved this override.
|
|
1003
1063
|
ApprovedBy *Identity `json:"approvedBy,omitempty"`
|
|
@@ -1012,19 +1072,7 @@ type InputOverride struct {
|
|
|
1012
1072
|
Value interface{} `json:"value"`
|
|
1013
1073
|
}
|
|
1014
1074
|
|
|
1015
|
-
// Information about the tool that generated this file.
|
|
1016
|
-
//
|
|
1017
1075
|
// Information about the tool that generated this HDF file.
|
|
1018
|
-
//
|
|
1019
|
-
// The tool that generated this file.
|
|
1020
|
-
//
|
|
1021
|
-
// Information about the tool that generated this comparison.
|
|
1022
|
-
//
|
|
1023
|
-
// Information about the tool that generated this system document.
|
|
1024
|
-
//
|
|
1025
|
-
// Information about the tool that generated this plan.
|
|
1026
|
-
//
|
|
1027
|
-
// Information about the tool that generated this document.
|
|
1028
1076
|
type Generator struct {
|
|
1029
1077
|
// The name of the software that produced this HDF file. Example: 'gosec-to-hdf'.
|
|
1030
1078
|
Name string `json:"name"`
|
|
@@ -1032,15 +1080,9 @@ type Generator struct {
|
|
|
1032
1080
|
Version string `json:"version"`
|
|
1033
1081
|
}
|
|
1034
1082
|
|
|
1035
|
-
//
|
|
1036
|
-
//
|
|
1037
|
-
//
|
|
1038
|
-
// Reference to automated remediation resources for implementing security controls. Points
|
|
1039
|
-
// to external automation content like Ansible playbooks, Terraform scripts, or
|
|
1040
|
-
// vendor-provided remediation tools.
|
|
1041
|
-
//
|
|
1042
|
-
// Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1043
|
-
// scripts, etc.) for implementing the security controls defined in this baseline.
|
|
1083
|
+
// Reference to automated remediation resources for implementing security controls. Points to
|
|
1084
|
+
// external automation content like Ansible playbooks, Terraform scripts, or vendor-provided
|
|
1085
|
+
// remediation tools.
|
|
1044
1086
|
type Remediation struct {
|
|
1045
1087
|
// Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
1046
1088
|
// fetched from the URI. Recommended for security when referencing external automation
|
|
@@ -1052,12 +1094,8 @@ type Remediation struct {
|
|
|
1052
1094
|
URI string `json:"uri"`
|
|
1053
1095
|
}
|
|
1054
1096
|
|
|
1055
|
-
// Information about the test execution environment
|
|
1056
|
-
//
|
|
1057
|
-
//
|
|
1058
|
-
// Information about the test execution environment. This is distinct from the target being
|
|
1059
|
-
// scanned - the runner is where the security tool executes, while targets are what is being
|
|
1060
|
-
// assessed.
|
|
1097
|
+
// Information about the test execution environment. This is distinct from the target being scanned
|
|
1098
|
+
// - the runner is where the security tool executes, while targets are what is being assessed.
|
|
1061
1099
|
type Runner struct {
|
|
1062
1100
|
// The CPU architecture of the runner system. Example: 'x86_64', 'arm64', 'aarch64'.
|
|
1063
1101
|
Architecture *string `json:"architecture,omitempty"`
|
|
@@ -1067,7 +1105,14 @@ type Runner struct {
|
|
|
1067
1105
|
// The container image used for the test execution. Example: 'inspec/inspec:latest',
|
|
1068
1106
|
// 'ghcr.io/my-org/scanner:v2.1.0'. Useful for CI/CD pipelines where tests run in containers.
|
|
1069
1107
|
ContainerImage *string `json:"containerImage,omitempty"`
|
|
1070
|
-
// The
|
|
1108
|
+
// The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
|
|
1109
|
+
// NOT the DNS suffix of the FQDN. Example: 'CORP'.
|
|
1110
|
+
Domain *string `json:"domain,omitempty"`
|
|
1111
|
+
// The fully qualified domain name of the runner system, when known. Distinct from the short
|
|
1112
|
+
// 'hostname'; kept separate for the same reason as on host components (an FQDN is not
|
|
1113
|
+
// reliably decomposable). Example: 'ci-runner-01.build.example.com'.
|
|
1114
|
+
FQDN *string `json:"fqdn,omitempty"`
|
|
1115
|
+
// The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1071
1116
|
// 'k8s-node-worker-03'.
|
|
1072
1117
|
Hostname *string `json:"hostname,omitempty"`
|
|
1073
1118
|
// The name of the runner environment. Examples: 'ubuntu', 'macos', 'windows', 'docker',
|
|
@@ -1081,8 +1126,6 @@ type Runner struct {
|
|
|
1081
1126
|
Release *string `json:"release,omitempty"`
|
|
1082
1127
|
}
|
|
1083
1128
|
|
|
1084
|
-
// Statistics for the assessment run, including duration and result counts.
|
|
1085
|
-
//
|
|
1086
1129
|
// Statistics for the assessment run(s) such as duration and result counts.
|
|
1087
1130
|
type Statistics struct {
|
|
1088
1131
|
// How long (in seconds) this assessment run took.
|
|
@@ -1091,8 +1134,6 @@ type Statistics struct {
|
|
|
1091
1134
|
Requirements *StatisticHash `json:"requirements,omitempty"`
|
|
1092
1135
|
}
|
|
1093
1136
|
|
|
1094
|
-
// Breakdowns of requirement statistics by result status.
|
|
1095
|
-
//
|
|
1096
1137
|
// Statistics for requirement results, grouped by status.
|
|
1097
1138
|
type StatisticHash struct {
|
|
1098
1139
|
// Statistics for requirements that encountered an error during assessment.
|
|
@@ -1107,28 +1148,14 @@ type StatisticHash struct {
|
|
|
1107
1148
|
Passed *StatisticBlock `json:"passed,omitempty"`
|
|
1108
1149
|
}
|
|
1109
1150
|
|
|
1110
|
-
// Statistics for requirements that encountered an error during assessment.
|
|
1111
|
-
//
|
|
1112
1151
|
// Statistics for a given item, such as the total count.
|
|
1113
|
-
//
|
|
1114
|
-
// Statistics for requirements that failed.
|
|
1115
|
-
//
|
|
1116
|
-
// Statistics for requirements that are not applicable to the target.
|
|
1117
|
-
//
|
|
1118
|
-
// Statistics for requirements that were not reviewed (manual check required).
|
|
1119
|
-
//
|
|
1120
|
-
// Statistics for requirements that passed.
|
|
1121
1152
|
type StatisticBlock struct {
|
|
1122
1153
|
// The total count. Example: the total number of requirements in a given category for a run.
|
|
1123
1154
|
Total int64 `json:"total"`
|
|
1124
1155
|
}
|
|
1125
1156
|
|
|
1126
|
-
// The security tool that produced the assessment data in this file.
|
|
1127
|
-
//
|
|
1128
|
-
// The security tool that produced the assessment data represented in this HDF file. Aligns
|
|
1129
|
-
// with SARIF, OSCAL, and CycloneDX terminology.
|
|
1130
|
-
//
|
|
1131
|
-
// The security tool that produced the assessment data in this source.
|
|
1157
|
+
// The security tool that produced the assessment data represented in this HDF file. Aligns with
|
|
1158
|
+
// SARIF, OSCAL, and CycloneDX terminology.
|
|
1132
1159
|
type Tool struct {
|
|
1133
1160
|
// The file format, if it is a recognized named format shared by multiple tools. Examples:
|
|
1134
1161
|
// 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the
|
|
@@ -1141,11 +1168,8 @@ type Tool struct {
|
|
|
1141
1168
|
Version *string `json:"version,omitempty"`
|
|
1142
1169
|
}
|
|
1143
1170
|
|
|
1144
|
-
// Information on the set of requirements that can be assessed, including baseline metadata
|
|
1145
|
-
//
|
|
1146
|
-
//
|
|
1147
|
-
// Shared metadata fields for baselines. Used in both standalone baseline documents and
|
|
1148
|
-
// evaluated baseline results.
|
|
1171
|
+
// Information on the set of requirements that can be assessed, including baseline metadata and
|
|
1172
|
+
// requirement definitions.
|
|
1149
1173
|
type HDFBaseline struct {
|
|
1150
1174
|
// The set of dependencies this baseline depends on.
|
|
1151
1175
|
Depends []Dependency `json:"depends,omitempty"`
|
|
@@ -1189,9 +1213,6 @@ type HDFBaseline struct {
|
|
|
1189
1213
|
}
|
|
1190
1214
|
|
|
1191
1215
|
// A requirement definition without assessment results.
|
|
1192
|
-
//
|
|
1193
|
-
// Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
1194
|
-
// Contains the fundamental requirement definition without assessment results.
|
|
1195
1216
|
type BaselineRequirement struct {
|
|
1196
1217
|
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
1197
1218
|
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
@@ -1240,42 +1261,47 @@ type BaselineRequirement struct {
|
|
|
1240
1261
|
VerificationMethod *VerificationMethodEnum `json:"verificationMethod,omitempty"`
|
|
1241
1262
|
}
|
|
1242
1263
|
|
|
1243
|
-
// Structured comparison between two or more HDF security assessment documents. Supports
|
|
1244
|
-
//
|
|
1264
|
+
// Structured comparison between two or more HDF security assessment documents. Supports temporal,
|
|
1265
|
+
// baseline, fleet, and multi-source comparison modes.
|
|
1245
1266
|
type HDFComparison struct {
|
|
1246
|
-
// Map of annotation IDs to annotation objects, providing context or action items for
|
|
1247
|
-
// requirement diffs.
|
|
1248
|
-
Annotations
|
|
1249
|
-
// Comparison of baselines between sources.
|
|
1250
|
-
BaselineDiffs
|
|
1251
|
-
// The mode of comparison being performed.
|
|
1252
|
-
ComparisonMode
|
|
1253
|
-
// Comparison of components between two system documents. Used in systemDrift mode.
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
//
|
|
1270
|
-
|
|
1271
|
-
//
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1267
|
+
// Map of annotation IDs to annotation objects, providing context or action items for
|
|
1268
|
+
// requirement diffs.
|
|
1269
|
+
Annotations map[string]Annotation `json:"annotations,omitempty"`
|
|
1270
|
+
// Comparison of baselines between sources.
|
|
1271
|
+
BaselineDiffs []BaselineDiff `json:"baselineDiffs,omitempty"`
|
|
1272
|
+
// The mode of comparison being performed.
|
|
1273
|
+
ComparisonMode ComparisonMode `json:"comparisonMode"`
|
|
1274
|
+
// Comparison of components between two system documents. Used in systemDrift mode. A
|
|
1275
|
+
// component's BOM changes surface as a field change on its boms[] here.
|
|
1276
|
+
ComponentDiffs []ComponentDiff `json:"componentDiffs,omitempty"`
|
|
1277
|
+
// External/metadata changes separate from status changes (Terraform pattern).
|
|
1278
|
+
Drift []RequirementDiff `json:"drift,omitempty"`
|
|
1279
|
+
// Reserved for tool-specific data not defined in the HDF standard.
|
|
1280
|
+
Extensions map[string]interface{} `json:"extensions,omitempty"`
|
|
1281
|
+
// Schema version for this comparison format.
|
|
1282
|
+
FormatVersion FormatVersion `json:"formatVersion"`
|
|
1283
|
+
// Information about the tool that generated this comparison.
|
|
1284
|
+
Generator *Generator `json:"generator,omitempty"`
|
|
1285
|
+
// Cryptographic integrity information for verifying this comparison document.
|
|
1286
|
+
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1287
|
+
// Configuration for how requirements were matched across sources.
|
|
1288
|
+
Matching *MatchingConfig `json:"matching,omitempty"`
|
|
1289
|
+
// RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
|
|
1290
|
+
// component's BOM changes as a field change on its boms[] (see componentDiffs), and
|
|
1291
|
+
// standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
|
|
1292
|
+
// field is retained for a future normalized package-level diff; consumers must not expect
|
|
1293
|
+
// it from today's systemDrift output.
|
|
1294
|
+
PackageDiffs []PackageDiff `json:"packageDiffs,omitempty"`
|
|
1295
|
+
// Detailed comparison of individual requirements between sources.
|
|
1296
|
+
RequirementDiffs []RequirementDiff `json:"requirementDiffs"`
|
|
1297
|
+
// The source documents being compared. At least two sources are required.
|
|
1298
|
+
Sources []Source `json:"sources"`
|
|
1299
|
+
// Summary statistics for the overall comparison.
|
|
1300
|
+
Summary ComparisonSummary `json:"summary"`
|
|
1301
|
+
// URI identifying the system being compared in systemDrift mode.
|
|
1302
|
+
SystemRef *string `json:"systemRef,omitempty"`
|
|
1303
|
+
// When this comparison was performed.
|
|
1304
|
+
Timestamp *time.Time `json:"timestamp,omitempty"`
|
|
1279
1305
|
}
|
|
1280
1306
|
|
|
1281
1307
|
// An annotation attached to a comparison, providing context or action items.
|
|
@@ -1399,8 +1425,6 @@ type Value struct {
|
|
|
1399
1425
|
Value interface{} `json:"value"`
|
|
1400
1426
|
}
|
|
1401
1427
|
|
|
1402
|
-
// Configuration for how requirements were matched across sources.
|
|
1403
|
-
//
|
|
1404
1428
|
// Configuration for how requirements are matched across sources.
|
|
1405
1429
|
type MatchingConfig struct {
|
|
1406
1430
|
// Ordered list of fallback strategies tried when the primary strategy fails to find a match.
|
|
@@ -1415,21 +1439,28 @@ type MatchingConfig struct {
|
|
|
1415
1439
|
PrimaryStrategy MatchStrategy `json:"primaryStrategy"`
|
|
1416
1440
|
}
|
|
1417
1441
|
|
|
1418
|
-
// Comparison of a single
|
|
1442
|
+
// Comparison of a single BOM node between two BOM versions, matched by purl (software) or
|
|
1443
|
+
// identifier (models, datasets, hardware, crypto).
|
|
1419
1444
|
type PackageDiff struct {
|
|
1420
|
-
//
|
|
1421
|
-
|
|
1422
|
-
//
|
|
1423
|
-
|
|
1424
|
-
//
|
|
1425
|
-
|
|
1426
|
-
//
|
|
1427
|
-
|
|
1428
|
-
// Package
|
|
1429
|
-
|
|
1430
|
-
//
|
|
1431
|
-
|
|
1432
|
-
|
|
1445
|
+
// Generic identity key for matching a BOM node across versions when no purl applies — e.g.
|
|
1446
|
+
// a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
|
|
1447
|
+
// number. At least one of purl or identifier is required.
|
|
1448
|
+
Identifier *string `json:"identifier,omitempty"`
|
|
1449
|
+
// License identifiers for this package.
|
|
1450
|
+
Licenses []string `json:"licenses,omitempty"`
|
|
1451
|
+
// Human-readable node name.
|
|
1452
|
+
Name *string `json:"name,omitempty"`
|
|
1453
|
+
// Package version in the new SBOM.
|
|
1454
|
+
NewVersion *string `json:"newVersion,omitempty"`
|
|
1455
|
+
// Package version in the old SBOM.
|
|
1456
|
+
OldVersion *string `json:"oldVersion,omitempty"`
|
|
1457
|
+
// Package URL (purl) — the preferred identity key for matching software packages across
|
|
1458
|
+
// BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
|
|
1459
|
+
// algorithms) key on identifier instead.
|
|
1460
|
+
Purl *string `json:"purl,omitempty"`
|
|
1461
|
+
// The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
1462
|
+
// updated (version changed), unchanged.
|
|
1463
|
+
State PackageDiffState `json:"state"`
|
|
1433
1464
|
}
|
|
1434
1465
|
|
|
1435
1466
|
// A source document participating in the comparison.
|
|
@@ -1500,8 +1531,6 @@ type ComparisonSummary struct {
|
|
|
1500
1531
|
Updated *int64 `json:"updated,omitempty"`
|
|
1501
1532
|
}
|
|
1502
1533
|
|
|
1503
|
-
// State counts broken down by severity level.
|
|
1504
|
-
//
|
|
1505
1534
|
// Breakdown of state counts by severity level.
|
|
1506
1535
|
type SeverityBreakdown struct {
|
|
1507
1536
|
// State counts for critical severity requirements.
|
|
@@ -1514,15 +1543,7 @@ type SeverityBreakdown struct {
|
|
|
1514
1543
|
Medium *StateCounts `json:"medium,omitempty"`
|
|
1515
1544
|
}
|
|
1516
1545
|
|
|
1517
|
-
// State counts for critical severity requirements.
|
|
1518
|
-
//
|
|
1519
1546
|
// Counts of requirements in each state.
|
|
1520
|
-
//
|
|
1521
|
-
// State counts for high severity requirements.
|
|
1522
|
-
//
|
|
1523
|
-
// State counts for low severity requirements.
|
|
1524
|
-
//
|
|
1525
|
-
// State counts for medium severity requirements.
|
|
1526
1547
|
type StateCounts struct {
|
|
1527
1548
|
// Number of requirements present only in the old source.
|
|
1528
1549
|
Absent *int64 `json:"absent,omitempty"`
|
|
@@ -1562,20 +1583,26 @@ type PerSourceSummary struct {
|
|
|
1562
1583
|
Updated *int64 `json:"updated,omitempty"`
|
|
1563
1584
|
}
|
|
1564
1585
|
|
|
1565
|
-
// Describes a system's authorization boundary, components, and interconnections. Maps to
|
|
1566
|
-
//
|
|
1586
|
+
// Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP
|
|
1587
|
+
// system-characteristics and FedRAMP system inventory.
|
|
1567
1588
|
type HDFSystem struct {
|
|
1568
1589
|
// Date the current authorization status was granted. ISO 8601 format.
|
|
1569
1590
|
AuthorizationDate *time.Time `json:"authorizationDate,omitempty"`
|
|
1570
1591
|
// Current Authorization to Operate (ATO) status.
|
|
1571
1592
|
AuthorizationStatus *AuthorizationStatus `json:"authorizationStatus,omitempty"`
|
|
1593
|
+
// System-scoped Bills of Materials whose subject is the authorization boundary rather than
|
|
1594
|
+
// a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
|
|
1595
|
+
// Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
|
|
1596
|
+
// primitives/bom.schema.json.
|
|
1597
|
+
Boms []BillOfMaterials `json:"boms,omitempty"`
|
|
1572
1598
|
// Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
1573
1599
|
// VPC IDs, physical locations.
|
|
1574
1600
|
BoundaryDescription *string `json:"boundaryDescription,omitempty"`
|
|
1575
1601
|
// FIPS 199 security categorization (impact level).
|
|
1576
1602
|
CategorizationLevel *CategorizationLevel `json:"categorizationLevel,omitempty"`
|
|
1577
1603
|
// System components within the authorization boundary. Uses the full polymorphic Component
|
|
1578
|
-
// type with stable identity (componentId), external references, and
|
|
1604
|
+
// type with stable identity (componentId), external references, and generalized BOM
|
|
1605
|
+
// attachment (boms[]).
|
|
1579
1606
|
Components []Component `json:"components"`
|
|
1580
1607
|
// Declares which controls are common, hybrid, or system-specific, and which component
|
|
1581
1608
|
// provides them. Maps to NIST SP 800-53 control designations and OSCAL
|
|
@@ -1611,10 +1638,10 @@ type HDFSystem struct {
|
|
|
1611
1638
|
Version *string `json:"version,omitempty"`
|
|
1612
1639
|
}
|
|
1613
1640
|
|
|
1614
|
-
// Declares a control's designation within a system — whether it is common (provided by
|
|
1615
|
-
//
|
|
1616
|
-
//
|
|
1617
|
-
//
|
|
1641
|
+
// Declares a control's designation within a system — whether it is common (provided by another
|
|
1642
|
+
// component or system), system-specific (implemented locally), or hybrid (shared responsibility).
|
|
1643
|
+
// Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP by-component
|
|
1644
|
+
// provided/inherited semantics.
|
|
1618
1645
|
type ControlDesignation struct {
|
|
1619
1646
|
// The control identifier (e.g., 'SC-7', 'AC-2 (1)'). Must match a NIST tag in a baseline
|
|
1620
1647
|
// requirement's tags.
|
|
@@ -1637,9 +1664,9 @@ type ControlDesignation struct {
|
|
|
1637
1664
|
SystemRef *string `json:"systemRef,omitempty"`
|
|
1638
1665
|
}
|
|
1639
1666
|
|
|
1640
|
-
// A data flow between two endpoints. The 'from' endpoint is always a local component; the
|
|
1641
|
-
//
|
|
1642
|
-
//
|
|
1667
|
+
// A data flow between two endpoints. The 'from' endpoint is always a local component; the 'to'
|
|
1668
|
+
// endpoint can be local, cross-system, or external. Use 'direction' to indicate whether data flows
|
|
1669
|
+
// one-way or both ways.
|
|
1643
1670
|
type DataFlow struct {
|
|
1644
1671
|
// Authentication mechanism used for this connection. Examples: 'mTLS', 'OAuth2', 'API key',
|
|
1645
1672
|
// 'SAML', 'Kerberos'.
|
|
@@ -1662,8 +1689,8 @@ type DataFlow struct {
|
|
|
1662
1689
|
To interface{} `json:"to"`
|
|
1663
1690
|
}
|
|
1664
1691
|
|
|
1665
|
-
// Defines an assessment plan — what baselines to run against which targets, with resolved
|
|
1666
|
-
//
|
|
1692
|
+
// Defines an assessment plan — what baselines to run against which targets, with resolved inputs
|
|
1693
|
+
// and scheduling. Maps to OSCAL Assessment Plan.
|
|
1667
1694
|
type HDFPlan struct {
|
|
1668
1695
|
// The assessments to perform. Each assessment pairs a baseline with targets and resolved
|
|
1669
1696
|
// inputs.
|
|
@@ -1692,8 +1719,8 @@ type HDFPlan struct {
|
|
|
1692
1719
|
Version *string `json:"version,omitempty"`
|
|
1693
1720
|
}
|
|
1694
1721
|
|
|
1695
|
-
// A single assessment within a plan — defines which baseline to run against which targets
|
|
1696
|
-
//
|
|
1722
|
+
// A single assessment within a plan — defines which baseline to run against which targets with what
|
|
1723
|
+
// configuration.
|
|
1697
1724
|
type Assessment struct {
|
|
1698
1725
|
// Reference to the baseline to evaluate. May be a baseline name (e.g. 'RHEL9-STIG'), a
|
|
1699
1726
|
// relative path to an HDF Baseline document (e.g. 'rhel9-stig.hdf-baseline.json'), or an
|
|
@@ -1714,8 +1741,6 @@ type Assessment struct {
|
|
|
1714
1741
|
TargetSelector map[string]string `json:"targetSelector,omitempty"`
|
|
1715
1742
|
}
|
|
1716
1743
|
|
|
1717
|
-
// Runner/scanner configuration for this assessment.
|
|
1718
|
-
//
|
|
1719
1744
|
// Configuration for the assessment runner/scanner.
|
|
1720
1745
|
type RunnerConfig struct {
|
|
1721
1746
|
// Name of the assessment runner. Example: 'cinc-auditor', 'inspec', 'openscap'.
|
|
@@ -1724,8 +1749,6 @@ type RunnerConfig struct {
|
|
|
1724
1749
|
Version *string `json:"version,omitempty"`
|
|
1725
1750
|
}
|
|
1726
1751
|
|
|
1727
|
-
// Optional scheduling configuration for recurring assessments.
|
|
1728
|
-
//
|
|
1729
1752
|
// Scheduling configuration for recurring assessments.
|
|
1730
1753
|
type Schedule struct {
|
|
1731
1754
|
// Cron expression for recurring assessments. Example: '0 2 1 * *' (2 AM on the 1st of each
|
|
@@ -1741,8 +1764,8 @@ type Schedule struct {
|
|
|
1741
1764
|
StartDate *time.Time `json:"startDate,omitempty"`
|
|
1742
1765
|
}
|
|
1743
1766
|
|
|
1744
|
-
// Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
|
|
1745
|
-
//
|
|
1767
|
+
// Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments
|
|
1768
|
+
// are standalone documents that can be applied to results via merge operations.
|
|
1746
1769
|
type HDFAmendments struct {
|
|
1747
1770
|
// Unique identifier for this amendments document. Useful for cross-referencing when
|
|
1748
1771
|
// multiple amendment documents target the same results.
|
|
@@ -1773,18 +1796,18 @@ type HDFAmendments struct {
|
|
|
1773
1796
|
Version *string `json:"version,omitempty"`
|
|
1774
1797
|
}
|
|
1775
1798
|
|
|
1776
|
-
// A standalone override to a requirement's compliance status or risk impact. Validation has
|
|
1777
|
-
//
|
|
1778
|
-
//
|
|
1779
|
-
// (documentation-only). For all other types, at least one of 'status' or 'impact' must be
|
|
1780
|
-
//
|
|
1799
|
+
// A standalone override to a requirement's compliance status or risk impact. Validation has two
|
|
1800
|
+
// branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact'
|
|
1801
|
+
// may be set — the override records accepted risk without changing the finding
|
|
1802
|
+
// (documentation-only). For all other types, at least one of 'status' or 'impact' must be set. This
|
|
1803
|
+
// rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
|
|
1781
1804
|
// finding.associated-risk[].facet[] are separate axes
|
|
1782
|
-
// (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
|
|
1783
|
-
//
|
|
1784
|
-
//
|
|
1785
|
-
// (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
|
|
1786
|
-
//
|
|
1787
|
-
//
|
|
1805
|
+
// (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2) FedRAMP
|
|
1806
|
+
// deviation request types — Risk Adjustment changes impact only, Operational Requirement documents
|
|
1807
|
+
// acceptance only, False Positive changes status
|
|
1808
|
+
// (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3) NIST SP
|
|
1809
|
+
// 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment
|
|
1810
|
+
// status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
|
|
1788
1811
|
type StandaloneOverride struct {
|
|
1789
1812
|
// Software packages this amendment is scoped to, distinct from componentRef (which scopes
|
|
1790
1813
|
// to an HDF-internal Component by UUID). Use when the source amendment format references
|
|
@@ -1843,49 +1866,51 @@ type StandaloneOverride struct {
|
|
|
1843
1866
|
Type OverrideType `json:"type"`
|
|
1844
1867
|
}
|
|
1845
1868
|
|
|
1846
|
-
// Bundles references to all HDF documents for audit, authorization, and compliance review.
|
|
1847
|
-
//
|
|
1848
|
-
// verification.
|
|
1869
|
+
// Bundles references to all HDF documents for audit, authorization, and compliance review. Each
|
|
1870
|
+
// content entry references a document by type, URI, and checksum for integrity verification.
|
|
1849
1871
|
type HDFEvidencePackage struct {
|
|
1850
|
-
// Summary of assessment completeness and compliance status.
|
|
1851
|
-
CompletenessCheck *CompletenessCheck
|
|
1852
|
-
// References to HDF documents included in this evidence package.
|
|
1853
|
-
Contents []ContentReference
|
|
1854
|
-
// Description of the evidence package's purpose and scope.
|
|
1855
|
-
Description *string
|
|
1856
|
-
//
|
|
1857
|
-
|
|
1858
|
-
//
|
|
1859
|
-
//
|
|
1860
|
-
|
|
1861
|
-
//
|
|
1862
|
-
|
|
1863
|
-
//
|
|
1864
|
-
//
|
|
1865
|
-
|
|
1866
|
-
//
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
//
|
|
1870
|
-
|
|
1871
|
-
// this package.
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
//
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
//
|
|
1887
|
-
|
|
1888
|
-
|
|
1872
|
+
// Summary of assessment completeness and compliance status.
|
|
1873
|
+
CompletenessCheck *CompletenessCheck `json:"completenessCheck,omitempty"`
|
|
1874
|
+
// References to HDF documents included in this evidence package.
|
|
1875
|
+
Contents []ContentReference `json:"contents"`
|
|
1876
|
+
// Description of the evidence package's purpose and scope.
|
|
1877
|
+
Description *string `json:"description,omitempty"`
|
|
1878
|
+
// References to external native-format evidence (log/telemetry corpora and other artifacts)
|
|
1879
|
+
// carried by URI + integrity hash + format discriminator, without recreating the data
|
|
1880
|
+
// inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
|
|
1881
|
+
// here rather than transcoding them.
|
|
1882
|
+
ExternalEvidence []ExternalEvidenceReference `json:"externalEvidence,omitempty"`
|
|
1883
|
+
// Information about the tool that generated this document.
|
|
1884
|
+
Generator *Generator `json:"generator,omitempty"`
|
|
1885
|
+
// Cryptographic integrity information for verifying this evidence package has not been
|
|
1886
|
+
// tampered with.
|
|
1887
|
+
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1888
|
+
// Optional key-value labels for grouping and querying evidence packages.
|
|
1889
|
+
Labels map[string]string `json:"labels,omitempty"`
|
|
1890
|
+
// Human-readable name for this evidence package. Example: 'Enterprise Portal ATO Evidence -
|
|
1891
|
+
// Q1 2026'.
|
|
1892
|
+
Name string `json:"name"`
|
|
1893
|
+
// Unique identifier for this evidence package. Optional in casual use, expected in
|
|
1894
|
+
// production ATO submissions. Auto-generated if omitted during creation.
|
|
1895
|
+
PackageID *string `json:"packageId,omitempty"`
|
|
1896
|
+
// URI to the hdf-plan document that drove this assessment. Used for completeness
|
|
1897
|
+
// verification — every baseline in the plan should have a corresponding results document in
|
|
1898
|
+
// this package.
|
|
1899
|
+
PlanRef *string `json:"planRef,omitempty"`
|
|
1900
|
+
// When this evidence package was prepared. ISO 8601 format.
|
|
1901
|
+
PreparedAt *time.Time `json:"preparedAt,omitempty"`
|
|
1902
|
+
// Identity of who prepared this evidence package.
|
|
1903
|
+
PreparedBy *Identity `json:"preparedBy,omitempty"`
|
|
1904
|
+
// Digital signature covering the entire evidence package.
|
|
1905
|
+
Signature *Signature `json:"signature,omitempty"`
|
|
1906
|
+
// URI to the hdf-system document this evidence package covers.
|
|
1907
|
+
SystemRef *string `json:"systemRef,omitempty"`
|
|
1908
|
+
// Version of this evidence package.
|
|
1909
|
+
Version *string `json:"version,omitempty"`
|
|
1910
|
+
}
|
|
1911
|
+
|
|
1912
|
+
// Informational summary of assessment completeness. Not authoritative — tools should compute these
|
|
1913
|
+
// from the referenced documents.
|
|
1889
1914
|
type CompletenessCheck struct {
|
|
1890
1915
|
// Whether all baselines referenced by system components have assessment results.
|
|
1891
1916
|
AllBaselinesAssessed *bool `json:"allBaselinesAssessed,omitempty"`
|
|
@@ -1901,8 +1926,6 @@ type CompletenessCheck struct {
|
|
|
1901
1926
|
UnresolvedPoams *int64 `json:"unresolvedPoams,omitempty"`
|
|
1902
1927
|
}
|
|
1903
1928
|
|
|
1904
|
-
// SBOM coverage across system components.
|
|
1905
|
-
//
|
|
1906
1929
|
// SBOM coverage statistics for the system.
|
|
1907
1930
|
type SBOMCoverage struct {
|
|
1908
1931
|
// Number of system components that have an associated SBOM.
|
|
@@ -1911,7 +1934,7 @@ type SBOMCoverage struct {
|
|
|
1911
1934
|
TotalComponents *int64 `json:"totalComponents,omitempty"`
|
|
1912
1935
|
}
|
|
1913
1936
|
|
|
1914
|
-
// A reference to an HDF document or
|
|
1937
|
+
// A reference to an HDF document or BOM/manifest included in the evidence package.
|
|
1915
1938
|
type ContentReference struct {
|
|
1916
1939
|
// Cryptographic checksum for verifying the referenced document's integrity.
|
|
1917
1940
|
Checksum *Checksum `json:"checksum,omitempty"`
|
|
@@ -1926,8 +1949,51 @@ type ContentReference struct {
|
|
|
1926
1949
|
URI string `json:"uri"`
|
|
1927
1950
|
}
|
|
1928
1951
|
|
|
1929
|
-
//
|
|
1930
|
-
//
|
|
1952
|
+
// A reference to external native-format evidence (log/telemetry corpus or other artifact) carried
|
|
1953
|
+
// by URI + integrity hash + format discriminator. Reference-only: the artifact is never embedded
|
|
1954
|
+
// (corpora can be huge) or transcoded (that would be lossy) — it stays canonical in its native
|
|
1955
|
+
// format and HDF acts as the structured index.
|
|
1956
|
+
type ExternalEvidenceReference struct {
|
|
1957
|
+
// Cryptographic checksum of the referenced artifact for integrity verification.
|
|
1958
|
+
Checksum *Checksum `json:"checksum,omitempty"`
|
|
1959
|
+
// Optional human-readable description of this evidence entry.
|
|
1960
|
+
Description *string `json:"description,omitempty"`
|
|
1961
|
+
// The native format discriminator of the referenced artifact.
|
|
1962
|
+
Format string `json:"format"`
|
|
1963
|
+
// Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
|
|
1964
|
+
// Free-text and untrusted — HDF does not validate it against a registry.
|
|
1965
|
+
FormatVersion *string `json:"formatVersion,omitempty"`
|
|
1966
|
+
// Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
|
|
1967
|
+
// (the semantic standard). Examples: application/x-ndjson, application/json,
|
|
1968
|
+
// application/vnd.apache.parquet, text/csv.
|
|
1969
|
+
MediaType *string `json:"mediaType,omitempty"`
|
|
1970
|
+
// Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
1971
|
+
Metadata *ExternalEvidenceMetadata `json:"metadata,omitempty"`
|
|
1972
|
+
// URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
|
|
1973
|
+
// a relative path or absolute URL. The data stays canonical in its native format — HDF
|
|
1974
|
+
// references it, never parses or transcodes it.
|
|
1975
|
+
URI string `json:"uri"`
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1978
|
+
// Descriptive metadata about a referenced external evidence corpus. Does not affect integrity.
|
|
1979
|
+
type ExternalEvidenceMetadata struct {
|
|
1980
|
+
// The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
|
|
1981
|
+
// 'elastic-agent'.
|
|
1982
|
+
Collector *string `json:"collector,omitempty"`
|
|
1983
|
+
// Approximate number of records/events in the referenced corpus.
|
|
1984
|
+
RecordCount *int64 `json:"recordCount,omitempty"`
|
|
1985
|
+
// The time window the referenced evidence covers.
|
|
1986
|
+
TimeRange *ExternalEvidenceTimeRange `json:"timeRange,omitempty"`
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
// The time window a referenced external evidence corpus covers.
|
|
1990
|
+
type ExternalEvidenceTimeRange struct {
|
|
1991
|
+
// End of the time window the corpus covers (ISO 8601).
|
|
1992
|
+
End *time.Time `json:"end,omitempty"`
|
|
1993
|
+
// Start of the time window the corpus covers (ISO 8601).
|
|
1994
|
+
Start *time.Time `json:"start,omitempty"`
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1931
1997
|
// Comparison operator for evaluating the input value against observed values. Numeric:
|
|
1932
1998
|
// eq/ne/lt/le/gt/ge. String: eq/ne/contains/matches. Collection: in/notIn.
|
|
1933
1999
|
type ComparisonOperator string
|
|
@@ -1945,8 +2011,6 @@ const (
|
|
|
1945
2011
|
NotIn ComparisonOperator = "notIn"
|
|
1946
2012
|
)
|
|
1947
2013
|
|
|
1948
|
-
// The data type of this input.
|
|
1949
|
-
//
|
|
1950
2014
|
// The data type of the input value. Aligns with InSpec input types.
|
|
1951
2015
|
type InputType string
|
|
1952
2016
|
|
|
@@ -1959,12 +2023,12 @@ const (
|
|
|
1959
2023
|
String InputType = "String"
|
|
1960
2024
|
)
|
|
1961
2025
|
|
|
1962
|
-
//
|
|
1963
|
-
//
|
|
1964
|
-
// Supported cryptographic hash algorithms for checksums and integrity verification.
|
|
2026
|
+
// Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers
|
|
2027
|
+
// container-image and other artifact digests that use it.
|
|
1965
2028
|
type HashAlgorithm string
|
|
1966
2029
|
|
|
1967
2030
|
const (
|
|
2031
|
+
Blake3 HashAlgorithm = "blake3"
|
|
1968
2032
|
Sha256 HashAlgorithm = "sha256"
|
|
1969
2033
|
Sha384 HashAlgorithm = "sha384"
|
|
1970
2034
|
Sha512 HashAlgorithm = "sha512"
|
|
@@ -2017,15 +2081,9 @@ const (
|
|
|
2017
2081
|
Technical ControlType = "technical"
|
|
2018
2082
|
)
|
|
2019
2083
|
|
|
2020
|
-
// Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
2021
|
-
// 'none' or 'critical' bands; map accordingly when populating.
|
|
2022
|
-
//
|
|
2023
2084
|
// Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
|
|
2024
|
-
// medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
|
|
2025
|
-
//
|
|
2026
|
-
//
|
|
2027
|
-
// Qualitative severity band corresponding to computedScore. Same band convention as
|
|
2028
|
-
// baseSeverity.
|
|
2085
|
+
// medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum used on
|
|
2086
|
+
// Requirement_Core (which includes 'informational').
|
|
2029
2087
|
type CVSSSeverity string
|
|
2030
2088
|
|
|
2031
2089
|
const (
|
|
@@ -2047,29 +2105,19 @@ const (
|
|
|
2047
2105
|
The40 Version = "4.0"
|
|
2048
2106
|
)
|
|
2049
2107
|
|
|
2050
|
-
// The type of
|
|
2051
|
-
//
|
|
2052
|
-
//
|
|
2053
|
-
//
|
|
2054
|
-
//
|
|
2055
|
-
//
|
|
2056
|
-
//
|
|
2057
|
-
//
|
|
2058
|
-
//
|
|
2059
|
-
//
|
|
2060
|
-
//
|
|
2061
|
-
//
|
|
2062
|
-
//
|
|
2063
|
-
// 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
|
|
2064
|
-
// Adjustment); does not change pass/fail status, only impact via the impact field.
|
|
2065
|
-
// 'operationalRequirement': deviation required by operational constraints (FedRAMP
|
|
2066
|
-
// Operational Requirement); the finding cannot be remediated because the system requires
|
|
2067
|
-
// the affected functionality. Remains an open risk. Migration note: 'exception' was removed
|
|
2068
|
-
// in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
|
|
2069
|
-
//
|
|
2070
|
-
// The type of override applied to this requirement.
|
|
2071
|
-
//
|
|
2072
|
-
// The type of amendment.
|
|
2108
|
+
// The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk accepted
|
|
2109
|
+
// by Authorizing Official. 'attestation': manually verified by assessor. 'poam': remediation
|
|
2110
|
+
// tracked (no status change). 'inherited': control provided by another component or system.
|
|
2111
|
+
// 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the
|
|
2112
|
+
// check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE,
|
|
2113
|
+
// SCA), the flagged vulnerability does not apply to this system, so status is typically set to
|
|
2114
|
+
// 'notApplicable'. The disposition field on the requirement distinguishes false positives from
|
|
2115
|
+
// genuinely not-applicable findings. 'riskAdjustment': impact score adjusted based on environmental
|
|
2116
|
+
// context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact
|
|
2117
|
+
// field. 'operationalRequirement': deviation required by operational constraints (FedRAMP
|
|
2118
|
+
// Operational Requirement); the finding cannot be remediated because the system requires the
|
|
2119
|
+
// affected functionality. Remains an open risk. Migration note: 'exception' was removed in v3.1.0 —
|
|
2120
|
+
// use 'waiver' with status 'notApplicable' instead.
|
|
2073
2121
|
type OverrideType string
|
|
2074
2122
|
|
|
2075
2123
|
const (
|
|
@@ -2082,20 +2130,9 @@ const (
|
|
|
2082
2130
|
RiskAdjustment OverrideType = "riskAdjustment"
|
|
2083
2131
|
)
|
|
2084
2132
|
|
|
2085
|
-
// The
|
|
2086
|
-
//
|
|
2087
|
-
//
|
|
2088
|
-
//
|
|
2089
|
-
// The status of an individual test result. 'notApplicable' indicates the requirement does
|
|
2090
|
-
// not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
|
|
2091
|
-
// requires manual verification).
|
|
2092
|
-
//
|
|
2093
|
-
// The status of this test within the requirement. Example: 'failed'.
|
|
2094
|
-
//
|
|
2095
|
-
// The new status this override sets for the requirement. Optional when only impact is being
|
|
2096
|
-
// overridden.
|
|
2097
|
-
//
|
|
2098
|
-
// The new status this amendment sets. Optional when only impact is being overridden.
|
|
2133
|
+
// The status of an individual test result. 'notApplicable' indicates the requirement does not apply
|
|
2134
|
+
// to the target. 'notReviewed' indicates the requirement was not assessed (e.g., requires manual
|
|
2135
|
+
// verification).
|
|
2099
2136
|
type ResultStatus string
|
|
2100
2137
|
|
|
2101
2138
|
const (
|
|
@@ -2107,11 +2144,16 @@ const (
|
|
|
2107
2144
|
)
|
|
2108
2145
|
|
|
2109
2146
|
// The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
2110
|
-
// 'system' for
|
|
2111
|
-
//
|
|
2147
|
+
// 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
2148
|
+
// for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
2149
|
+
// apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
2150
|
+
// satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
2151
|
+
// 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
2152
|
+
// custom identity systems.
|
|
2112
2153
|
type IdentityType string
|
|
2113
2154
|
|
|
2114
2155
|
const (
|
|
2156
|
+
Agent IdentityType = "agent"
|
|
2115
2157
|
Email IdentityType = "email"
|
|
2116
2158
|
IdentityTypeOther IdentityType = "other"
|
|
2117
2159
|
IdentityTypeSystem IdentityType = "system"
|
|
@@ -2152,9 +2194,6 @@ const (
|
|
|
2152
2194
|
VendorDependency POAMType = "vendorDependency"
|
|
2153
2195
|
)
|
|
2154
2196
|
|
|
2155
|
-
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
2156
|
-
// clarity.
|
|
2157
|
-
//
|
|
2158
2197
|
// Severity rating for a requirement. Typically derived from the numeric impact score.
|
|
2159
2198
|
type Severity string
|
|
2160
2199
|
|
|
@@ -2166,28 +2205,21 @@ const (
|
|
|
2166
2205
|
SeverityMedium Severity = "medium"
|
|
2167
2206
|
)
|
|
2168
2207
|
|
|
2169
|
-
// Structured controlled-vocabulary
|
|
2170
|
-
//
|
|
2171
|
-
//
|
|
2172
|
-
//
|
|
2173
|
-
//
|
|
2174
|
-
//
|
|
2175
|
-
//
|
|
2176
|
-
//
|
|
2177
|
-
//
|
|
2178
|
-
//
|
|
2179
|
-
//
|
|
2180
|
-
//
|
|
2181
|
-
//
|
|
2182
|
-
//
|
|
2183
|
-
//
|
|
2184
|
-
// requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
|
|
2185
|
-
// / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
|
|
2186
|
-
// path is unreachable in the deployed configuration. The enum is extended additively across
|
|
2187
|
-
// schema versions as other ecosystems' controlled vocabularies are integrated; documents
|
|
2188
|
-
// using values added in a newer schema version will fail validation against an older
|
|
2189
|
-
// schema. Consumers SHOULD validate against the schema version declared by the document
|
|
2190
|
-
// ($schema) rather than assume a fixed vocabulary.
|
|
2208
|
+
// Structured controlled-vocabulary reason for an override, complementing the free-text 'reason'
|
|
2209
|
+
// field. 'reason' carries the human-readable rationale an auditor reads; 'justification' carries
|
|
2210
|
+
// the machine-readable category enabling filtering, aggregation, and lossless round-trip with
|
|
2211
|
+
// structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields may be present simultaneously and are
|
|
2212
|
+
// NOT redundant: 'reason' explains the specific circumstance; 'justification' classifies it.
|
|
2213
|
+
// Authors SHOULD populate both when a controlled-vocabulary value applies — the enum value alone is
|
|
2214
|
+
// not self-explanatory to an auditor. The vocabulary is drawn from the VEX ecosystem: the first
|
|
2215
|
+
// five values are common across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six
|
|
2216
|
+
// (requires_configuration / requires_dependency / requires_environment / protected_by_compiler /
|
|
2217
|
+
// protected_at_runtime / protected_at_perimeter) are CycloneDX-specific and describe why the
|
|
2218
|
+
// vulnerable code path is unreachable in the deployed configuration. The enum is extended
|
|
2219
|
+
// additively across schema versions as other ecosystems' controlled vocabularies are integrated;
|
|
2220
|
+
// documents using values added in a newer schema version will fail validation against an older
|
|
2221
|
+
// schema. Consumers SHOULD validate against the schema version declared by the document ($schema)
|
|
2222
|
+
// rather than assume a fixed vocabulary.
|
|
2191
2223
|
type Justification string
|
|
2192
2224
|
|
|
2193
2225
|
const (
|
|
@@ -2204,19 +2236,12 @@ const (
|
|
|
2204
2236
|
VulnerableCodeNotPresent Justification = "vulnerable_code_not_present"
|
|
2205
2237
|
)
|
|
2206
2238
|
|
|
2207
|
-
// How
|
|
2208
|
-
//
|
|
2209
|
-
//
|
|
2210
|
-
//
|
|
2211
|
-
//
|
|
2212
|
-
//
|
|
2213
|
-
//
|
|
2214
|
-
// How a requirement is intended to be verified. Disambiguates the two cases that null
|
|
2215
|
-
// 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
2216
|
-
// to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
2217
|
-
// exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
2218
|
-
// runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
|
|
2219
|
-
// disambiguate from the unrelated Verification_Method DID-context struct.
|
|
2239
|
+
// How a requirement is intended to be verified. Disambiguates the two cases that null 'code'
|
|
2240
|
+
// overloads: 'manual-by-design' (the requirement is statement-form and not amenable to automation,
|
|
2241
|
+
// e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could exist but does not yet,
|
|
2242
|
+
// e.g. a STIG rule lacking a fix). 'automated' = a check exists and runs without operator action;
|
|
2243
|
+
// 'hybrid' = part automated, part manual. Named '_Enum' to disambiguate from the unrelated
|
|
2244
|
+
// Verification_Method DID-context struct.
|
|
2220
2245
|
type VerificationMethodEnum string
|
|
2221
2246
|
|
|
2222
2247
|
const (
|
|
@@ -2226,6 +2251,29 @@ const (
|
|
|
2226
2251
|
VerificationMethodEnumHybrid VerificationMethodEnum = "hybrid"
|
|
2227
2252
|
)
|
|
2228
2253
|
|
|
2254
|
+
// Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
2255
|
+
// adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
2256
|
+
// (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
2257
|
+
type DatasetDerivationType string
|
|
2258
|
+
|
|
2259
|
+
const (
|
|
2260
|
+
Augmented DatasetDerivationType = "augmented"
|
|
2261
|
+
DatasetDerivationTypeMerged DatasetDerivationType = "merged"
|
|
2262
|
+
Filtered DatasetDerivationType = "filtered"
|
|
2263
|
+
Sampled DatasetDerivationType = "sampled"
|
|
2264
|
+
)
|
|
2265
|
+
|
|
2266
|
+
// Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
2267
|
+
// vocabulary (the only typed lineage enum in the ecosystem).
|
|
2268
|
+
type ModelAdaptationType string
|
|
2269
|
+
|
|
2270
|
+
const (
|
|
2271
|
+
Adapter ModelAdaptationType = "adapter"
|
|
2272
|
+
Finetune ModelAdaptationType = "finetune"
|
|
2273
|
+
Merge ModelAdaptationType = "merge"
|
|
2274
|
+
Quantized ModelAdaptationType = "quantized"
|
|
2275
|
+
)
|
|
2276
|
+
|
|
2229
2277
|
type CloudProvider string
|
|
2230
2278
|
|
|
2231
2279
|
const (
|
|
@@ -2236,18 +2284,12 @@ const (
|
|
|
2236
2284
|
Oci CloudProvider = "oci"
|
|
2237
2285
|
)
|
|
2238
2286
|
|
|
2239
|
-
//
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
const (
|
|
2243
|
-
Cyclonedx SBOMFormat = "cyclonedx"
|
|
2244
|
-
Spdx SBOMFormat = "spdx"
|
|
2245
|
-
)
|
|
2246
|
-
|
|
2247
|
-
// Component type discriminator. Same values as Target types.
|
|
2287
|
+
// Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
2288
|
+
// AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
2248
2289
|
type TargetType string
|
|
2249
2290
|
|
|
2250
2291
|
const (
|
|
2292
|
+
AIModel TargetType = "aiModel"
|
|
2251
2293
|
Application TargetType = "application"
|
|
2252
2294
|
Artifact TargetType = "artifact"
|
|
2253
2295
|
CloudAccount TargetType = "cloudAccount"
|
|
@@ -2256,13 +2298,12 @@ const (
|
|
|
2256
2298
|
ContainerInstance TargetType = "containerInstance"
|
|
2257
2299
|
ContainerPlatform TargetType = "containerPlatform"
|
|
2258
2300
|
Database TargetType = "database"
|
|
2301
|
+
Dataset TargetType = "dataset"
|
|
2259
2302
|
Host TargetType = "host"
|
|
2260
2303
|
Network TargetType = "network"
|
|
2261
2304
|
Repository TargetType = "repository"
|
|
2262
2305
|
)
|
|
2263
2306
|
|
|
2264
|
-
// The category of this annotation.
|
|
2265
|
-
//
|
|
2266
2307
|
// The category of an annotation attached to a comparison.
|
|
2267
2308
|
type AnnotationCategory string
|
|
2268
2309
|
|
|
@@ -2286,13 +2327,11 @@ const (
|
|
|
2286
2327
|
BaselineDiffStateUpdated BaselineDiffState = "updated"
|
|
2287
2328
|
)
|
|
2288
2329
|
|
|
2289
|
-
// The mode of comparison
|
|
2290
|
-
//
|
|
2291
|
-
//
|
|
2292
|
-
//
|
|
2293
|
-
//
|
|
2294
|
-
// baseline documents to detect requirement changes between versions. 'systemDrift' compares
|
|
2295
|
-
// two system documents to detect component-level changes.
|
|
2330
|
+
// The mode of comparison. 'temporal' compares the same target over time. 'baseline' compares
|
|
2331
|
+
// against a golden reference. 'fleet' compares across multiple systems. 'multiSource' compares
|
|
2332
|
+
// outputs from different scanners. 'baselineEvolution' compares two baseline documents to detect
|
|
2333
|
+
// requirement changes between versions. 'systemDrift' compares two system documents to detect
|
|
2334
|
+
// component-level changes.
|
|
2296
2335
|
type ComparisonMode string
|
|
2297
2336
|
|
|
2298
2337
|
const (
|
|
@@ -2331,8 +2370,6 @@ const (
|
|
|
2331
2370
|
TargetChanged ChangeReason = "targetChanged"
|
|
2332
2371
|
)
|
|
2333
2372
|
|
|
2334
|
-
// How the conflict was resolved.
|
|
2335
|
-
//
|
|
2336
2373
|
// How a conflict between multiple scanner results was resolved.
|
|
2337
2374
|
type ConflictResolution string
|
|
2338
2375
|
|
|
@@ -2343,13 +2380,9 @@ const (
|
|
|
2343
2380
|
Unresolved ConflictResolution = "unresolved"
|
|
2344
2381
|
)
|
|
2345
2382
|
|
|
2346
|
-
// The strategy
|
|
2347
|
-
//
|
|
2348
|
-
//
|
|
2349
|
-
// IDs. 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework
|
|
2350
|
-
// identifiers. 'fuzzyTitle'/'fuzzyContent' use text similarity.
|
|
2351
|
-
//
|
|
2352
|
-
// The primary strategy used to match requirements across sources.
|
|
2383
|
+
// The strategy used to match requirements across sources. 'exactId' matches by identical IDs.
|
|
2384
|
+
// 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework identifiers.
|
|
2385
|
+
// 'fuzzyTitle'/'fuzzyContent' use text similarity.
|
|
2353
2386
|
type MatchStrategy string
|
|
2354
2387
|
|
|
2355
2388
|
const (
|
|
@@ -2361,20 +2394,18 @@ const (
|
|
|
2361
2394
|
NISTMatch MatchStrategy = "nistMatch"
|
|
2362
2395
|
)
|
|
2363
2396
|
|
|
2364
|
-
//
|
|
2365
|
-
//
|
|
2366
|
-
//
|
|
2367
|
-
//
|
|
2368
|
-
// changed (generic), 'fixed' = was failing now passing, 'regressed' = was passing now
|
|
2369
|
-
// failing, 'moved' = reorganized same content, 'split'/'merged' = reserved for v1.1.
|
|
2397
|
+
// SARIF-compatible vocabulary extended for security. 'new' = present only in new source, 'absent' =
|
|
2398
|
+
// present only in old, 'unchanged' = same effective status, 'updated' = status changed (generic),
|
|
2399
|
+
// 'fixed' = was failing now passing, 'regressed' = was passing now failing, 'moved' = reorganized
|
|
2400
|
+
// same content, 'split'/'merged' = reserved for v1.1.
|
|
2370
2401
|
type RequirementState string
|
|
2371
2402
|
|
|
2372
2403
|
const (
|
|
2373
2404
|
Fixed RequirementState = "fixed"
|
|
2374
|
-
Merged RequirementState = "merged"
|
|
2375
2405
|
Moved RequirementState = "moved"
|
|
2376
2406
|
Regressed RequirementState = "regressed"
|
|
2377
2407
|
RequirementStateAbsent RequirementState = "absent"
|
|
2408
|
+
RequirementStateMerged RequirementState = "merged"
|
|
2378
2409
|
RequirementStateNew RequirementState = "new"
|
|
2379
2410
|
RequirementStateUnchanged RequirementState = "unchanged"
|
|
2380
2411
|
RequirementStateUpdated RequirementState = "updated"
|
|
@@ -2409,8 +2440,6 @@ const (
|
|
|
2409
2440
|
Xccdf OriginalFormat = "xccdf"
|
|
2410
2441
|
)
|
|
2411
2442
|
|
|
2412
|
-
// The role of this source in the comparison.
|
|
2413
|
-
//
|
|
2414
2443
|
// The role of a source document in the comparison.
|
|
2415
2444
|
type SourceRole string
|
|
2416
2445
|
|
|
@@ -2422,8 +2451,6 @@ const (
|
|
|
2422
2451
|
SourceRoleSystem SourceRole = "system"
|
|
2423
2452
|
)
|
|
2424
2453
|
|
|
2425
|
-
// Current Authorization to Operate (ATO) status.
|
|
2426
|
-
//
|
|
2427
2454
|
// Authorization to Operate (ATO) status for the system.
|
|
2428
2455
|
type AuthorizationStatus string
|
|
2429
2456
|
|
|
@@ -2436,8 +2463,6 @@ const (
|
|
|
2436
2463
|
Revoked AuthorizationStatus = "revoked"
|
|
2437
2464
|
)
|
|
2438
2465
|
|
|
2439
|
-
// FIPS 199 security categorization (impact level).
|
|
2440
|
-
//
|
|
2441
2466
|
// FIPS 199 security categorization level (impact level).
|
|
2442
2467
|
type CategorizationLevel string
|
|
2443
2468
|
|
|
@@ -2467,10 +2492,8 @@ const (
|
|
|
2467
2492
|
Unidirectional Direction = "unidirectional"
|
|
2468
2493
|
)
|
|
2469
2494
|
|
|
2470
|
-
// The type of assessment
|
|
2471
|
-
//
|
|
2472
|
-
// The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed,
|
|
2473
|
-
// 'hybrid' for both.
|
|
2495
|
+
// The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed, 'hybrid'
|
|
2496
|
+
// for both.
|
|
2474
2497
|
type PlanType string
|
|
2475
2498
|
|
|
2476
2499
|
const (
|
|
@@ -2479,19 +2502,20 @@ const (
|
|
|
2479
2502
|
PlanTypeManual PlanType = "manual"
|
|
2480
2503
|
)
|
|
2481
2504
|
|
|
2482
|
-
// The type of
|
|
2483
|
-
//
|
|
2484
|
-
//
|
|
2505
|
+
// The type of document referenced in the evidence package. 'bom' covers any
|
|
2506
|
+
// Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) — its
|
|
2507
|
+
// specific kind is carried by the referenced document's bomType, not by a per-kind Content_Type
|
|
2508
|
+
// value.
|
|
2485
2509
|
type ContentType string
|
|
2486
2510
|
|
|
2487
2511
|
const (
|
|
2512
|
+
BOM ContentType = "bom"
|
|
2488
2513
|
HdfAmendments ContentType = "hdf-amendments"
|
|
2489
2514
|
HdfBaseline ContentType = "hdf-baseline"
|
|
2490
2515
|
HdfComparison ContentType = "hdf-comparison"
|
|
2491
2516
|
HdfPlan ContentType = "hdf-plan"
|
|
2492
2517
|
HdfResults ContentType = "hdf-results"
|
|
2493
2518
|
HdfSystem ContentType = "hdf-system"
|
|
2494
|
-
Sbom ContentType = "sbom"
|
|
2495
2519
|
)
|
|
2496
2520
|
|
|
2497
2521
|
type Ref struct {
|
|
@@ -2514,6 +2538,33 @@ func (x *Ref) MarshalJSON() ([]byte, error) {
|
|
|
2514
2538
|
return marshalUnion(nil, nil, nil, x.String, x.AnythingMapArray != nil, x.AnythingMapArray, false, nil, false, nil, false, nil, false)
|
|
2515
2539
|
}
|
|
2516
2540
|
|
|
2541
|
+
// Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
2542
|
+
// image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
2543
|
+
// encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
2544
|
+
// physical format. String or array of strings.
|
|
2545
|
+
//
|
|
2546
|
+
// Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
2547
|
+
// Symmetric with Dataset_Extension.modality.
|
|
2548
|
+
type Modality struct {
|
|
2549
|
+
String *string
|
|
2550
|
+
StringArray []string
|
|
2551
|
+
}
|
|
2552
|
+
|
|
2553
|
+
func (x *Modality) UnmarshalJSON(data []byte) error {
|
|
2554
|
+
x.StringArray = nil
|
|
2555
|
+
object, err := unmarshalUnion(data, nil, nil, nil, &x.String, true, &x.StringArray, false, nil, false, nil, false, nil, false)
|
|
2556
|
+
if err != nil {
|
|
2557
|
+
return err
|
|
2558
|
+
}
|
|
2559
|
+
if object {
|
|
2560
|
+
}
|
|
2561
|
+
return nil
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2564
|
+
func (x *Modality) MarshalJSON() ([]byte, error) {
|
|
2565
|
+
return marshalUnion(nil, nil, nil, x.String, x.StringArray != nil, x.StringArray, false, nil, false, nil, false, nil, false)
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2517
2568
|
func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) {
|
|
2518
2569
|
if pi != nil {
|
|
2519
2570
|
*pi = nil
|