@mitre/hdf-schema 3.3.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/go/hdf.go +473 -117
- 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 +517 -52
- package/dist/ts/hdf.js +42 -14
- package/dist/ts/hdf.ts +526 -52
- package/package.json +2 -2
package/dist/ts/hdf.ts
CHANGED
|
@@ -383,9 +383,11 @@ export interface Integrity {
|
|
|
383
383
|
/**
|
|
384
384
|
* The hash algorithm used for the checksum.
|
|
385
385
|
*
|
|
386
|
-
* Supported cryptographic hash algorithms for checksums and integrity verification.
|
|
386
|
+
* Supported cryptographic hash algorithms for checksums and integrity verification. blake3
|
|
387
|
+
* covers container-image and other artifact digests that use it.
|
|
387
388
|
*/
|
|
388
389
|
export enum HashAlgorithm {
|
|
390
|
+
Blake3 = "blake3",
|
|
389
391
|
Sha256 = "sha256",
|
|
390
392
|
Sha384 = "sha384",
|
|
391
393
|
Sha512 = "sha512",
|
|
@@ -416,6 +418,8 @@ export enum HashAlgorithm {
|
|
|
416
418
|
* for the first amendment.
|
|
417
419
|
*
|
|
418
420
|
* Cryptographic checksum for verifying the referenced document's integrity.
|
|
421
|
+
*
|
|
422
|
+
* Cryptographic checksum of the referenced artifact for integrity verification.
|
|
419
423
|
*/
|
|
420
424
|
export interface Checksum {
|
|
421
425
|
/**
|
|
@@ -981,8 +985,12 @@ export interface Identity {
|
|
|
981
985
|
identifier: string;
|
|
982
986
|
/**
|
|
983
987
|
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
984
|
-
* 'system' for
|
|
985
|
-
*
|
|
988
|
+
* 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
989
|
+
* for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
990
|
+
* apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
991
|
+
* satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
992
|
+
* 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
993
|
+
* custom identity systems.
|
|
986
994
|
*/
|
|
987
995
|
type: IdentityType;
|
|
988
996
|
[property: string]: any;
|
|
@@ -990,10 +998,15 @@ export interface Identity {
|
|
|
990
998
|
|
|
991
999
|
/**
|
|
992
1000
|
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
993
|
-
* 'system' for
|
|
994
|
-
*
|
|
1001
|
+
* 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
1002
|
+
* for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
1003
|
+
* apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
1004
|
+
* satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
1005
|
+
* 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
1006
|
+
* custom identity systems.
|
|
995
1007
|
*/
|
|
996
1008
|
export enum IdentityType {
|
|
1009
|
+
Agent = "agent",
|
|
997
1010
|
Email = "email",
|
|
998
1011
|
Other = "other",
|
|
999
1012
|
Simple = "simple",
|
|
@@ -1499,9 +1512,11 @@ export interface SupportedPlatform {
|
|
|
1499
1512
|
* A physical or virtual server, workstation, or network device.
|
|
1500
1513
|
*
|
|
1501
1514
|
* Base properties shared by all component types. Extends the Target concept with stable
|
|
1502
|
-
* identity, external references, and
|
|
1515
|
+
* identity, external references, generalized BOM attachment (boms[]), and unified artifact
|
|
1516
|
+
* integrity (integrity[]).
|
|
1503
1517
|
*
|
|
1504
|
-
* A static container image (not running).
|
|
1518
|
+
* A static container image (not running). Image integrity — formerly the 'digest' field —
|
|
1519
|
+
* is expressed via the shared Base_Component.integrity array.
|
|
1505
1520
|
*
|
|
1506
1521
|
* A running container instance.
|
|
1507
1522
|
*
|
|
@@ -1515,17 +1530,33 @@ export interface SupportedPlatform {
|
|
|
1515
1530
|
*
|
|
1516
1531
|
* A running application or API (for DAST tools).
|
|
1517
1532
|
*
|
|
1518
|
-
* A software artifact or dependency (for SCA tools).
|
|
1533
|
+
* A software artifact or dependency (for SCA tools). Package integrity — formerly the
|
|
1534
|
+
* 'checksum' field — is expressed via the shared Base_Component.integrity array.
|
|
1519
1535
|
*
|
|
1520
1536
|
* A network segment or network device.
|
|
1521
1537
|
*
|
|
1522
1538
|
* A database instance.
|
|
1539
|
+
*
|
|
1540
|
+
* A thin AI-model component: identity and correlation only (parallel to Host_Component's
|
|
1541
|
+
* fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage
|
|
1542
|
+
* — lives in an attached ai-model BOM (boms[]), never on the component itself.
|
|
1543
|
+
*
|
|
1544
|
+
* A thin dataset component: identity and correlation only, symmetric with
|
|
1545
|
+
* AI_Model_Component. All dataset detail — record count, format, classification, lineage —
|
|
1546
|
+
* lives in an attached dataset BOM (boms[]), never on the component itself.
|
|
1523
1547
|
*/
|
|
1524
1548
|
export interface Component {
|
|
1525
1549
|
/**
|
|
1526
1550
|
* Names of baselines that apply to this component.
|
|
1527
1551
|
*/
|
|
1528
1552
|
baselineRefs?: string[];
|
|
1553
|
+
/**
|
|
1554
|
+
* Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
|
|
1555
|
+
* each carried by passthrough (ref/document) or normalized. Replaces the former
|
|
1556
|
+
* sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
|
|
1557
|
+
* ai-model BOM). See primitives/bom.schema.json.
|
|
1558
|
+
*/
|
|
1559
|
+
boms?: BillOfMaterials[];
|
|
1529
1560
|
/**
|
|
1530
1561
|
* Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
1531
1562
|
* hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
@@ -1545,6 +1576,15 @@ export interface Component {
|
|
|
1545
1576
|
* System-specific overrides for baseline input values.
|
|
1546
1577
|
*/
|
|
1547
1578
|
inputOverrides?: InputOverride[];
|
|
1579
|
+
/**
|
|
1580
|
+
* Cryptographic integrity of this component's underlying artifact — model weights or
|
|
1581
|
+
* shards, dataset archive, container image, or package bytes. An array supports
|
|
1582
|
+
* multi-file/sharded artifacts. This is the single, generic home for artifact/subject
|
|
1583
|
+
* integrity across all component types (it replaced the former per-type Container_Image
|
|
1584
|
+
* digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
|
|
1585
|
+
* and from the document tamper-evidence Integrity type.
|
|
1586
|
+
*/
|
|
1587
|
+
integrity?: Checksum[];
|
|
1548
1588
|
/**
|
|
1549
1589
|
* Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1550
1590
|
* environment, region, team. Values must be strings.
|
|
@@ -1559,33 +1599,37 @@ export interface Component {
|
|
|
1559
1599
|
* different teams manage different parts of a system.
|
|
1560
1600
|
*/
|
|
1561
1601
|
owner?: Identity;
|
|
1562
|
-
/**
|
|
1563
|
-
* Embedded CycloneDX or SPDX SBOM document representing this component's software
|
|
1564
|
-
* inventory. The sbomFormat field determines which format constraints apply.
|
|
1565
|
-
*/
|
|
1566
|
-
sbom?: any;
|
|
1567
|
-
/**
|
|
1568
|
-
* Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
1569
|
-
*/
|
|
1570
|
-
sbomFormat?: SBOMFormat;
|
|
1571
|
-
/**
|
|
1572
|
-
* URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
|
|
1573
|
-
* relative path, absolute URI, or fragment identifier.
|
|
1574
|
-
*/
|
|
1575
|
-
sbomRef?: string;
|
|
1576
1602
|
/**
|
|
1577
1603
|
* Label selector to match targets belonging to this component during migration. Targets
|
|
1578
1604
|
* with matching labels are automatically included.
|
|
1579
1605
|
*/
|
|
1580
1606
|
targetSelector?: { [key: string]: string };
|
|
1581
1607
|
/**
|
|
1582
|
-
* Component type discriminator. Same values as Target types
|
|
1608
|
+
* Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
1609
|
+
* AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
1583
1610
|
*/
|
|
1584
1611
|
type: TargetType;
|
|
1585
1612
|
/**
|
|
1586
|
-
*
|
|
1613
|
+
* Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
|
|
1614
|
+
* host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
|
|
1615
|
+
* workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
|
|
1616
|
+
* from a source that carries directory membership.
|
|
1617
|
+
*/
|
|
1618
|
+
domain?: string;
|
|
1619
|
+
/**
|
|
1620
|
+
* Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
|
|
1621
|
+
* (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
|
|
1622
|
+
* schema does not enforce case so source fidelity is preserved on round-trip.
|
|
1587
1623
|
*/
|
|
1588
1624
|
fqdn?: string;
|
|
1625
|
+
/**
|
|
1626
|
+
* Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
|
|
1627
|
+
* from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
|
|
1628
|
+
* (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
|
|
1629
|
+
* suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
|
|
1630
|
+
* the source reports; do not derive it from the FQDN.
|
|
1631
|
+
*/
|
|
1632
|
+
hostname?: string;
|
|
1589
1633
|
/**
|
|
1590
1634
|
* IP address of the host.
|
|
1591
1635
|
*/
|
|
@@ -1602,10 +1646,6 @@ export interface Component {
|
|
|
1602
1646
|
* Operating system version.
|
|
1603
1647
|
*/
|
|
1604
1648
|
osVersion?: string;
|
|
1605
|
-
/**
|
|
1606
|
-
* Image digest for immutable reference.
|
|
1607
|
-
*/
|
|
1608
|
-
digest?: string;
|
|
1609
1649
|
/**
|
|
1610
1650
|
* Container image ID.
|
|
1611
1651
|
*/
|
|
@@ -1654,6 +1694,11 @@ export interface Component {
|
|
|
1654
1694
|
* Package version.
|
|
1655
1695
|
*
|
|
1656
1696
|
* Database version.
|
|
1697
|
+
*
|
|
1698
|
+
* Model version, revision, or checkpoint tag.
|
|
1699
|
+
*
|
|
1700
|
+
* Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
|
|
1701
|
+
* release marker.
|
|
1657
1702
|
*/
|
|
1658
1703
|
version?: string;
|
|
1659
1704
|
/**
|
|
@@ -1700,10 +1745,6 @@ export interface Component {
|
|
|
1700
1745
|
* Environment. Example: 'production', 'staging', 'development'.
|
|
1701
1746
|
*/
|
|
1702
1747
|
environment?: string;
|
|
1703
|
-
/**
|
|
1704
|
-
* Package checksum for verification.
|
|
1705
|
-
*/
|
|
1706
|
-
checksum?: string;
|
|
1707
1748
|
/**
|
|
1708
1749
|
* Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
1709
1750
|
*/
|
|
@@ -1732,6 +1773,318 @@ export interface Component {
|
|
|
1732
1773
|
* Database port.
|
|
1733
1774
|
*/
|
|
1734
1775
|
port?: number;
|
|
1776
|
+
/**
|
|
1777
|
+
* Provider/registry identifier for the model. Examples: a Hugging Face repo id
|
|
1778
|
+
* ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
|
|
1779
|
+
* BOM(s) and to lineage references from other models.
|
|
1780
|
+
*/
|
|
1781
|
+
modelId?: string;
|
|
1782
|
+
/**
|
|
1783
|
+
* Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
|
|
1784
|
+
* ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
|
|
1785
|
+
* its dataset BOM(s) and to datasetRefs from ai-model components.
|
|
1786
|
+
*/
|
|
1787
|
+
datasetId?: string;
|
|
1788
|
+
[property: string]: any;
|
|
1789
|
+
}
|
|
1790
|
+
|
|
1791
|
+
export interface BillOfMaterials {
|
|
1792
|
+
/**
|
|
1793
|
+
* The manifest kind. Determines which normalized type-extension (model/dataset/packages)
|
|
1794
|
+
* may appear.
|
|
1795
|
+
*/
|
|
1796
|
+
bomType: string;
|
|
1797
|
+
/**
|
|
1798
|
+
* Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1799
|
+
*/
|
|
1800
|
+
dataset?: DatasetBOMExtension;
|
|
1801
|
+
/**
|
|
1802
|
+
* Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
|
|
1803
|
+
* SPDX object). HDF does not constrain its internal shape — full manifest validation is a
|
|
1804
|
+
* tool-level concern.
|
|
1805
|
+
*/
|
|
1806
|
+
document?: { [key: string]: any };
|
|
1807
|
+
/**
|
|
1808
|
+
* Source manifest format the BOM was produced from or references. Examples: cyclonedx,
|
|
1809
|
+
* cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
|
|
1810
|
+
* schema change; the converter that emits the BOM owns the value.
|
|
1811
|
+
*/
|
|
1812
|
+
format: string;
|
|
1813
|
+
/**
|
|
1814
|
+
* Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
|
|
1815
|
+
* NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
|
|
1816
|
+
* weights, dataset archive) is a component-level concern, not carried here. Subject
|
|
1817
|
+
* identity is inherited from the host component/system; per-node identity lives in the
|
|
1818
|
+
* type-extension.
|
|
1819
|
+
*/
|
|
1820
|
+
hashes?: Checksum[];
|
|
1821
|
+
/**
|
|
1822
|
+
* Optional license of the BOM document as a whole (SPDX license expression). Nullable and
|
|
1823
|
+
* often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
|
|
1824
|
+
* live in the type-extension, not here.
|
|
1825
|
+
*/
|
|
1826
|
+
license?: null | string;
|
|
1827
|
+
/**
|
|
1828
|
+
* Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1829
|
+
*/
|
|
1830
|
+
model?: AIModelBOMExtension;
|
|
1831
|
+
/**
|
|
1832
|
+
* Normalized sbom extension: the flattened software package inventory. Permitted only when
|
|
1833
|
+
* bomType is sbom.
|
|
1834
|
+
*/
|
|
1835
|
+
packages?: SBOMPackage[];
|
|
1836
|
+
/**
|
|
1837
|
+
* Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
|
|
1838
|
+
* manifest document. Present for externally-hosted BOMs.
|
|
1839
|
+
*/
|
|
1840
|
+
ref?: string;
|
|
1841
|
+
/**
|
|
1842
|
+
* Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
|
|
1843
|
+
* documentNamespace). Correlates the same BOM across evidence packages.
|
|
1844
|
+
*/
|
|
1845
|
+
uniqueId?: string;
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
/**
|
|
1849
|
+
* Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1850
|
+
*
|
|
1851
|
+
* Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All
|
|
1852
|
+
* optional; open for partial-fidelity passthrough of unmapped native fields. Symmetric with
|
|
1853
|
+
* AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just
|
|
1854
|
+
* as the model extension carries baseModelRef/adaptationType.
|
|
1855
|
+
*/
|
|
1856
|
+
export interface DatasetBOMExtension {
|
|
1857
|
+
/**
|
|
1858
|
+
* References to the source dataset(s) this one was derived from — a dataset componentId, or
|
|
1859
|
+
* a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
|
|
1860
|
+
* ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
|
|
1861
|
+
*/
|
|
1862
|
+
baseDatasetRefs?: string[];
|
|
1863
|
+
/**
|
|
1864
|
+
* Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
|
|
1865
|
+
* phi.
|
|
1866
|
+
*/
|
|
1867
|
+
dataClassification?: string;
|
|
1868
|
+
/**
|
|
1869
|
+
* Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
|
|
1870
|
+
*/
|
|
1871
|
+
datasetFormat?: string;
|
|
1872
|
+
/**
|
|
1873
|
+
* Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1874
|
+
* adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1875
|
+
* (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1876
|
+
*/
|
|
1877
|
+
derivation?: DatasetDerivationType;
|
|
1878
|
+
/**
|
|
1879
|
+
* Free-text statement of the dataset's intended use (CISA/G7 minimum element).
|
|
1880
|
+
*/
|
|
1881
|
+
intendedUse?: string;
|
|
1882
|
+
/**
|
|
1883
|
+
* Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
1884
|
+
* image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
1885
|
+
* encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
1886
|
+
* physical format. String or array of strings.
|
|
1887
|
+
*/
|
|
1888
|
+
modality?: string[] | string;
|
|
1889
|
+
/**
|
|
1890
|
+
* Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
|
|
1891
|
+
* provenance'; SPDX 3.0 dataset_dataCollectionProcess).
|
|
1892
|
+
*/
|
|
1893
|
+
provenance?: string;
|
|
1894
|
+
/**
|
|
1895
|
+
* Number of records/examples in the dataset.
|
|
1896
|
+
*/
|
|
1897
|
+
recordCount?: number;
|
|
1898
|
+
/**
|
|
1899
|
+
* Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
|
|
1900
|
+
* open-ended by design). Intentionally free-text and will remain so permanently:
|
|
1901
|
+
* recordCount is the one structured statistic, and restructuring this into an object later
|
|
1902
|
+
* would break existing consumers, so it stays a string (additive-only).
|
|
1903
|
+
*/
|
|
1904
|
+
statisticalProperties?: string;
|
|
1905
|
+
[property: string]: any;
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1908
|
+
/**
|
|
1909
|
+
* Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1910
|
+
* adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1911
|
+
* (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1912
|
+
*/
|
|
1913
|
+
export enum DatasetDerivationType {
|
|
1914
|
+
Augmented = "augmented",
|
|
1915
|
+
Filtered = "filtered",
|
|
1916
|
+
Merged = "merged",
|
|
1917
|
+
Sampled = "sampled",
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
/**
|
|
1921
|
+
* Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1922
|
+
*
|
|
1923
|
+
* Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All
|
|
1924
|
+
* fields optional (standards-correct; only the EU AI Act makes a subset binding for
|
|
1925
|
+
* high-risk/GPAI). Left open (additionalProperties: true) so a converter can carry unmapped
|
|
1926
|
+
* native fields opaquely (partial-fidelity pattern). Subject name/version are inherited
|
|
1927
|
+
* from the host aiModel component, not repeated here.
|
|
1928
|
+
*/
|
|
1929
|
+
export interface AIModelBOMExtension {
|
|
1930
|
+
/**
|
|
1931
|
+
* Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
1932
|
+
* vocabulary (the only typed lineage enum in the ecosystem).
|
|
1933
|
+
*/
|
|
1934
|
+
adaptationType?: ModelAdaptationType;
|
|
1935
|
+
/**
|
|
1936
|
+
* Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
|
|
1937
|
+
* purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
|
|
1938
|
+
*/
|
|
1939
|
+
baseModelRef?: string;
|
|
1940
|
+
/**
|
|
1941
|
+
* References to the training/evaluation datasets this model was produced from — preferably
|
|
1942
|
+
* a dataset component's componentId (correlating to a first-class dataset subject rather
|
|
1943
|
+
* than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
|
|
1944
|
+
* component exists.
|
|
1945
|
+
*/
|
|
1946
|
+
datasetRefs?: string[];
|
|
1947
|
+
/**
|
|
1948
|
+
* Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
|
|
1949
|
+
* is the set of training knobs, NOT the model's trainable parameterCount — the two are
|
|
1950
|
+
* routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
|
|
1951
|
+
* ai_hyperparameter.
|
|
1952
|
+
*/
|
|
1953
|
+
hyperparameters?: Hyperparameter[];
|
|
1954
|
+
/**
|
|
1955
|
+
* Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1956
|
+
* context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1957
|
+
* modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1958
|
+
*/
|
|
1959
|
+
inputOutput?: InputOutput;
|
|
1960
|
+
/**
|
|
1961
|
+
* Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
|
|
1962
|
+
*/
|
|
1963
|
+
intendedUse?: string;
|
|
1964
|
+
/**
|
|
1965
|
+
* Model's learning/training paradigm. Free-text because the value set varies across
|
|
1966
|
+
* standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
|
|
1967
|
+
* Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
|
|
1968
|
+
* modelParameters.approach.type ∩ CISA/G7 learning type.
|
|
1969
|
+
*/
|
|
1970
|
+
learningApproach?: string;
|
|
1971
|
+
/**
|
|
1972
|
+
* Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
|
|
1973
|
+
*/
|
|
1974
|
+
modelArchitecture?: string;
|
|
1975
|
+
/**
|
|
1976
|
+
* Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
|
|
1977
|
+
* because the EU AI Act keys GPAI obligations off model scale.
|
|
1978
|
+
*/
|
|
1979
|
+
parameterCount?: number;
|
|
1980
|
+
/**
|
|
1981
|
+
* Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
|
|
1982
|
+
* heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
|
|
1983
|
+
* true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
|
|
1984
|
+
* intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
|
|
1985
|
+
* CISA/G7 KPI cluster.
|
|
1986
|
+
*/
|
|
1987
|
+
performanceMetrics?: PerformanceMetric[];
|
|
1988
|
+
/**
|
|
1989
|
+
* On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
|
|
1990
|
+
* pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
|
|
1991
|
+
* safetensors, pytorch, gguf, onnx, tensorflow.
|
|
1992
|
+
*/
|
|
1993
|
+
serializationFormat?: string;
|
|
1994
|
+
/**
|
|
1995
|
+
* The ML task the model performs. Free-text. Examples: text-classification,
|
|
1996
|
+
* sentiment-analysis, object-detection, translation. Sourced from CycloneDX
|
|
1997
|
+
* modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
|
|
1998
|
+
* intended-application.
|
|
1999
|
+
*/
|
|
2000
|
+
task?: string;
|
|
2001
|
+
[property: string]: any;
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
/**
|
|
2005
|
+
* Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
2006
|
+
* vocabulary (the only typed lineage enum in the ecosystem).
|
|
2007
|
+
*/
|
|
2008
|
+
export enum ModelAdaptationType {
|
|
2009
|
+
Adapter = "adapter",
|
|
2010
|
+
Finetune = "finetune",
|
|
2011
|
+
Merge = "merge",
|
|
2012
|
+
Quantized = "quantized",
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
export interface Hyperparameter {
|
|
2016
|
+
/**
|
|
2017
|
+
* Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
|
|
2018
|
+
*/
|
|
2019
|
+
name?: string;
|
|
2020
|
+
/**
|
|
2021
|
+
* Hyper-parameter value (free-text).
|
|
2022
|
+
*/
|
|
2023
|
+
value?: string;
|
|
2024
|
+
[property: string]: any;
|
|
2025
|
+
}
|
|
2026
|
+
|
|
2027
|
+
/**
|
|
2028
|
+
* Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
2029
|
+
* context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
2030
|
+
* modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
2031
|
+
*/
|
|
2032
|
+
export interface InputOutput {
|
|
2033
|
+
/**
|
|
2034
|
+
* Maximum context/sequence length the model accepts, in tokens.
|
|
2035
|
+
*/
|
|
2036
|
+
contextLength?: number;
|
|
2037
|
+
/**
|
|
2038
|
+
* Input/output data types. Examples: string, byte[], float32, image.
|
|
2039
|
+
*/
|
|
2040
|
+
dataTypes?: string[];
|
|
2041
|
+
/**
|
|
2042
|
+
* Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
2043
|
+
* Symmetric with Dataset_Extension.modality.
|
|
2044
|
+
*/
|
|
2045
|
+
modality?: string[] | string;
|
|
2046
|
+
/**
|
|
2047
|
+
* Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
|
|
2048
|
+
*/
|
|
2049
|
+
tokenizer?: string;
|
|
2050
|
+
[property: string]: any;
|
|
2051
|
+
}
|
|
2052
|
+
|
|
2053
|
+
export interface PerformanceMetric {
|
|
2054
|
+
/**
|
|
2055
|
+
* Metric name. Examples: accuracy, f1, BLEU, latency.
|
|
2056
|
+
*/
|
|
2057
|
+
name?: string;
|
|
2058
|
+
/**
|
|
2059
|
+
* Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
|
|
2060
|
+
* milliseconds).
|
|
2061
|
+
*/
|
|
2062
|
+
value?: string;
|
|
2063
|
+
[property: string]: any;
|
|
2064
|
+
}
|
|
2065
|
+
|
|
2066
|
+
/**
|
|
2067
|
+
* A single normalized software package entry within an sbom BOM. Minimal identity + version
|
|
2068
|
+
* for querying/diffing; the full native record remains available via passthrough
|
|
2069
|
+
* (document/ref).
|
|
2070
|
+
*/
|
|
2071
|
+
export interface SBOMPackage {
|
|
2072
|
+
/**
|
|
2073
|
+
* SPDX license identifiers/expressions for this package.
|
|
2074
|
+
*/
|
|
2075
|
+
licenses?: string[];
|
|
2076
|
+
/**
|
|
2077
|
+
* Package name.
|
|
2078
|
+
*/
|
|
2079
|
+
name: string;
|
|
2080
|
+
/**
|
|
2081
|
+
* Package URL (purl) — the preferred cross-BOM identity key when present.
|
|
2082
|
+
*/
|
|
2083
|
+
purl?: string;
|
|
2084
|
+
/**
|
|
2085
|
+
* Package version.
|
|
2086
|
+
*/
|
|
2087
|
+
version?: string;
|
|
1735
2088
|
[property: string]: any;
|
|
1736
2089
|
}
|
|
1737
2090
|
|
|
@@ -1773,17 +2126,11 @@ export enum CloudProvider {
|
|
|
1773
2126
|
}
|
|
1774
2127
|
|
|
1775
2128
|
/**
|
|
1776
|
-
*
|
|
1777
|
-
|
|
1778
|
-
export enum SBOMFormat {
|
|
1779
|
-
Cyclonedx = "cyclonedx",
|
|
1780
|
-
Spdx = "spdx",
|
|
1781
|
-
}
|
|
1782
|
-
|
|
1783
|
-
/**
|
|
1784
|
-
* Component type discriminator. Same values as Target types.
|
|
2129
|
+
* Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
2130
|
+
* AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
1785
2131
|
*/
|
|
1786
2132
|
export enum TargetType {
|
|
2133
|
+
AIModel = "aiModel",
|
|
1787
2134
|
Application = "application",
|
|
1788
2135
|
Artifact = "artifact",
|
|
1789
2136
|
CloudAccount = "cloudAccount",
|
|
@@ -1792,6 +2139,7 @@ export enum TargetType {
|
|
|
1792
2139
|
ContainerInstance = "containerInstance",
|
|
1793
2140
|
ContainerPlatform = "containerPlatform",
|
|
1794
2141
|
Database = "database",
|
|
2142
|
+
Dataset = "dataset",
|
|
1795
2143
|
Host = "host",
|
|
1796
2144
|
Network = "network",
|
|
1797
2145
|
Repository = "repository",
|
|
@@ -1875,7 +2223,18 @@ export interface Runner {
|
|
|
1875
2223
|
*/
|
|
1876
2224
|
containerImage?: string;
|
|
1877
2225
|
/**
|
|
1878
|
-
* The
|
|
2226
|
+
* The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
|
|
2227
|
+
* NOT the DNS suffix of the FQDN. Example: 'CORP'.
|
|
2228
|
+
*/
|
|
2229
|
+
domain?: string;
|
|
2230
|
+
/**
|
|
2231
|
+
* The fully qualified domain name of the runner system, when known. Distinct from the short
|
|
2232
|
+
* 'hostname'; kept separate for the same reason as on host components (an FQDN is not
|
|
2233
|
+
* reliably decomposable). Example: 'ci-runner-01.build.example.com'.
|
|
2234
|
+
*/
|
|
2235
|
+
fqdn?: string;
|
|
2236
|
+
/**
|
|
2237
|
+
* The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1879
2238
|
* 'k8s-node-worker-03'.
|
|
1880
2239
|
*/
|
|
1881
2240
|
hostname?: string;
|
|
@@ -2175,7 +2534,8 @@ export interface HDFComparison {
|
|
|
2175
2534
|
*/
|
|
2176
2535
|
comparisonMode: ComparisonMode;
|
|
2177
2536
|
/**
|
|
2178
|
-
* Comparison of components between two system documents. Used in systemDrift mode.
|
|
2537
|
+
* Comparison of components between two system documents. Used in systemDrift mode. A
|
|
2538
|
+
* component's BOM changes surface as a field change on its boms[] here.
|
|
2179
2539
|
*/
|
|
2180
2540
|
componentDiffs?: ComponentDiff[];
|
|
2181
2541
|
/**
|
|
@@ -2203,7 +2563,11 @@ export interface HDFComparison {
|
|
|
2203
2563
|
*/
|
|
2204
2564
|
matching?: MatchingConfig;
|
|
2205
2565
|
/**
|
|
2206
|
-
*
|
|
2566
|
+
* RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
|
|
2567
|
+
* component's BOM changes as a field change on its boms[] (see componentDiffs), and
|
|
2568
|
+
* standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
|
|
2569
|
+
* field is retained for a future normalized package-level diff; consumers must not expect
|
|
2570
|
+
* it from today's systemDrift output.
|
|
2207
2571
|
*/
|
|
2208
2572
|
packageDiffs?: PackageDiff[];
|
|
2209
2573
|
/**
|
|
@@ -2615,15 +2979,22 @@ export interface MatchingConfig {
|
|
|
2615
2979
|
}
|
|
2616
2980
|
|
|
2617
2981
|
/**
|
|
2618
|
-
* Comparison of a single
|
|
2982
|
+
* Comparison of a single BOM node between two BOM versions, matched by purl (software) or
|
|
2983
|
+
* identifier (models, datasets, hardware, crypto).
|
|
2619
2984
|
*/
|
|
2620
2985
|
export interface PackageDiff {
|
|
2986
|
+
/**
|
|
2987
|
+
* Generic identity key for matching a BOM node across versions when no purl applies — e.g.
|
|
2988
|
+
* a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
|
|
2989
|
+
* number. At least one of purl or identifier is required.
|
|
2990
|
+
*/
|
|
2991
|
+
identifier?: string;
|
|
2621
2992
|
/**
|
|
2622
2993
|
* License identifiers for this package.
|
|
2623
2994
|
*/
|
|
2624
2995
|
licenses?: string[];
|
|
2625
2996
|
/**
|
|
2626
|
-
* Human-readable
|
|
2997
|
+
* Human-readable node name.
|
|
2627
2998
|
*/
|
|
2628
2999
|
name?: string;
|
|
2629
3000
|
/**
|
|
@@ -2635,9 +3006,11 @@ export interface PackageDiff {
|
|
|
2635
3006
|
*/
|
|
2636
3007
|
oldVersion?: string;
|
|
2637
3008
|
/**
|
|
2638
|
-
* Package URL (purl)
|
|
3009
|
+
* Package URL (purl) — the preferred identity key for matching software packages across
|
|
3010
|
+
* BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
|
|
3011
|
+
* algorithms) key on identifier instead.
|
|
2639
3012
|
*/
|
|
2640
|
-
purl
|
|
3013
|
+
purl?: string;
|
|
2641
3014
|
/**
|
|
2642
3015
|
* The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
2643
3016
|
* updated (version changed), unchanged.
|
|
@@ -2938,6 +3311,13 @@ export interface HDFSystem {
|
|
|
2938
3311
|
* Current Authorization to Operate (ATO) status.
|
|
2939
3312
|
*/
|
|
2940
3313
|
authorizationStatus?: AuthorizationStatus;
|
|
3314
|
+
/**
|
|
3315
|
+
* System-scoped Bills of Materials whose subject is the authorization boundary rather than
|
|
3316
|
+
* a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
|
|
3317
|
+
* Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
|
|
3318
|
+
* primitives/bom.schema.json.
|
|
3319
|
+
*/
|
|
3320
|
+
boms?: BillOfMaterials[];
|
|
2941
3321
|
/**
|
|
2942
3322
|
* Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
2943
3323
|
* VPC IDs, physical locations.
|
|
@@ -2949,7 +3329,8 @@ export interface HDFSystem {
|
|
|
2949
3329
|
categorizationLevel?: CategorizationLevel;
|
|
2950
3330
|
/**
|
|
2951
3331
|
* System components within the authorization boundary. Uses the full polymorphic Component
|
|
2952
|
-
* type with stable identity (componentId), external references, and
|
|
3332
|
+
* type with stable identity (componentId), external references, and generalized BOM
|
|
3333
|
+
* attachment (boms[]).
|
|
2953
3334
|
*/
|
|
2954
3335
|
components: Component[];
|
|
2955
3336
|
/**
|
|
@@ -3476,6 +3857,13 @@ export interface HDFEvidencePackage {
|
|
|
3476
3857
|
* Description of the evidence package's purpose and scope.
|
|
3477
3858
|
*/
|
|
3478
3859
|
description?: string;
|
|
3860
|
+
/**
|
|
3861
|
+
* References to external native-format evidence (log/telemetry corpora and other artifacts)
|
|
3862
|
+
* carried by URI + integrity hash + format discriminator, without recreating the data
|
|
3863
|
+
* inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
|
|
3864
|
+
* here rather than transcoding them.
|
|
3865
|
+
*/
|
|
3866
|
+
externalEvidence?: ExternalEvidenceReference[];
|
|
3479
3867
|
/**
|
|
3480
3868
|
* Information about the tool that generated this document.
|
|
3481
3869
|
*/
|
|
@@ -3580,7 +3968,7 @@ export interface SBOMCoverage {
|
|
|
3580
3968
|
}
|
|
3581
3969
|
|
|
3582
3970
|
/**
|
|
3583
|
-
* A reference to an HDF document or
|
|
3971
|
+
* A reference to an HDF document or BOM/manifest included in the evidence package.
|
|
3584
3972
|
*/
|
|
3585
3973
|
export interface ContentReference {
|
|
3586
3974
|
/**
|
|
@@ -3610,14 +3998,100 @@ export interface ContentReference {
|
|
|
3610
3998
|
/**
|
|
3611
3999
|
* The type of HDF document being referenced.
|
|
3612
4000
|
*
|
|
3613
|
-
* The type of document referenced in the evidence package.
|
|
4001
|
+
* The type of document referenced in the evidence package. 'bom' covers any
|
|
4002
|
+
* Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) —
|
|
4003
|
+
* its specific kind is carried by the referenced document's bomType, not by a per-kind
|
|
4004
|
+
* Content_Type value.
|
|
3614
4005
|
*/
|
|
3615
4006
|
export enum ContentType {
|
|
4007
|
+
BOM = "bom",
|
|
3616
4008
|
HdfAmendments = "hdf-amendments",
|
|
3617
4009
|
HdfBaseline = "hdf-baseline",
|
|
3618
4010
|
HdfComparison = "hdf-comparison",
|
|
3619
4011
|
HdfPlan = "hdf-plan",
|
|
3620
4012
|
HdfResults = "hdf-results",
|
|
3621
4013
|
HdfSystem = "hdf-system",
|
|
3622
|
-
|
|
4014
|
+
}
|
|
4015
|
+
|
|
4016
|
+
/**
|
|
4017
|
+
* A reference to external native-format evidence (log/telemetry corpus or other artifact)
|
|
4018
|
+
* carried by URI + integrity hash + format discriminator. Reference-only: the artifact is
|
|
4019
|
+
* never embedded (corpora can be huge) or transcoded (that would be lossy) — it stays
|
|
4020
|
+
* canonical in its native format and HDF acts as the structured index.
|
|
4021
|
+
*/
|
|
4022
|
+
export interface ExternalEvidenceReference {
|
|
4023
|
+
/**
|
|
4024
|
+
* Cryptographic checksum of the referenced artifact for integrity verification.
|
|
4025
|
+
*/
|
|
4026
|
+
checksum?: Checksum;
|
|
4027
|
+
/**
|
|
4028
|
+
* Optional human-readable description of this evidence entry.
|
|
4029
|
+
*/
|
|
4030
|
+
description?: string;
|
|
4031
|
+
/**
|
|
4032
|
+
* The native format discriminator of the referenced artifact.
|
|
4033
|
+
*/
|
|
4034
|
+
format: string;
|
|
4035
|
+
/**
|
|
4036
|
+
* Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
|
|
4037
|
+
* Free-text and untrusted — HDF does not validate it against a registry.
|
|
4038
|
+
*/
|
|
4039
|
+
formatVersion?: string;
|
|
4040
|
+
/**
|
|
4041
|
+
* Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
|
|
4042
|
+
* (the semantic standard). Examples: application/x-ndjson, application/json,
|
|
4043
|
+
* application/vnd.apache.parquet, text/csv.
|
|
4044
|
+
*/
|
|
4045
|
+
mediaType?: string;
|
|
4046
|
+
/**
|
|
4047
|
+
* Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
4048
|
+
*/
|
|
4049
|
+
metadata?: ExternalEvidenceMetadata;
|
|
4050
|
+
/**
|
|
4051
|
+
* URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
|
|
4052
|
+
* a relative path or absolute URL. The data stays canonical in its native format — HDF
|
|
4053
|
+
* references it, never parses or transcodes it.
|
|
4054
|
+
*/
|
|
4055
|
+
uri: string;
|
|
4056
|
+
[property: string]: any;
|
|
4057
|
+
}
|
|
4058
|
+
|
|
4059
|
+
/**
|
|
4060
|
+
* Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
4061
|
+
*
|
|
4062
|
+
* Descriptive metadata about a referenced external evidence corpus. Does not affect
|
|
4063
|
+
* integrity.
|
|
4064
|
+
*/
|
|
4065
|
+
export interface ExternalEvidenceMetadata {
|
|
4066
|
+
/**
|
|
4067
|
+
* The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
|
|
4068
|
+
* 'elastic-agent'.
|
|
4069
|
+
*/
|
|
4070
|
+
collector?: string;
|
|
4071
|
+
/**
|
|
4072
|
+
* Approximate number of records/events in the referenced corpus.
|
|
4073
|
+
*/
|
|
4074
|
+
recordCount?: number;
|
|
4075
|
+
/**
|
|
4076
|
+
* The time window the referenced evidence covers.
|
|
4077
|
+
*/
|
|
4078
|
+
timeRange?: ExternalEvidenceTimeRange;
|
|
4079
|
+
[property: string]: any;
|
|
4080
|
+
}
|
|
4081
|
+
|
|
4082
|
+
/**
|
|
4083
|
+
* The time window the referenced evidence covers.
|
|
4084
|
+
*
|
|
4085
|
+
* The time window a referenced external evidence corpus covers.
|
|
4086
|
+
*/
|
|
4087
|
+
export interface ExternalEvidenceTimeRange {
|
|
4088
|
+
/**
|
|
4089
|
+
* End of the time window the corpus covers (ISO 8601).
|
|
4090
|
+
*/
|
|
4091
|
+
end?: Date;
|
|
4092
|
+
/**
|
|
4093
|
+
* Start of the time window the corpus covers (ISO 8601).
|
|
4094
|
+
*/
|
|
4095
|
+
start?: Date;
|
|
4096
|
+
[property: string]: any;
|
|
3623
4097
|
}
|