@mitre/hdf-schema 3.3.1 → 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.d.ts
CHANGED
|
@@ -380,9 +380,11 @@ export interface Integrity {
|
|
|
380
380
|
/**
|
|
381
381
|
* The hash algorithm used for the checksum.
|
|
382
382
|
*
|
|
383
|
-
* Supported cryptographic hash algorithms for checksums and integrity verification.
|
|
383
|
+
* Supported cryptographic hash algorithms for checksums and integrity verification. blake3
|
|
384
|
+
* covers container-image and other artifact digests that use it.
|
|
384
385
|
*/
|
|
385
386
|
export declare enum HashAlgorithm {
|
|
387
|
+
Blake3 = "blake3",
|
|
386
388
|
Sha256 = "sha256",
|
|
387
389
|
Sha384 = "sha384",
|
|
388
390
|
Sha512 = "sha512"
|
|
@@ -412,6 +414,8 @@ export declare enum HashAlgorithm {
|
|
|
412
414
|
* for the first amendment.
|
|
413
415
|
*
|
|
414
416
|
* Cryptographic checksum for verifying the referenced document's integrity.
|
|
417
|
+
*
|
|
418
|
+
* Cryptographic checksum of the referenced artifact for integrity verification.
|
|
415
419
|
*/
|
|
416
420
|
export interface Checksum {
|
|
417
421
|
/**
|
|
@@ -965,18 +969,27 @@ export interface Identity {
|
|
|
965
969
|
identifier: string;
|
|
966
970
|
/**
|
|
967
971
|
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
968
|
-
* 'system' for
|
|
969
|
-
*
|
|
972
|
+
* 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
973
|
+
* for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
974
|
+
* apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
975
|
+
* satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
976
|
+
* 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
977
|
+
* custom identity systems.
|
|
970
978
|
*/
|
|
971
979
|
type: IdentityType;
|
|
972
980
|
[property: string]: any;
|
|
973
981
|
}
|
|
974
982
|
/**
|
|
975
983
|
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
976
|
-
* 'system' for
|
|
977
|
-
*
|
|
984
|
+
* 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
|
|
985
|
+
* for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
|
|
986
|
+
* apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
|
|
987
|
+
* satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
|
|
988
|
+
* 'simple' for basic string identifiers without additional classification, or 'other' for
|
|
989
|
+
* custom identity systems.
|
|
978
990
|
*/
|
|
979
991
|
export declare enum IdentityType {
|
|
992
|
+
Agent = "agent",
|
|
980
993
|
Email = "email",
|
|
981
994
|
Other = "other",
|
|
982
995
|
Simple = "simple",
|
|
@@ -1468,9 +1481,11 @@ export interface SupportedPlatform {
|
|
|
1468
1481
|
* A physical or virtual server, workstation, or network device.
|
|
1469
1482
|
*
|
|
1470
1483
|
* Base properties shared by all component types. Extends the Target concept with stable
|
|
1471
|
-
* identity, external references, and
|
|
1484
|
+
* identity, external references, generalized BOM attachment (boms[]), and unified artifact
|
|
1485
|
+
* integrity (integrity[]).
|
|
1472
1486
|
*
|
|
1473
|
-
* A static container image (not running).
|
|
1487
|
+
* A static container image (not running). Image integrity — formerly the 'digest' field —
|
|
1488
|
+
* is expressed via the shared Base_Component.integrity array.
|
|
1474
1489
|
*
|
|
1475
1490
|
* A running container instance.
|
|
1476
1491
|
*
|
|
@@ -1484,17 +1499,33 @@ export interface SupportedPlatform {
|
|
|
1484
1499
|
*
|
|
1485
1500
|
* A running application or API (for DAST tools).
|
|
1486
1501
|
*
|
|
1487
|
-
* A software artifact or dependency (for SCA tools).
|
|
1502
|
+
* A software artifact or dependency (for SCA tools). Package integrity — formerly the
|
|
1503
|
+
* 'checksum' field — is expressed via the shared Base_Component.integrity array.
|
|
1488
1504
|
*
|
|
1489
1505
|
* A network segment or network device.
|
|
1490
1506
|
*
|
|
1491
1507
|
* A database instance.
|
|
1508
|
+
*
|
|
1509
|
+
* A thin AI-model component: identity and correlation only (parallel to Host_Component's
|
|
1510
|
+
* fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage
|
|
1511
|
+
* — lives in an attached ai-model BOM (boms[]), never on the component itself.
|
|
1512
|
+
*
|
|
1513
|
+
* A thin dataset component: identity and correlation only, symmetric with
|
|
1514
|
+
* AI_Model_Component. All dataset detail — record count, format, classification, lineage —
|
|
1515
|
+
* lives in an attached dataset BOM (boms[]), never on the component itself.
|
|
1492
1516
|
*/
|
|
1493
1517
|
export interface Component {
|
|
1494
1518
|
/**
|
|
1495
1519
|
* Names of baselines that apply to this component.
|
|
1496
1520
|
*/
|
|
1497
1521
|
baselineRefs?: string[];
|
|
1522
|
+
/**
|
|
1523
|
+
* Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
|
|
1524
|
+
* each carried by passthrough (ref/document) or normalized. Replaces the former
|
|
1525
|
+
* sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
|
|
1526
|
+
* ai-model BOM). See primitives/bom.schema.json.
|
|
1527
|
+
*/
|
|
1528
|
+
boms?: BillOfMaterials[];
|
|
1498
1529
|
/**
|
|
1499
1530
|
* Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
1500
1531
|
* hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
@@ -1516,6 +1547,15 @@ export interface Component {
|
|
|
1516
1547
|
* System-specific overrides for baseline input values.
|
|
1517
1548
|
*/
|
|
1518
1549
|
inputOverrides?: InputOverride[];
|
|
1550
|
+
/**
|
|
1551
|
+
* Cryptographic integrity of this component's underlying artifact — model weights or
|
|
1552
|
+
* shards, dataset archive, container image, or package bytes. An array supports
|
|
1553
|
+
* multi-file/sharded artifacts. This is the single, generic home for artifact/subject
|
|
1554
|
+
* integrity across all component types (it replaced the former per-type Container_Image
|
|
1555
|
+
* digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
|
|
1556
|
+
* and from the document tamper-evidence Integrity type.
|
|
1557
|
+
*/
|
|
1558
|
+
integrity?: Checksum[];
|
|
1519
1559
|
/**
|
|
1520
1560
|
* Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1521
1561
|
* environment, region, team. Values must be strings.
|
|
@@ -1532,20 +1572,6 @@ export interface Component {
|
|
|
1532
1572
|
* different teams manage different parts of a system.
|
|
1533
1573
|
*/
|
|
1534
1574
|
owner?: Identity;
|
|
1535
|
-
/**
|
|
1536
|
-
* Embedded CycloneDX or SPDX SBOM document representing this component's software
|
|
1537
|
-
* inventory. The sbomFormat field determines which format constraints apply.
|
|
1538
|
-
*/
|
|
1539
|
-
sbom?: any;
|
|
1540
|
-
/**
|
|
1541
|
-
* Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
1542
|
-
*/
|
|
1543
|
-
sbomFormat?: SBOMFormat;
|
|
1544
|
-
/**
|
|
1545
|
-
* URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
|
|
1546
|
-
* relative path, absolute URI, or fragment identifier.
|
|
1547
|
-
*/
|
|
1548
|
-
sbomRef?: string;
|
|
1549
1575
|
/**
|
|
1550
1576
|
* Label selector to match targets belonging to this component during migration. Targets
|
|
1551
1577
|
* with matching labels are automatically included.
|
|
@@ -1554,13 +1580,31 @@ export interface Component {
|
|
|
1554
1580
|
[key: string]: string;
|
|
1555
1581
|
};
|
|
1556
1582
|
/**
|
|
1557
|
-
* Component type discriminator. Same values as Target types
|
|
1583
|
+
* Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
1584
|
+
* AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
1558
1585
|
*/
|
|
1559
1586
|
type: TargetType;
|
|
1560
1587
|
/**
|
|
1561
|
-
*
|
|
1588
|
+
* Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
|
|
1589
|
+
* host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
|
|
1590
|
+
* workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
|
|
1591
|
+
* from a source that carries directory membership.
|
|
1592
|
+
*/
|
|
1593
|
+
domain?: string;
|
|
1594
|
+
/**
|
|
1595
|
+
* Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
|
|
1596
|
+
* (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
|
|
1597
|
+
* schema does not enforce case so source fidelity is preserved on round-trip.
|
|
1562
1598
|
*/
|
|
1563
1599
|
fqdn?: string;
|
|
1600
|
+
/**
|
|
1601
|
+
* Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
|
|
1602
|
+
* from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
|
|
1603
|
+
* (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
|
|
1604
|
+
* suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
|
|
1605
|
+
* the source reports; do not derive it from the FQDN.
|
|
1606
|
+
*/
|
|
1607
|
+
hostname?: string;
|
|
1564
1608
|
/**
|
|
1565
1609
|
* IP address of the host.
|
|
1566
1610
|
*/
|
|
@@ -1577,10 +1621,6 @@ export interface Component {
|
|
|
1577
1621
|
* Operating system version.
|
|
1578
1622
|
*/
|
|
1579
1623
|
osVersion?: string;
|
|
1580
|
-
/**
|
|
1581
|
-
* Image digest for immutable reference.
|
|
1582
|
-
*/
|
|
1583
|
-
digest?: string;
|
|
1584
1624
|
/**
|
|
1585
1625
|
* Container image ID.
|
|
1586
1626
|
*/
|
|
@@ -1629,6 +1669,11 @@ export interface Component {
|
|
|
1629
1669
|
* Package version.
|
|
1630
1670
|
*
|
|
1631
1671
|
* Database version.
|
|
1672
|
+
*
|
|
1673
|
+
* Model version, revision, or checkpoint tag.
|
|
1674
|
+
*
|
|
1675
|
+
* Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
|
|
1676
|
+
* release marker.
|
|
1632
1677
|
*/
|
|
1633
1678
|
version?: string;
|
|
1634
1679
|
/**
|
|
@@ -1675,10 +1720,6 @@ export interface Component {
|
|
|
1675
1720
|
* Environment. Example: 'production', 'staging', 'development'.
|
|
1676
1721
|
*/
|
|
1677
1722
|
environment?: string;
|
|
1678
|
-
/**
|
|
1679
|
-
* Package checksum for verification.
|
|
1680
|
-
*/
|
|
1681
|
-
checksum?: string;
|
|
1682
1723
|
/**
|
|
1683
1724
|
* Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
1684
1725
|
*/
|
|
@@ -1707,6 +1748,311 @@ export interface Component {
|
|
|
1707
1748
|
* Database port.
|
|
1708
1749
|
*/
|
|
1709
1750
|
port?: number;
|
|
1751
|
+
/**
|
|
1752
|
+
* Provider/registry identifier for the model. Examples: a Hugging Face repo id
|
|
1753
|
+
* ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
|
|
1754
|
+
* BOM(s) and to lineage references from other models.
|
|
1755
|
+
*/
|
|
1756
|
+
modelId?: string;
|
|
1757
|
+
/**
|
|
1758
|
+
* Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
|
|
1759
|
+
* ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
|
|
1760
|
+
* its dataset BOM(s) and to datasetRefs from ai-model components.
|
|
1761
|
+
*/
|
|
1762
|
+
datasetId?: string;
|
|
1763
|
+
[property: string]: any;
|
|
1764
|
+
}
|
|
1765
|
+
export interface BillOfMaterials {
|
|
1766
|
+
/**
|
|
1767
|
+
* The manifest kind. Determines which normalized type-extension (model/dataset/packages)
|
|
1768
|
+
* may appear.
|
|
1769
|
+
*/
|
|
1770
|
+
bomType: string;
|
|
1771
|
+
/**
|
|
1772
|
+
* Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1773
|
+
*/
|
|
1774
|
+
dataset?: DatasetBOMExtension;
|
|
1775
|
+
/**
|
|
1776
|
+
* Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
|
|
1777
|
+
* SPDX object). HDF does not constrain its internal shape — full manifest validation is a
|
|
1778
|
+
* tool-level concern.
|
|
1779
|
+
*/
|
|
1780
|
+
document?: {
|
|
1781
|
+
[key: string]: any;
|
|
1782
|
+
};
|
|
1783
|
+
/**
|
|
1784
|
+
* Source manifest format the BOM was produced from or references. Examples: cyclonedx,
|
|
1785
|
+
* cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
|
|
1786
|
+
* schema change; the converter that emits the BOM owns the value.
|
|
1787
|
+
*/
|
|
1788
|
+
format: string;
|
|
1789
|
+
/**
|
|
1790
|
+
* Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
|
|
1791
|
+
* NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
|
|
1792
|
+
* weights, dataset archive) is a component-level concern, not carried here. Subject
|
|
1793
|
+
* identity is inherited from the host component/system; per-node identity lives in the
|
|
1794
|
+
* type-extension.
|
|
1795
|
+
*/
|
|
1796
|
+
hashes?: Checksum[];
|
|
1797
|
+
/**
|
|
1798
|
+
* Optional license of the BOM document as a whole (SPDX license expression). Nullable and
|
|
1799
|
+
* often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
|
|
1800
|
+
* live in the type-extension, not here.
|
|
1801
|
+
*/
|
|
1802
|
+
license?: null | string;
|
|
1803
|
+
/**
|
|
1804
|
+
* Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1805
|
+
*/
|
|
1806
|
+
model?: AIModelBOMExtension;
|
|
1807
|
+
/**
|
|
1808
|
+
* Normalized sbom extension: the flattened software package inventory. Permitted only when
|
|
1809
|
+
* bomType is sbom.
|
|
1810
|
+
*/
|
|
1811
|
+
packages?: SBOMPackage[];
|
|
1812
|
+
/**
|
|
1813
|
+
* Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
|
|
1814
|
+
* manifest document. Present for externally-hosted BOMs.
|
|
1815
|
+
*/
|
|
1816
|
+
ref?: string;
|
|
1817
|
+
/**
|
|
1818
|
+
* Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
|
|
1819
|
+
* documentNamespace). Correlates the same BOM across evidence packages.
|
|
1820
|
+
*/
|
|
1821
|
+
uniqueId?: string;
|
|
1822
|
+
}
|
|
1823
|
+
/**
|
|
1824
|
+
* Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1825
|
+
*
|
|
1826
|
+
* Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All
|
|
1827
|
+
* optional; open for partial-fidelity passthrough of unmapped native fields. Symmetric with
|
|
1828
|
+
* AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just
|
|
1829
|
+
* as the model extension carries baseModelRef/adaptationType.
|
|
1830
|
+
*/
|
|
1831
|
+
export interface DatasetBOMExtension {
|
|
1832
|
+
/**
|
|
1833
|
+
* References to the source dataset(s) this one was derived from — a dataset componentId, or
|
|
1834
|
+
* a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
|
|
1835
|
+
* ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
|
|
1836
|
+
*/
|
|
1837
|
+
baseDatasetRefs?: string[];
|
|
1838
|
+
/**
|
|
1839
|
+
* Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
|
|
1840
|
+
* phi.
|
|
1841
|
+
*/
|
|
1842
|
+
dataClassification?: string;
|
|
1843
|
+
/**
|
|
1844
|
+
* Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
|
|
1845
|
+
*/
|
|
1846
|
+
datasetFormat?: string;
|
|
1847
|
+
/**
|
|
1848
|
+
* Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1849
|
+
* adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1850
|
+
* (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1851
|
+
*/
|
|
1852
|
+
derivation?: DatasetDerivationType;
|
|
1853
|
+
/**
|
|
1854
|
+
* Free-text statement of the dataset's intended use (CISA/G7 minimum element).
|
|
1855
|
+
*/
|
|
1856
|
+
intendedUse?: string;
|
|
1857
|
+
/**
|
|
1858
|
+
* Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
1859
|
+
* image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
1860
|
+
* encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
1861
|
+
* physical format. String or array of strings.
|
|
1862
|
+
*/
|
|
1863
|
+
modality?: string[] | string;
|
|
1864
|
+
/**
|
|
1865
|
+
* Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
|
|
1866
|
+
* provenance'; SPDX 3.0 dataset_dataCollectionProcess).
|
|
1867
|
+
*/
|
|
1868
|
+
provenance?: string;
|
|
1869
|
+
/**
|
|
1870
|
+
* Number of records/examples in the dataset.
|
|
1871
|
+
*/
|
|
1872
|
+
recordCount?: number;
|
|
1873
|
+
/**
|
|
1874
|
+
* Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
|
|
1875
|
+
* open-ended by design). Intentionally free-text and will remain so permanently:
|
|
1876
|
+
* recordCount is the one structured statistic, and restructuring this into an object later
|
|
1877
|
+
* would break existing consumers, so it stays a string (additive-only).
|
|
1878
|
+
*/
|
|
1879
|
+
statisticalProperties?: string;
|
|
1880
|
+
[property: string]: any;
|
|
1881
|
+
}
|
|
1882
|
+
/**
|
|
1883
|
+
* Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1884
|
+
* adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1885
|
+
* (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1886
|
+
*/
|
|
1887
|
+
export declare enum DatasetDerivationType {
|
|
1888
|
+
Augmented = "augmented",
|
|
1889
|
+
Filtered = "filtered",
|
|
1890
|
+
Merged = "merged",
|
|
1891
|
+
Sampled = "sampled"
|
|
1892
|
+
}
|
|
1893
|
+
/**
|
|
1894
|
+
* Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1895
|
+
*
|
|
1896
|
+
* Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All
|
|
1897
|
+
* fields optional (standards-correct; only the EU AI Act makes a subset binding for
|
|
1898
|
+
* high-risk/GPAI). Left open (additionalProperties: true) so a converter can carry unmapped
|
|
1899
|
+
* native fields opaquely (partial-fidelity pattern). Subject name/version are inherited
|
|
1900
|
+
* from the host aiModel component, not repeated here.
|
|
1901
|
+
*/
|
|
1902
|
+
export interface AIModelBOMExtension {
|
|
1903
|
+
/**
|
|
1904
|
+
* Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
1905
|
+
* vocabulary (the only typed lineage enum in the ecosystem).
|
|
1906
|
+
*/
|
|
1907
|
+
adaptationType?: ModelAdaptationType;
|
|
1908
|
+
/**
|
|
1909
|
+
* Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
|
|
1910
|
+
* purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
|
|
1911
|
+
*/
|
|
1912
|
+
baseModelRef?: string;
|
|
1913
|
+
/**
|
|
1914
|
+
* References to the training/evaluation datasets this model was produced from — preferably
|
|
1915
|
+
* a dataset component's componentId (correlating to a first-class dataset subject rather
|
|
1916
|
+
* than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
|
|
1917
|
+
* component exists.
|
|
1918
|
+
*/
|
|
1919
|
+
datasetRefs?: string[];
|
|
1920
|
+
/**
|
|
1921
|
+
* Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
|
|
1922
|
+
* is the set of training knobs, NOT the model's trainable parameterCount — the two are
|
|
1923
|
+
* routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
|
|
1924
|
+
* ai_hyperparameter.
|
|
1925
|
+
*/
|
|
1926
|
+
hyperparameters?: Hyperparameter[];
|
|
1927
|
+
/**
|
|
1928
|
+
* Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1929
|
+
* context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1930
|
+
* modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1931
|
+
*/
|
|
1932
|
+
inputOutput?: InputOutput;
|
|
1933
|
+
/**
|
|
1934
|
+
* Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
|
|
1935
|
+
*/
|
|
1936
|
+
intendedUse?: string;
|
|
1937
|
+
/**
|
|
1938
|
+
* Model's learning/training paradigm. Free-text because the value set varies across
|
|
1939
|
+
* standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
|
|
1940
|
+
* Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
|
|
1941
|
+
* modelParameters.approach.type ∩ CISA/G7 learning type.
|
|
1942
|
+
*/
|
|
1943
|
+
learningApproach?: string;
|
|
1944
|
+
/**
|
|
1945
|
+
* Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
|
|
1946
|
+
*/
|
|
1947
|
+
modelArchitecture?: string;
|
|
1948
|
+
/**
|
|
1949
|
+
* Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
|
|
1950
|
+
* because the EU AI Act keys GPAI obligations off model scale.
|
|
1951
|
+
*/
|
|
1952
|
+
parameterCount?: number;
|
|
1953
|
+
/**
|
|
1954
|
+
* Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
|
|
1955
|
+
* heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
|
|
1956
|
+
* true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
|
|
1957
|
+
* intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
|
|
1958
|
+
* CISA/G7 KPI cluster.
|
|
1959
|
+
*/
|
|
1960
|
+
performanceMetrics?: PerformanceMetric[];
|
|
1961
|
+
/**
|
|
1962
|
+
* On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
|
|
1963
|
+
* pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
|
|
1964
|
+
* safetensors, pytorch, gguf, onnx, tensorflow.
|
|
1965
|
+
*/
|
|
1966
|
+
serializationFormat?: string;
|
|
1967
|
+
/**
|
|
1968
|
+
* The ML task the model performs. Free-text. Examples: text-classification,
|
|
1969
|
+
* sentiment-analysis, object-detection, translation. Sourced from CycloneDX
|
|
1970
|
+
* modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
|
|
1971
|
+
* intended-application.
|
|
1972
|
+
*/
|
|
1973
|
+
task?: string;
|
|
1974
|
+
[property: string]: any;
|
|
1975
|
+
}
|
|
1976
|
+
/**
|
|
1977
|
+
* Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
1978
|
+
* vocabulary (the only typed lineage enum in the ecosystem).
|
|
1979
|
+
*/
|
|
1980
|
+
export declare enum ModelAdaptationType {
|
|
1981
|
+
Adapter = "adapter",
|
|
1982
|
+
Finetune = "finetune",
|
|
1983
|
+
Merge = "merge",
|
|
1984
|
+
Quantized = "quantized"
|
|
1985
|
+
}
|
|
1986
|
+
export interface Hyperparameter {
|
|
1987
|
+
/**
|
|
1988
|
+
* Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
|
|
1989
|
+
*/
|
|
1990
|
+
name?: string;
|
|
1991
|
+
/**
|
|
1992
|
+
* Hyper-parameter value (free-text).
|
|
1993
|
+
*/
|
|
1994
|
+
value?: string;
|
|
1995
|
+
[property: string]: any;
|
|
1996
|
+
}
|
|
1997
|
+
/**
|
|
1998
|
+
* Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1999
|
+
* context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
2000
|
+
* modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
2001
|
+
*/
|
|
2002
|
+
export interface InputOutput {
|
|
2003
|
+
/**
|
|
2004
|
+
* Maximum context/sequence length the model accepts, in tokens.
|
|
2005
|
+
*/
|
|
2006
|
+
contextLength?: number;
|
|
2007
|
+
/**
|
|
2008
|
+
* Input/output data types. Examples: string, byte[], float32, image.
|
|
2009
|
+
*/
|
|
2010
|
+
dataTypes?: string[];
|
|
2011
|
+
/**
|
|
2012
|
+
* Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
2013
|
+
* Symmetric with Dataset_Extension.modality.
|
|
2014
|
+
*/
|
|
2015
|
+
modality?: string[] | string;
|
|
2016
|
+
/**
|
|
2017
|
+
* Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
|
|
2018
|
+
*/
|
|
2019
|
+
tokenizer?: string;
|
|
2020
|
+
[property: string]: any;
|
|
2021
|
+
}
|
|
2022
|
+
export interface PerformanceMetric {
|
|
2023
|
+
/**
|
|
2024
|
+
* Metric name. Examples: accuracy, f1, BLEU, latency.
|
|
2025
|
+
*/
|
|
2026
|
+
name?: string;
|
|
2027
|
+
/**
|
|
2028
|
+
* Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
|
|
2029
|
+
* milliseconds).
|
|
2030
|
+
*/
|
|
2031
|
+
value?: string;
|
|
2032
|
+
[property: string]: any;
|
|
2033
|
+
}
|
|
2034
|
+
/**
|
|
2035
|
+
* A single normalized software package entry within an sbom BOM. Minimal identity + version
|
|
2036
|
+
* for querying/diffing; the full native record remains available via passthrough
|
|
2037
|
+
* (document/ref).
|
|
2038
|
+
*/
|
|
2039
|
+
export interface SBOMPackage {
|
|
2040
|
+
/**
|
|
2041
|
+
* SPDX license identifiers/expressions for this package.
|
|
2042
|
+
*/
|
|
2043
|
+
licenses?: string[];
|
|
2044
|
+
/**
|
|
2045
|
+
* Package name.
|
|
2046
|
+
*/
|
|
2047
|
+
name: string;
|
|
2048
|
+
/**
|
|
2049
|
+
* Package URL (purl) — the preferred cross-BOM identity key when present.
|
|
2050
|
+
*/
|
|
2051
|
+
purl?: string;
|
|
2052
|
+
/**
|
|
2053
|
+
* Package version.
|
|
2054
|
+
*/
|
|
2055
|
+
version?: string;
|
|
1710
2056
|
[property: string]: any;
|
|
1711
2057
|
}
|
|
1712
2058
|
/**
|
|
@@ -1745,16 +2091,11 @@ export declare enum CloudProvider {
|
|
|
1745
2091
|
Other = "other"
|
|
1746
2092
|
}
|
|
1747
2093
|
/**
|
|
1748
|
-
*
|
|
1749
|
-
|
|
1750
|
-
export declare enum SBOMFormat {
|
|
1751
|
-
Cyclonedx = "cyclonedx",
|
|
1752
|
-
Spdx = "spdx"
|
|
1753
|
-
}
|
|
1754
|
-
/**
|
|
1755
|
-
* Component type discriminator. Same values as Target types.
|
|
2094
|
+
* Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
2095
|
+
* AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
1756
2096
|
*/
|
|
1757
2097
|
export declare enum TargetType {
|
|
2098
|
+
AIModel = "aiModel",
|
|
1758
2099
|
Application = "application",
|
|
1759
2100
|
Artifact = "artifact",
|
|
1760
2101
|
CloudAccount = "cloudAccount",
|
|
@@ -1763,6 +2104,7 @@ export declare enum TargetType {
|
|
|
1763
2104
|
ContainerInstance = "containerInstance",
|
|
1764
2105
|
ContainerPlatform = "containerPlatform",
|
|
1765
2106
|
Database = "database",
|
|
2107
|
+
Dataset = "dataset",
|
|
1766
2108
|
Host = "host",
|
|
1767
2109
|
Network = "network",
|
|
1768
2110
|
Repository = "repository"
|
|
@@ -1843,7 +2185,18 @@ export interface Runner {
|
|
|
1843
2185
|
*/
|
|
1844
2186
|
containerImage?: string;
|
|
1845
2187
|
/**
|
|
1846
|
-
* The
|
|
2188
|
+
* The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
|
|
2189
|
+
* NOT the DNS suffix of the FQDN. Example: 'CORP'.
|
|
2190
|
+
*/
|
|
2191
|
+
domain?: string;
|
|
2192
|
+
/**
|
|
2193
|
+
* The fully qualified domain name of the runner system, when known. Distinct from the short
|
|
2194
|
+
* 'hostname'; kept separate for the same reason as on host components (an FQDN is not
|
|
2195
|
+
* reliably decomposable). Example: 'ci-runner-01.build.example.com'.
|
|
2196
|
+
*/
|
|
2197
|
+
fqdn?: string;
|
|
2198
|
+
/**
|
|
2199
|
+
* The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1847
2200
|
* 'k8s-node-worker-03'.
|
|
1848
2201
|
*/
|
|
1849
2202
|
hostname?: string;
|
|
@@ -2142,7 +2495,8 @@ export interface HDFComparison {
|
|
|
2142
2495
|
*/
|
|
2143
2496
|
comparisonMode: ComparisonMode;
|
|
2144
2497
|
/**
|
|
2145
|
-
* Comparison of components between two system documents. Used in systemDrift mode.
|
|
2498
|
+
* Comparison of components between two system documents. Used in systemDrift mode. A
|
|
2499
|
+
* component's BOM changes surface as a field change on its boms[] here.
|
|
2146
2500
|
*/
|
|
2147
2501
|
componentDiffs?: ComponentDiff[];
|
|
2148
2502
|
/**
|
|
@@ -2172,7 +2526,11 @@ export interface HDFComparison {
|
|
|
2172
2526
|
*/
|
|
2173
2527
|
matching?: MatchingConfig;
|
|
2174
2528
|
/**
|
|
2175
|
-
*
|
|
2529
|
+
* RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
|
|
2530
|
+
* component's BOM changes as a field change on its boms[] (see componentDiffs), and
|
|
2531
|
+
* standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
|
|
2532
|
+
* field is retained for a future normalized package-level diff; consumers must not expect
|
|
2533
|
+
* it from today's systemDrift output.
|
|
2176
2534
|
*/
|
|
2177
2535
|
packageDiffs?: PackageDiff[];
|
|
2178
2536
|
/**
|
|
@@ -2570,15 +2928,22 @@ export interface MatchingConfig {
|
|
|
2570
2928
|
[property: string]: any;
|
|
2571
2929
|
}
|
|
2572
2930
|
/**
|
|
2573
|
-
* Comparison of a single
|
|
2931
|
+
* Comparison of a single BOM node between two BOM versions, matched by purl (software) or
|
|
2932
|
+
* identifier (models, datasets, hardware, crypto).
|
|
2574
2933
|
*/
|
|
2575
2934
|
export interface PackageDiff {
|
|
2935
|
+
/**
|
|
2936
|
+
* Generic identity key for matching a BOM node across versions when no purl applies — e.g.
|
|
2937
|
+
* a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
|
|
2938
|
+
* number. At least one of purl or identifier is required.
|
|
2939
|
+
*/
|
|
2940
|
+
identifier?: string;
|
|
2576
2941
|
/**
|
|
2577
2942
|
* License identifiers for this package.
|
|
2578
2943
|
*/
|
|
2579
2944
|
licenses?: string[];
|
|
2580
2945
|
/**
|
|
2581
|
-
* Human-readable
|
|
2946
|
+
* Human-readable node name.
|
|
2582
2947
|
*/
|
|
2583
2948
|
name?: string;
|
|
2584
2949
|
/**
|
|
@@ -2590,9 +2955,11 @@ export interface PackageDiff {
|
|
|
2590
2955
|
*/
|
|
2591
2956
|
oldVersion?: string;
|
|
2592
2957
|
/**
|
|
2593
|
-
* Package URL (purl)
|
|
2958
|
+
* Package URL (purl) — the preferred identity key for matching software packages across
|
|
2959
|
+
* BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
|
|
2960
|
+
* algorithms) key on identifier instead.
|
|
2594
2961
|
*/
|
|
2595
|
-
purl
|
|
2962
|
+
purl?: string;
|
|
2596
2963
|
/**
|
|
2597
2964
|
* The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
2598
2965
|
* updated (version changed), unchanged.
|
|
@@ -2883,6 +3250,13 @@ export interface HDFSystem {
|
|
|
2883
3250
|
* Current Authorization to Operate (ATO) status.
|
|
2884
3251
|
*/
|
|
2885
3252
|
authorizationStatus?: AuthorizationStatus;
|
|
3253
|
+
/**
|
|
3254
|
+
* System-scoped Bills of Materials whose subject is the authorization boundary rather than
|
|
3255
|
+
* a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
|
|
3256
|
+
* Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
|
|
3257
|
+
* primitives/bom.schema.json.
|
|
3258
|
+
*/
|
|
3259
|
+
boms?: BillOfMaterials[];
|
|
2886
3260
|
/**
|
|
2887
3261
|
* Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
2888
3262
|
* VPC IDs, physical locations.
|
|
@@ -2894,7 +3268,8 @@ export interface HDFSystem {
|
|
|
2894
3268
|
categorizationLevel?: CategorizationLevel;
|
|
2895
3269
|
/**
|
|
2896
3270
|
* System components within the authorization boundary. Uses the full polymorphic Component
|
|
2897
|
-
* type with stable identity (componentId), external references, and
|
|
3271
|
+
* type with stable identity (componentId), external references, and generalized BOM
|
|
3272
|
+
* attachment (boms[]).
|
|
2898
3273
|
*/
|
|
2899
3274
|
components: Component[];
|
|
2900
3275
|
/**
|
|
@@ -3417,6 +3792,13 @@ export interface HDFEvidencePackage {
|
|
|
3417
3792
|
* Description of the evidence package's purpose and scope.
|
|
3418
3793
|
*/
|
|
3419
3794
|
description?: string;
|
|
3795
|
+
/**
|
|
3796
|
+
* References to external native-format evidence (log/telemetry corpora and other artifacts)
|
|
3797
|
+
* carried by URI + integrity hash + format discriminator, without recreating the data
|
|
3798
|
+
* inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
|
|
3799
|
+
* here rather than transcoding them.
|
|
3800
|
+
*/
|
|
3801
|
+
externalEvidence?: ExternalEvidenceReference[];
|
|
3420
3802
|
/**
|
|
3421
3803
|
* Information about the tool that generated this document.
|
|
3422
3804
|
*/
|
|
@@ -3520,7 +3902,7 @@ export interface SBOMCoverage {
|
|
|
3520
3902
|
[property: string]: any;
|
|
3521
3903
|
}
|
|
3522
3904
|
/**
|
|
3523
|
-
* A reference to an HDF document or
|
|
3905
|
+
* A reference to an HDF document or BOM/manifest included in the evidence package.
|
|
3524
3906
|
*/
|
|
3525
3907
|
export interface ContentReference {
|
|
3526
3908
|
/**
|
|
@@ -3549,14 +3931,97 @@ export interface ContentReference {
|
|
|
3549
3931
|
/**
|
|
3550
3932
|
* The type of HDF document being referenced.
|
|
3551
3933
|
*
|
|
3552
|
-
* The type of document referenced in the evidence package.
|
|
3934
|
+
* The type of document referenced in the evidence package. 'bom' covers any
|
|
3935
|
+
* Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) —
|
|
3936
|
+
* its specific kind is carried by the referenced document's bomType, not by a per-kind
|
|
3937
|
+
* Content_Type value.
|
|
3553
3938
|
*/
|
|
3554
3939
|
export declare enum ContentType {
|
|
3940
|
+
BOM = "bom",
|
|
3555
3941
|
HdfAmendments = "hdf-amendments",
|
|
3556
3942
|
HdfBaseline = "hdf-baseline",
|
|
3557
3943
|
HdfComparison = "hdf-comparison",
|
|
3558
3944
|
HdfPlan = "hdf-plan",
|
|
3559
3945
|
HdfResults = "hdf-results",
|
|
3560
|
-
HdfSystem = "hdf-system"
|
|
3561
|
-
|
|
3946
|
+
HdfSystem = "hdf-system"
|
|
3947
|
+
}
|
|
3948
|
+
/**
|
|
3949
|
+
* A reference to external native-format evidence (log/telemetry corpus or other artifact)
|
|
3950
|
+
* carried by URI + integrity hash + format discriminator. Reference-only: the artifact is
|
|
3951
|
+
* never embedded (corpora can be huge) or transcoded (that would be lossy) — it stays
|
|
3952
|
+
* canonical in its native format and HDF acts as the structured index.
|
|
3953
|
+
*/
|
|
3954
|
+
export interface ExternalEvidenceReference {
|
|
3955
|
+
/**
|
|
3956
|
+
* Cryptographic checksum of the referenced artifact for integrity verification.
|
|
3957
|
+
*/
|
|
3958
|
+
checksum?: Checksum;
|
|
3959
|
+
/**
|
|
3960
|
+
* Optional human-readable description of this evidence entry.
|
|
3961
|
+
*/
|
|
3962
|
+
description?: string;
|
|
3963
|
+
/**
|
|
3964
|
+
* The native format discriminator of the referenced artifact.
|
|
3965
|
+
*/
|
|
3966
|
+
format: string;
|
|
3967
|
+
/**
|
|
3968
|
+
* Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
|
|
3969
|
+
* Free-text and untrusted — HDF does not validate it against a registry.
|
|
3970
|
+
*/
|
|
3971
|
+
formatVersion?: string;
|
|
3972
|
+
/**
|
|
3973
|
+
* Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
|
|
3974
|
+
* (the semantic standard). Examples: application/x-ndjson, application/json,
|
|
3975
|
+
* application/vnd.apache.parquet, text/csv.
|
|
3976
|
+
*/
|
|
3977
|
+
mediaType?: string;
|
|
3978
|
+
/**
|
|
3979
|
+
* Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
3980
|
+
*/
|
|
3981
|
+
metadata?: ExternalEvidenceMetadata;
|
|
3982
|
+
/**
|
|
3983
|
+
* URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
|
|
3984
|
+
* a relative path or absolute URL. The data stays canonical in its native format — HDF
|
|
3985
|
+
* references it, never parses or transcodes it.
|
|
3986
|
+
*/
|
|
3987
|
+
uri: string;
|
|
3988
|
+
[property: string]: any;
|
|
3989
|
+
}
|
|
3990
|
+
/**
|
|
3991
|
+
* Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
3992
|
+
*
|
|
3993
|
+
* Descriptive metadata about a referenced external evidence corpus. Does not affect
|
|
3994
|
+
* integrity.
|
|
3995
|
+
*/
|
|
3996
|
+
export interface ExternalEvidenceMetadata {
|
|
3997
|
+
/**
|
|
3998
|
+
* The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
|
|
3999
|
+
* 'elastic-agent'.
|
|
4000
|
+
*/
|
|
4001
|
+
collector?: string;
|
|
4002
|
+
/**
|
|
4003
|
+
* Approximate number of records/events in the referenced corpus.
|
|
4004
|
+
*/
|
|
4005
|
+
recordCount?: number;
|
|
4006
|
+
/**
|
|
4007
|
+
* The time window the referenced evidence covers.
|
|
4008
|
+
*/
|
|
4009
|
+
timeRange?: ExternalEvidenceTimeRange;
|
|
4010
|
+
[property: string]: any;
|
|
4011
|
+
}
|
|
4012
|
+
/**
|
|
4013
|
+
* The time window the referenced evidence covers.
|
|
4014
|
+
*
|
|
4015
|
+
* The time window a referenced external evidence corpus covers.
|
|
4016
|
+
*/
|
|
4017
|
+
export interface ExternalEvidenceTimeRange {
|
|
4018
|
+
/**
|
|
4019
|
+
* End of the time window the corpus covers (ISO 8601).
|
|
4020
|
+
*/
|
|
4021
|
+
end?: Date;
|
|
4022
|
+
/**
|
|
4023
|
+
* Start of the time window the corpus covers (ISO 8601).
|
|
4024
|
+
*/
|
|
4025
|
+
start?: Date;
|
|
4026
|
+
[property: string]: any;
|
|
3562
4027
|
}
|