@mitre/hdf-schema 3.7.2 → 3.8.0-next.42533588944.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 +9 -0
- package/dist/go/hdf.go +1470 -1276
- package/dist/helpers.d.ts +7 -5
- package/dist/helpers.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +28 -28
- package/dist/schemas/hdf-amendments.schema.json +562 -112
- package/dist/schemas/hdf-baseline.schema.json +570 -118
- package/dist/schemas/hdf-comparison.schema.json +997 -242
- package/dist/schemas/hdf-evidence-package.schema.json +566 -115
- package/dist/schemas/hdf-plan.schema.json +568 -118
- package/dist/schemas/hdf-requirement-change-event.schema.json +658 -211
- package/dist/schemas/hdf-results.schema.json +644 -197
- package/dist/schemas/hdf-system.schema.json +604 -147
- package/dist/ts/hdf.d.ts +284 -56
- package/dist/ts/hdf.js +24 -9
- package/dist/ts/hdf.ts +285 -50
- package/package.json +3 -3
package/dist/go/hdf.go
CHANGED
|
@@ -115,241 +115,312 @@ func (r *HDFRequirementChangeEvent) Marshal() ([]byte, error) {
|
|
|
115
115
|
|
|
116
116
|
// The top level value containing all assessment results.
|
|
117
117
|
type HDFResults struct {
|
|
118
|
-
// Information on the baselines that were evaluated, including findings.
|
|
119
|
-
Baselines []EvaluatedBaseline
|
|
120
|
-
// The components that were assessed. Each component describes a system element (host,
|
|
121
|
-
// container, cloud resource, application, etc.) with optional identity, SBOM, and external
|
|
122
|
-
// references.
|
|
123
|
-
Components []Component
|
|
124
|
-
// Present ONLY on reconciled result sets: lineage recording the seed snapshot and event
|
|
125
|
-
// watermark this document was reassembled from (ADR-0005). Documents produced directly by a
|
|
126
|
-
// scan omit this field. When present, generator names the reconciling tool.
|
|
127
|
-
Derivation *Derivation
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
Extensions
|
|
131
|
-
// Optional references to external artifacts (CTI/STIX, BOMs, advisories, runbooks, or any
|
|
132
|
-
// URI-addressable artifact) relevant to this assessment as a whole. Inert context; see
|
|
133
|
-
// External_Reference.
|
|
134
|
-
ExternalReferences []ExternalReference
|
|
135
|
-
// Information about the tool that generated this file.
|
|
136
|
-
Generator *Generator
|
|
137
|
-
// Unique identifier for this assessment run.
|
|
138
|
-
ID *string
|
|
139
|
-
// Cryptographic integrity information for verifying this file.
|
|
140
|
-
Integrity *Integrity
|
|
141
|
-
// Reference to an hdf-plan document describing the assessment plan that produced these
|
|
142
|
-
// results. May be a relative path, absolute URI, or fragment identifier.
|
|
143
|
-
PlanRef *string
|
|
144
|
-
// Hash of this results document as it stood immediately before the most recent amendment
|
|
145
|
-
// application. Written by `hdf amend apply` when it applies at least one override; an apply
|
|
146
|
-
// that matches nothing leaves the document untouched. The hash covers the results file's
|
|
147
|
-
// RAW BYTES as read, not a canonical form, so reproducing it requires the byte-identical
|
|
148
|
-
// original — reformatting or re-serializing the source changes the value. Only the most
|
|
149
|
-
// recent pre-application state is recorded: applying amendments to an already-amended
|
|
150
|
-
// document REPLACES this value, so it is a single link back one step, not a growing chain.
|
|
151
|
-
// Distinct from the `previousChecksum` inside an override, which chains amendments to each
|
|
152
|
-
// other and is computed over a canonical JSON form.
|
|
153
|
-
PreAmendmentChecksum *Checksum
|
|
154
|
-
// Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
155
|
-
// scripts, etc.) for fixing failing requirements found in this assessment.
|
|
156
|
-
Remediation *Remediation
|
|
157
|
-
// Information about the test execution environment where the security tool was run.
|
|
158
|
-
// Distinct from targets (what is being tested).
|
|
159
|
-
Runner *Runner
|
|
160
|
-
// Statistics for the assessment run, including duration and result counts.
|
|
161
|
-
Statistics *Statistics
|
|
162
|
-
// Reference to an hdf-system document describing the system under assessment. May be a
|
|
163
|
-
// relative path, absolute URI, or fragment identifier.
|
|
164
|
-
SystemRef *string
|
|
165
|
-
// When this assessment was executed.
|
|
166
|
-
Timestamp *time.Time
|
|
167
|
-
// The security tool that produced the assessment data in this file.
|
|
168
|
-
Tool *Tool
|
|
118
|
+
// Information on the baselines that were evaluated, including findings.
|
|
119
|
+
Baselines []EvaluatedBaseline `json:"baselines"`
|
|
120
|
+
// The components that were assessed. Each component describes a system element (host,
|
|
121
|
+
// container, cloud resource, application, etc.) with optional identity, SBOM, and external
|
|
122
|
+
// references.
|
|
123
|
+
Components []Component `json:"components,omitempty"`
|
|
124
|
+
// Present ONLY on reconciled result sets: lineage recording the seed snapshot and event
|
|
125
|
+
// watermark this document was reassembled from (ADR-0005). Documents produced directly by a
|
|
126
|
+
// scan omit this field. When present, generator names the reconciling tool.
|
|
127
|
+
Derivation *Derivation `json:"derivation,omitempty"`
|
|
128
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) these
|
|
129
|
+
// results were converted from.
|
|
130
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
131
|
+
// Optional references to external artifacts (CTI/STIX, BOMs, advisories, runbooks, or any
|
|
132
|
+
// URI-addressable artifact) relevant to this assessment as a whole. Inert context; see
|
|
133
|
+
// External_Reference.
|
|
134
|
+
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
135
|
+
// Information about the tool that generated this file.
|
|
136
|
+
Generator *Generator `json:"generator,omitempty"`
|
|
137
|
+
// Unique identifier for this assessment run.
|
|
138
|
+
ID *string `json:"id,omitempty"`
|
|
139
|
+
// Cryptographic integrity information for verifying this file.
|
|
140
|
+
Integrity *Integrity `json:"integrity,omitempty"`
|
|
141
|
+
// Reference to an hdf-plan document describing the assessment plan that produced these
|
|
142
|
+
// results. May be a relative path, absolute URI, or fragment identifier.
|
|
143
|
+
PlanRef *string `json:"planRef,omitempty"`
|
|
144
|
+
// Hash of this results document as it stood immediately before the most recent amendment
|
|
145
|
+
// application. Written by `hdf amend apply` when it applies at least one override; an apply
|
|
146
|
+
// that matches nothing leaves the document untouched. The hash covers the results file's
|
|
147
|
+
// RAW BYTES as read, not a canonical form, so reproducing it requires the byte-identical
|
|
148
|
+
// original — reformatting or re-serializing the source changes the value. Only the most
|
|
149
|
+
// recent pre-application state is recorded: applying amendments to an already-amended
|
|
150
|
+
// document REPLACES this value, so it is a single link back one step, not a growing chain.
|
|
151
|
+
// Distinct from the `previousChecksum` inside an override, which chains amendments to each
|
|
152
|
+
// other and is computed over a canonical JSON form.
|
|
153
|
+
PreAmendmentChecksum *Checksum `json:"preAmendmentChecksum,omitempty"`
|
|
154
|
+
// Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
155
|
+
// scripts, etc.) for fixing failing requirements found in this assessment.
|
|
156
|
+
Remediation *Remediation `json:"remediation,omitempty"`
|
|
157
|
+
// Information about the test execution environment where the security tool was run.
|
|
158
|
+
// Distinct from targets (what is being tested).
|
|
159
|
+
Runner *Runner `json:"runner,omitempty"`
|
|
160
|
+
// Statistics for the assessment run, including duration and result counts.
|
|
161
|
+
Statistics *Statistics `json:"statistics,omitempty"`
|
|
162
|
+
// Reference to an hdf-system document describing the system under assessment. May be a
|
|
163
|
+
// relative path, absolute URI, or fragment identifier.
|
|
164
|
+
SystemRef *string `json:"systemRef,omitempty"`
|
|
165
|
+
// When this assessment was executed.
|
|
166
|
+
Timestamp *time.Time `json:"timestamp,omitempty"`
|
|
167
|
+
// The security tool that produced the assessment data in this file.
|
|
168
|
+
Tool *Tool `json:"tool,omitempty"`
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
// Information on a baseline that was evaluated, including any findings.
|
|
172
172
|
type EvaluatedBaseline struct {
|
|
173
|
-
// The set of dependencies this baseline depends on.
|
|
173
|
+
// The set of dependencies this baseline depends on.
|
|
174
174
|
Depends []Dependency `json:"depends,omitempty"`
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
// A set of descriptions for the requirement groups.
|
|
175
|
+
// Producer data outside the HDF model that belongs to this baseline rather than to the
|
|
176
|
+
// document, and the pre-converted source artifact(s) this baseline was built from.
|
|
177
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
178
|
+
// A set of descriptions for the requirement groups.
|
|
180
179
|
Groups []RequirementGroup `json:"groups,omitempty"`
|
|
181
|
-
// Typed inputs used to parameterize this baseline at execution time. See the Input
|
|
182
|
-
// primitive for the full schema.
|
|
180
|
+
// Typed inputs used to parameterize this baseline at execution time. See the Input
|
|
181
|
+
// primitive for the full schema.
|
|
183
182
|
Inputs []Input `json:"inputs,omitempty"`
|
|
184
|
-
// Cryptographic integrity information for verifying this baseline has not been tampered
|
|
185
|
-
// with.
|
|
183
|
+
// Cryptographic integrity information for verifying this baseline has not been tampered
|
|
184
|
+
// with.
|
|
186
185
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
187
|
-
// SHA-256 checksum of the original baseline definition file (before execution). This is an
|
|
188
|
-
// immutable reference to the baseline as defined, used to detect tampering with baseline
|
|
189
|
-
// requirements or metadata.
|
|
186
|
+
// SHA-256 checksum of the original baseline definition file (before execution). This is an
|
|
187
|
+
// immutable reference to the baseline as defined, used to detect tampering with baseline
|
|
188
|
+
// requirements or metadata.
|
|
190
189
|
OriginalChecksum *Checksum `json:"originalChecksum,omitempty"`
|
|
191
|
-
// The name of the parent baseline if this is a dependency of another.
|
|
190
|
+
// The name of the parent baseline if this is a dependency of another.
|
|
192
191
|
ParentBaseline *string `json:"parentBaseline,omitempty"`
|
|
193
|
-
// The set of requirements including any findings. A baseline must have at least one
|
|
194
|
-
// requirement.
|
|
192
|
+
// The set of requirements including any findings. A baseline must have at least one
|
|
193
|
+
// requirement.
|
|
195
194
|
Requirements []EvaluatedRequirement `json:"requirements"`
|
|
196
|
-
// SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
|
|
197
|
-
// Used to detect tampering with test results.
|
|
198
|
-
//
|
|
195
|
+
// SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
|
|
196
|
+
// Used to detect tampering with test results. Amendment integrity is checked against the
|
|
197
|
+
// document-level preAmendmentChecksum at the root, not this per-baseline value: hdf amend
|
|
198
|
+
// apply writes it as the hash of the raw document bytes immediately before the most recent
|
|
199
|
+
// amendment application, one step back only.
|
|
199
200
|
ResultsChecksum *Checksum `json:"resultsChecksum,omitempty"`
|
|
200
|
-
// An explanation of the baseline status. Example: why it was skipped, failed to load, or
|
|
201
|
-
// any other status details.
|
|
201
|
+
// An explanation of the baseline status. Example: why it was skipped, failed to load, or
|
|
202
|
+
// any other status details.
|
|
202
203
|
StatusMessage *string `json:"statusMessage,omitempty"`
|
|
203
|
-
// The name - must be unique.
|
|
204
|
+
// The name - must be unique.
|
|
204
205
|
Name string `json:"name"`
|
|
205
|
-
// The copyright holder(s).
|
|
206
|
+
// The copyright holder(s).
|
|
206
207
|
Copyright *string `json:"copyright,omitempty"`
|
|
207
|
-
// The email address or other contact information of the copyright holder(s).
|
|
208
|
+
// The email address or other contact information of the copyright holder(s).
|
|
208
209
|
CopyrightEmail *string `json:"copyrightEmail,omitempty"`
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
|
|
210
|
+
// Prose description of the baseline, more detailed than summary. Carried verbatim, like
|
|
211
|
+
// every HDF prose field.
|
|
212
|
+
Description *string `json:"description,omitempty"`
|
|
213
|
+
// Optional references to external artifacts relevant to this baseline (CTI/STIX,
|
|
214
|
+
// advisories, source catalogs, or any URI-addressable artifact). Travels with the baseline
|
|
215
|
+
// definition. Inert context; see External_Reference.
|
|
212
216
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
213
|
-
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
214
|
-
// environment, region, team. Values must be strings.
|
|
217
|
+
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
218
|
+
// environment, region, team. Values must be strings.
|
|
215
219
|
Labels map[string]string `json:"labels,omitempty"`
|
|
216
|
-
// The copyright license. Example: 'Apache-2.0'.
|
|
220
|
+
// The copyright license. Example: 'Apache-2.0'.
|
|
217
221
|
License *string `json:"license,omitempty"`
|
|
218
|
-
// The maintainer(s).
|
|
222
|
+
// The maintainer(s).
|
|
219
223
|
Maintainer *string `json:"maintainer,omitempty"`
|
|
220
|
-
// The status. Example: 'loaded'.
|
|
224
|
+
// The status. Example: 'loaded'.
|
|
221
225
|
Status *string `json:"status,omitempty"`
|
|
222
|
-
// The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
226
|
+
// The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
223
227
|
Summary *string `json:"summary,omitempty"`
|
|
224
|
-
// The set of supported platform targets.
|
|
228
|
+
// The set of supported platform targets.
|
|
225
229
|
Supports []SupportedPlatform `json:"supports,omitempty"`
|
|
226
|
-
// The title - should be human readable.
|
|
230
|
+
// The title - should be human readable.
|
|
227
231
|
Title *string `json:"title,omitempty"`
|
|
228
|
-
// The version of the baseline.
|
|
232
|
+
// The version of the baseline.
|
|
229
233
|
Version *string `json:"version,omitempty"`
|
|
230
234
|
}
|
|
231
235
|
|
|
232
236
|
// A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.
|
|
233
237
|
type Dependency struct {
|
|
234
|
-
// The branch name for a git repo.
|
|
238
|
+
// The branch name for a git repo.
|
|
235
239
|
Branch *string `json:"branch,omitempty"`
|
|
236
|
-
// The 'user/profilename' attribute for an Automate server.
|
|
240
|
+
// The 'user/profilename' attribute for an Automate server.
|
|
237
241
|
Compliance *string `json:"compliance,omitempty"`
|
|
238
|
-
// The location of the git repo. Example:
|
|
239
|
-
// 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'.
|
|
242
|
+
// The location of the git repo. Example:
|
|
243
|
+
// 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'.
|
|
240
244
|
Git *string `json:"git,omitempty"`
|
|
241
|
-
// The name or assigned alias.
|
|
245
|
+
// The name or assigned alias.
|
|
242
246
|
Name *string `json:"name,omitempty"`
|
|
243
|
-
// The relative path if the dependency is locally available.
|
|
247
|
+
// The relative path if the dependency is locally available.
|
|
244
248
|
Path *string `json:"path,omitempty"`
|
|
245
|
-
// The status. Should be: 'loaded', 'failed', or 'skipped'.
|
|
249
|
+
// The status. Should be: 'loaded', 'failed', or 'skipped'.
|
|
246
250
|
Status *string `json:"status,omitempty"`
|
|
247
|
-
// The reason for the status if it is 'failed' or 'skipped'.
|
|
251
|
+
// The reason for the status if it is 'failed' or 'skipped'.
|
|
248
252
|
StatusMessage *string `json:"statusMessage,omitempty"`
|
|
249
|
-
// The 'user/profilename' attribute for a Supermarket server.
|
|
253
|
+
// The 'user/profilename' attribute for a Supermarket server.
|
|
250
254
|
Supermarket *string `json:"supermarket,omitempty"`
|
|
251
|
-
// The address of the dependency.
|
|
255
|
+
// The address of the dependency.
|
|
252
256
|
URL *string `json:"url,omitempty"`
|
|
253
257
|
}
|
|
254
258
|
|
|
259
|
+
// Carrier for data outside the HDF model: `passthrough` for producer data HDF does not model,
|
|
260
|
+
// `rawSourceArtifacts` for the pre-converted input(s). CLOSED: these two members are the whole of
|
|
261
|
+
// it. A key HDF does not define goes inside `passthrough` — that is what `passthrough` is for — so
|
|
262
|
+
// `extensions` never becomes a second, unnamed schema that consumers must reverse-engineer from the
|
|
263
|
+
// producers that happen to write it. Closed with `additionalProperties` rather than the house
|
|
264
|
+
// `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is
|
|
265
|
+
// a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two
|
|
266
|
+
// validators enforces is not a closure. Declared on every HDF document type that carries a producer
|
|
267
|
+
// envelope (`generator` / `integrity`), and on `Evaluated_Baseline`, so one rule governs both
|
|
268
|
+
// sites.
|
|
269
|
+
type Extensions struct {
|
|
270
|
+
// Catch-all for producer data that HDF does not model — the role heimdall2's
|
|
271
|
+
// `passthrough.auxiliary_data` played: fields a converter deliberately carried but had no
|
|
272
|
+
// home for.
|
|
273
|
+
//
|
|
274
|
+
// Deliberately permissive: unenumerated properties are accepted by design, with no shape
|
|
275
|
+
// imposed on them. HDF neither reads nor interprets what is here. It is the ONLY permissive
|
|
276
|
+
// surface in `extensions` — everything HDF does not define belongs here rather than beside
|
|
277
|
+
// it.
|
|
278
|
+
//
|
|
279
|
+
// This is NOT where the pre-converted source artifact goes. v2 put it here only because
|
|
280
|
+
// nothing else had room; `rawSourceArtifacts` is its home now, and it gives the bytes a
|
|
281
|
+
// checksum, a media type and a reference contract that an untyped object cannot.
|
|
282
|
+
//
|
|
283
|
+
// For data that belongs to one requirement rather than to the document, use that object's
|
|
284
|
+
// own fields — a document-level bag cannot say which requirement it describes.
|
|
285
|
+
Passthrough map[string]interface{} `json:"passthrough,omitempty"`
|
|
286
|
+
// The input(s) this document was converted from, verbatim.
|
|
287
|
+
//
|
|
288
|
+
// An array because a conversion can consume more than one artifact — the OSCAL profile path
|
|
289
|
+
// takes a profile and a catalog. Every other converter takes one input, and an array of one
|
|
290
|
+
// costs nothing.
|
|
291
|
+
//
|
|
292
|
+
// Populating this is required of ingest converters by policy, enforced by the converter
|
|
293
|
+
// contract and test harness rather than by a schema `required`: a tool that emits HDF
|
|
294
|
+
// natively has no source artifact, and requiring the field would make valid native HDF
|
|
295
|
+
// invalid.
|
|
296
|
+
RawSourceArtifacts []ExternalReference `json:"rawSourceArtifacts,omitempty"`
|
|
297
|
+
}
|
|
298
|
+
|
|
255
299
|
// A generalized reference to any external artifact by identity and/or location, modeled on the STIX
|
|
256
300
|
// 2.1 `external_references` common property. Purpose-agnostic: cite a CVE, an ATT&CK technique, a
|
|
257
301
|
// STIX bundle/object, a BOM, a runbook, or any vendor artifact — including kinds with no dedicated
|
|
258
302
|
// HDF reference category. `sourceName` names the system; `externalId` cites by id within that
|
|
259
303
|
// system; `href` locates it. `sourceName` + `externalId` is equivalently a URN
|
|
260
304
|
// (`urn:<sourceName>:<externalId>`, RFC 8141), so the by-identity and by-location forms stay
|
|
261
|
-
// interconvertible.
|
|
262
|
-
//
|
|
305
|
+
// interconvertible. An entry may also carry the artifact itself rather than point at it: `document`
|
|
306
|
+
// for a JSON object, `content` + `encoding` for anything else. Embedding satisfies the at-least-one
|
|
307
|
+
// rule on its own, so an artifact with no meaningful public location needs no synthetic `href`. A
|
|
308
|
+
// reference is inert context: it overrides nothing, so it carries only lightweight optional
|
|
309
|
+
// `addedBy`/`addedAt` attribution, never override machinery.
|
|
263
310
|
type ExternalReference struct {
|
|
264
|
-
// When this reference was attached (RFC 3339 / trimmed-UTC per HDF timestamp convention).
|
|
265
|
-
AddedAt *time.Time
|
|
266
|
-
// Who attached this reference. Lightweight, flat attribution — a reference overrides
|
|
267
|
-
// nothing, so it has no chaining/superseding/disposition.
|
|
268
|
-
AddedBy *Identity
|
|
269
|
-
// Integrity hash of the
|
|
270
|
-
// `
|
|
271
|
-
|
|
272
|
-
//
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
//
|
|
276
|
-
//
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
|
|
284
|
-
//
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
//
|
|
295
|
-
//
|
|
296
|
-
//
|
|
297
|
-
//
|
|
298
|
-
//
|
|
299
|
-
|
|
300
|
-
//
|
|
301
|
-
//
|
|
302
|
-
|
|
303
|
-
//
|
|
304
|
-
//
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
//
|
|
308
|
-
//
|
|
309
|
-
//
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
//
|
|
313
|
-
//
|
|
314
|
-
|
|
315
|
-
|
|
311
|
+
// When this reference was attached (RFC 3339 / trimmed-UTC per HDF timestamp convention).
|
|
312
|
+
AddedAt *time.Time `json:"addedAt,omitempty"`
|
|
313
|
+
// Who attached this reference. Lightweight, flat attribution — a reference overrides
|
|
314
|
+
// nothing, so it has no chaining/superseding/disposition.
|
|
315
|
+
AddedBy *Identity `json:"addedBy,omitempty"`
|
|
316
|
+
// Integrity hash of the artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`).
|
|
317
|
+
// Applies both to an artifact retrievable at `href` and to one embedded here in `content`
|
|
318
|
+
// or `document` — beside embedded bytes it is what makes the copy verifiable rather than
|
|
319
|
+
// merely present.
|
|
320
|
+
Checksum *Checksum `json:"checksum,omitempty"`
|
|
321
|
+
// Optional lossless embedded copy of the artifact's bytes as a string, for artifacts
|
|
322
|
+
// `document` cannot hold: XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not
|
|
323
|
+
// valid UTF-8 text at all.
|
|
324
|
+
//
|
|
325
|
+
// `encoding` states how to read it back and is required alongside it. Set `mediaType` so a
|
|
326
|
+
// consumer knows what the bytes are, and `checksum` so the copy can be verified against the
|
|
327
|
+
// source.
|
|
328
|
+
//
|
|
329
|
+
// Carried verbatim — never reformatted, re-indented, or re-serialized.
|
|
330
|
+
Content *string `json:"content,omitempty"`
|
|
331
|
+
// Human-readable description of what is referenced. Satisfies the at-least-one rule on its
|
|
332
|
+
// own when neither id nor href is available.
|
|
333
|
+
Description *string `json:"description,omitempty"`
|
|
334
|
+
// Optional lossless embedded copy of the referenced artifact as a JSON object — the raw
|
|
335
|
+
// STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.
|
|
336
|
+
//
|
|
337
|
+
// JSON objects only. An artifact that is not a JSON object (XML, CSV, NDJSON, plain text, a
|
|
338
|
+
// JSON array, or bytes that are not text at all) embeds through `content` + `encoding`
|
|
339
|
+
// instead.
|
|
340
|
+
//
|
|
341
|
+
// Composes with `href`/`externalId` (which point at the artifact) and `checksum` (which
|
|
342
|
+
// ties the copy to the source): a single entry can both point and embed.
|
|
343
|
+
//
|
|
344
|
+
// HDF stays payload-agnostic — the content is carried untouched, never normalized into HDF
|
|
345
|
+
// fields — so this does not duplicate the source ontology (e.g. STIX rides here unchanged).
|
|
346
|
+
Document map[string]interface{} `json:"document,omitempty"`
|
|
347
|
+
// How to read `content` back into the artifact's bytes. 'utf-8' for text (XML, CSV, NDJSON,
|
|
348
|
+
// plain text, JavaScript-wrapped JSON); 'base64' for anything that is not valid UTF-8
|
|
349
|
+
// text.
|
|
350
|
+
//
|
|
351
|
+
// Required whenever `content` is present, and meaningless without it — an embedded copy
|
|
352
|
+
// whose encoding a consumer has to guess is not lossless.
|
|
353
|
+
Encoding *ExternalReferenceEncoding `json:"encoding,omitempty"`
|
|
354
|
+
// Identifier of the artifact within `sourceName` (e.g., 'CVE-2021-44228' for source 'cve',
|
|
355
|
+
// 'T1059' for 'mitre-att&ck'). Cite by id without needing a URL. Together with `sourceName`
|
|
356
|
+
// this is a URN.
|
|
357
|
+
ExternalID *string `json:"externalId,omitempty"`
|
|
358
|
+
// Location of the artifact. `uri-reference` (not `uri`) so a bare internal
|
|
359
|
+
// `#fragment`/`#uuid` reference is expressible alongside absolute URLs. Set it only when
|
|
360
|
+
// the location is meaningful to a reader — never a producer's local filesystem path.
|
|
361
|
+
Href *string `json:"href,omitempty"`
|
|
362
|
+
// Open token classifying the referenced/embedded payload, turning a bare reference into an
|
|
363
|
+
// enrichment envelope.
|
|
364
|
+
//
|
|
365
|
+
// Deliberately open (like `sourceName`/`rel`), not a closed enum.
|
|
366
|
+
//
|
|
367
|
+
// Documented starter vocabulary: 'threat-intel' (STIX/CTI object), 'annotation' (human
|
|
368
|
+
// triage note), 'exploitation' (EPSS/KEV signal carried as context), 'advisory'
|
|
369
|
+
// (vendor/security advisory).
|
|
370
|
+
//
|
|
371
|
+
// Use the `x-` prefix for custom kinds.
|
|
372
|
+
Kind *string `json:"kind,omitempty"`
|
|
373
|
+
// IANA media type of the artifact (RFC 6838), e.g., 'application/json', 'application/xml',
|
|
374
|
+
// 'text/csv'. Applies both to an artifact retrievable at `href` and to one embedded here in
|
|
375
|
+
// `content` or `document`.
|
|
376
|
+
MediaType *string `json:"mediaType,omitempty"`
|
|
377
|
+
// Open relationship token describing how this reference relates to the referencing object.
|
|
378
|
+
// Deliberately open (cf. OSCAL `rel` allow-other, RFC 8288 extension relations). Documented
|
|
379
|
+
// starter vocabulary: 'reference' (generic), 'definition' (defines the concept), 'evidence'
|
|
380
|
+
// (supporting evidence), 'investigate' (a live pivot to investigate), 'canonical' (the
|
|
381
|
+
// authoritative source).
|
|
382
|
+
Rel *string `json:"rel,omitempty"`
|
|
383
|
+
// Name of the external system/source being referenced (e.g., 'cve', 'mitre-att&ck', 'stix',
|
|
384
|
+
// 'taxii', or any vendor label). Open string — not a closed enum. Use the `x-` prefix
|
|
385
|
+
// convention for custom/experimental sources, mirroring `bomType`.
|
|
386
|
+
SourceName string `json:"sourceName"`
|
|
316
387
|
}
|
|
317
388
|
|
|
318
389
|
// Represents an identity that performed an action, such as capturing evidence or applying an
|
|
319
390
|
// override.
|
|
320
391
|
type Identity struct {
|
|
321
|
-
// Optional description of the identity or identity system, particularly useful when type is
|
|
322
|
-
// 'other'.
|
|
392
|
+
// Optional description of the identity or identity system, particularly useful when type is
|
|
393
|
+
// 'other'.
|
|
323
394
|
Description *string `json:"description,omitempty"`
|
|
324
|
-
// The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
395
|
+
// The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
325
396
|
Identifier string `json:"identifier"`
|
|
326
|
-
// The type of identifier.
|
|
327
|
-
//
|
|
328
|
-
// Use 'email' for email addresses, 'username' for user accounts, 'system' for deterministic
|
|
329
|
-
// non-interactive automation (CI jobs, cron, scanners), 'agent' for an AI/LLM agent acting
|
|
330
|
-
// with autonomy — kept distinct from 'system' so auditors can apply AI-specific scrutiny
|
|
331
|
-
// (e.g. 'an LLM proposed this' vs a deterministic job) and satisfy AI-source disclosure
|
|
332
|
-
// under frameworks like the EU AI Act and NIST AI RMF, 'simple' for basic string
|
|
333
|
-
// identifiers without additional classification, or 'other' for custom identity systems.
|
|
397
|
+
// The type of identifier.
|
|
398
|
+
//
|
|
399
|
+
// Use 'email' for email addresses, 'username' for user accounts, 'system' for deterministic
|
|
400
|
+
// non-interactive automation (CI jobs, cron, scanners), 'agent' for an AI/LLM agent acting
|
|
401
|
+
// with autonomy — kept distinct from 'system' so auditors can apply AI-specific scrutiny
|
|
402
|
+
// (e.g. 'an LLM proposed this' vs a deterministic job) and satisfy AI-source disclosure
|
|
403
|
+
// under frameworks like the EU AI Act and NIST AI RMF, 'simple' for basic string
|
|
404
|
+
// identifiers without additional classification, or 'other' for custom identity systems.
|
|
334
405
|
Type IdentityType `json:"type"`
|
|
335
406
|
}
|
|
336
407
|
|
|
337
408
|
// Cryptographic checksum for baseline integrity verification.
|
|
338
409
|
type Checksum struct {
|
|
339
|
-
// The hash algorithm used for the checksum.
|
|
410
|
+
// The hash algorithm used for the checksum.
|
|
340
411
|
Algorithm HashAlgorithm `json:"algorithm"`
|
|
341
|
-
// The checksum value.
|
|
412
|
+
// The checksum value.
|
|
342
413
|
Value string `json:"value"`
|
|
343
414
|
}
|
|
344
415
|
|
|
345
416
|
// Describes a group of requirements, such as those defined in a single file.
|
|
346
417
|
type RequirementGroup struct {
|
|
347
|
-
// The unique identifier for the group. Example: the relative path to the file specifying
|
|
348
|
-
// the requirements.
|
|
418
|
+
// The unique identifier for the group. Example: the relative path to the file specifying
|
|
419
|
+
// the requirements.
|
|
349
420
|
ID string `json:"id"`
|
|
350
|
-
// The set of requirements as specified by their ids in this group. Example: 'SV-238196'.
|
|
421
|
+
// The set of requirements as specified by their ids in this group. Example: 'SV-238196'.
|
|
351
422
|
Requirements []string `json:"requirements"`
|
|
352
|
-
// The title of the group - should be human readable.
|
|
423
|
+
// The title of the group - should be human readable.
|
|
353
424
|
Title *string `json:"title,omitempty"`
|
|
354
425
|
}
|
|
355
426
|
|
|
@@ -357,178 +428,184 @@ type RequirementGroup struct {
|
|
|
357
428
|
// expected configuration values with type information, comparison operators, and validation
|
|
358
429
|
// constraints, enabling traceability from policy through to scan results.
|
|
359
430
|
type Input struct {
|
|
360
|
-
// Validation constraints for the input value.
|
|
431
|
+
// Validation constraints for the input value.
|
|
361
432
|
Constraints *InputConstraints `json:"constraints,omitempty"`
|
|
362
|
-
// Human-readable description of what this input controls.
|
|
433
|
+
// Human-readable description of what this input controls.
|
|
363
434
|
Description *string `json:"description,omitempty"`
|
|
364
|
-
// The input name. Must be unique within a baseline or results document. Example:
|
|
365
|
-
// 'max_concurrent_sessions'.
|
|
435
|
+
// The input name. Must be unique within a baseline or results document. Example:
|
|
436
|
+
// 'max_concurrent_sessions'.
|
|
366
437
|
Name string `json:"name"`
|
|
367
|
-
// The comparison operator used when evaluating this input against observed values.
|
|
438
|
+
// The comparison operator used when evaluating this input against observed values.
|
|
368
439
|
Operator *ComparisonOperator `json:"operator,omitempty"`
|
|
369
|
-
// Whether this input must be provided. Defaults to false if omitted.
|
|
440
|
+
// Whether this input must be provided. Defaults to false if omitted.
|
|
370
441
|
Required *bool `json:"required,omitempty"`
|
|
371
|
-
// Whether this input contains sensitive data (passwords, keys). Sensitive values should be
|
|
372
|
-
// redacted in output. Defaults to false if omitted.
|
|
442
|
+
// Whether this input contains sensitive data (passwords, keys). Sensitive values should be
|
|
443
|
+
// redacted in output. Defaults to false if omitted.
|
|
373
444
|
Sensitive *bool `json:"sensitive,omitempty"`
|
|
374
|
-
// The data type of this input.
|
|
445
|
+
// The data type of this input.
|
|
375
446
|
Type *InputType `json:"type,omitempty"`
|
|
376
|
-
// The input value. Type should match the declared type field. Accepts any JSON value.
|
|
447
|
+
// The input value. Type should match the declared type field. Accepts any JSON value.
|
|
377
448
|
Value interface{} `json:"value,omitempty"`
|
|
378
449
|
}
|
|
379
450
|
|
|
380
451
|
// Validation constraints for an input value.
|
|
381
452
|
type InputConstraints struct {
|
|
382
|
-
// Enumeration of permitted values.
|
|
383
|
-
|
|
384
|
-
//
|
|
385
|
-
|
|
386
|
-
//
|
|
387
|
-
|
|
388
|
-
//
|
|
389
|
-
|
|
453
|
+
// Enumeration of permitted values. Each entry may be any JSON value, the same freedom
|
|
454
|
+
// Input.value has: an Array or Hash input enumerates container values, so no element type
|
|
455
|
+
// is imposed.
|
|
456
|
+
AllowedValues []interface{} `json:"allowedValues,omitempty"`
|
|
457
|
+
// Maximum allowed value (for Numeric inputs).
|
|
458
|
+
Max *float64 `json:"max,omitempty"`
|
|
459
|
+
// Minimum allowed value (for Numeric inputs).
|
|
460
|
+
Min *float64 `json:"min,omitempty"`
|
|
461
|
+
// Regular expression pattern the value must match (for String inputs).
|
|
462
|
+
Pattern *string `json:"pattern,omitempty"`
|
|
390
463
|
}
|
|
391
464
|
|
|
392
465
|
// Cryptographic integrity information for verifying the HDF file has not been tampered with. If
|
|
393
466
|
// algorithm is provided, checksum must also be provided, and vice versa.
|
|
394
467
|
type Integrity struct {
|
|
395
|
-
// The hash algorithm used for the checksum.
|
|
468
|
+
// The hash algorithm used for the checksum.
|
|
396
469
|
Algorithm *HashAlgorithm `json:"algorithm,omitempty"`
|
|
397
|
-
// The checksum value.
|
|
470
|
+
// The checksum value.
|
|
398
471
|
Checksum *string `json:"checksum,omitempty"`
|
|
399
|
-
// Optional cryptographic signature.
|
|
472
|
+
// Optional cryptographic signature.
|
|
400
473
|
Signature *string `json:"signature,omitempty"`
|
|
401
|
-
// Identifier of who signed this file.
|
|
474
|
+
// Identifier of who signed this file.
|
|
402
475
|
SignedBy *string `json:"signedBy,omitempty"`
|
|
403
476
|
}
|
|
404
477
|
|
|
405
478
|
// A requirement that has been evaluated, including any findings.
|
|
406
479
|
type EvaluatedRequirement struct {
|
|
407
|
-
// Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
|
|
408
|
-
// components[] on hdf-system for component-level package inventories. One entry per matched
|
|
409
|
-
// package signature (scanners often report multiple CPE variations per CVE).
|
|
480
|
+
// Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
|
|
481
|
+
// components[] on hdf-system for component-level package inventories. One entry per matched
|
|
482
|
+
// package signature (scanners often report multiple CPE variations per CVE).
|
|
410
483
|
AffectedPackages []AffectedPackage `json:"affectedPackages,omitempty"`
|
|
411
|
-
// Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding
|
|
412
|
-
// may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base
|
|
413
|
-
// metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for
|
|
414
|
-
// risk adjustment. See cvss.schema.json.
|
|
484
|
+
// Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding
|
|
485
|
+
// may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base
|
|
486
|
+
// metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for
|
|
487
|
+
// risk adjustment. See cvss.schema.json.
|
|
415
488
|
Cvss []Cvss `json:"cvss,omitempty"`
|
|
416
|
-
// Common Weakness Enumeration IDs associated with this finding. Use CWE-N format with no
|
|
417
|
-
// leading zeros (matches the MITRE catalog convention). For NIST control mappings derived
|
|
418
|
-
// from CWE, see tags.nist.
|
|
489
|
+
// Common Weakness Enumeration IDs associated with this finding. Use CWE-N format with no
|
|
490
|
+
// leading zeros (matches the MITRE catalog convention). For NIST control mappings derived
|
|
491
|
+
// from CWE, see tags.nist.
|
|
419
492
|
Cwe []string `json:"cwe,omitempty"`
|
|
420
|
-
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
421
|
-
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
422
|
-
// 'fix', 'rationale'.
|
|
493
|
+
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
494
|
+
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
495
|
+
// 'fix', 'rationale'.
|
|
423
496
|
Descriptions []Description `json:"descriptions"`
|
|
424
|
-
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
425
|
-
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
426
|
-
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
427
|
-
// POAMs apply.
|
|
497
|
+
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
498
|
+
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
499
|
+
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
500
|
+
// POAMs apply.
|
|
428
501
|
Disposition *OverrideType `json:"disposition,omitempty"`
|
|
429
|
-
// Checksum of this requirement's resolved effective posture, for per-control change
|
|
430
|
-
// detection in continuous monitoring.
|
|
431
|
-
//
|
|
432
|
-
// sha256 over the canonical JSON object with keys status, impact, disposition (in that
|
|
433
|
-
// order), holding the resolved effective status, resolved effective impact, and governing
|
|
434
|
-
// override type (null when nothing governs), with override expiry anchored to the document
|
|
435
|
-
// timestamp.
|
|
436
|
-
//
|
|
437
|
-
// Flips exactly when the operative status, impact, or disposition changes; stable under all
|
|
438
|
-
// other churn (result details, timestamps, tags).
|
|
439
|
-
//
|
|
440
|
-
// Optional; stamped by tooling (hdf convert, hdf amend apply).
|
|
502
|
+
// Checksum of this requirement's resolved effective posture, for per-control change
|
|
503
|
+
// detection in continuous monitoring.
|
|
504
|
+
//
|
|
505
|
+
// sha256 over the canonical JSON object with keys status, impact, disposition (in that
|
|
506
|
+
// order), holding the resolved effective status, resolved effective impact, and governing
|
|
507
|
+
// override type (null when nothing governs), with override expiry anchored to the document
|
|
508
|
+
// timestamp.
|
|
509
|
+
//
|
|
510
|
+
// Flips exactly when the operative status, impact, or disposition changes; stable under all
|
|
511
|
+
// other churn (result details, timestamps, tags).
|
|
512
|
+
//
|
|
513
|
+
// Optional; stamped by tooling (hdf convert, hdf amend apply).
|
|
441
514
|
EffectiveChecksum *Checksum `json:"effectiveChecksum,omitempty"`
|
|
442
|
-
// The current effective impact score (0.0–1.0) after applying the most recent non-expired
|
|
443
|
-
// override with an impact field. Absent when no impact overrides apply; consumers should
|
|
444
|
-
// use the requirement's impact field in that case.
|
|
515
|
+
// The current effective impact score (0.0–1.0) after applying the most recent non-expired
|
|
516
|
+
// override with an impact field. Absent when no impact overrides apply; consumers should
|
|
517
|
+
// use the requirement's impact field in that case.
|
|
445
518
|
EffectiveImpact *float64 `json:"effectiveImpact,omitempty"`
|
|
446
|
-
// The current effective compliance status of this requirement after applying the most
|
|
447
|
-
// recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
448
|
-
// no status-bearing overrides exist.
|
|
519
|
+
// The current effective compliance status of this requirement after applying the most
|
|
520
|
+
// recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
521
|
+
// no status-bearing overrides exist.
|
|
449
522
|
EffectiveStatus *ResultStatus `json:"effectiveStatus,omitempty"`
|
|
450
|
-
// FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
451
|
-
// alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
452
|
-
// exploited.
|
|
523
|
+
// FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
524
|
+
// alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
525
|
+
// exploited.
|
|
453
526
|
Epss *Epss `json:"epss,omitempty"`
|
|
454
|
-
// Supporting evidence for this requirement's findings, such as screenshots, code samples,
|
|
455
|
-
// or log excerpts.
|
|
527
|
+
// Supporting evidence for this requirement's findings, such as screenshots, code samples,
|
|
528
|
+
// or log excerpts.
|
|
456
529
|
Evidence []Evidence `json:"evidence,omitempty"`
|
|
457
|
-
// CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
458
|
-
// dueDate carry the federal patching deadline.
|
|
530
|
+
// CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
531
|
+
// dueDate carry the federal patching deadline.
|
|
459
532
|
Kev *Kev `json:"kev,omitempty"`
|
|
460
|
-
// Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
461
|
-
// POAMs do NOT change effectiveStatus - they track the work being done to address a
|
|
462
|
-
// failure. Separate from statusOverrides which DO change status.
|
|
533
|
+
// Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
534
|
+
// POAMs do NOT change effectiveStatus - they track the work being done to address a
|
|
535
|
+
// failure. Separate from statusOverrides which DO change status.
|
|
463
536
|
Poams []PoamElement `json:"poams,omitempty"`
|
|
464
|
-
// The set of all tests within the requirement and their results.
|
|
537
|
+
// The set of all tests within the requirement and their results.
|
|
465
538
|
Results []RequirementResult `json:"results"`
|
|
466
|
-
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
467
|
-
// clarity.
|
|
539
|
+
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
540
|
+
// clarity.
|
|
468
541
|
Severity *Severity `json:"severity,omitempty"`
|
|
469
|
-
// The explicit location of the requirement within the source code.
|
|
542
|
+
// The explicit location of the requirement within the source code.
|
|
470
543
|
SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
|
|
471
|
-
// Chronological history of all overrides applied to this requirement. Overrides are
|
|
472
|
-
// intentional changes to the compliance status and/or impact score (waivers, attestations,
|
|
473
|
-
// false positives, risk adjustments). Array order is NOT significant: consumers resolve the
|
|
474
|
-
// governing override by appliedAt (the most recently applied non-expired one), never by
|
|
475
|
-
// position. Earlier revisions of this description asked for most-recent-first, but nothing
|
|
476
|
-
// enforces it and producers commonly append, so position is frequently the opposite of
|
|
477
|
-
// recency. Preserves full audit trail.
|
|
544
|
+
// Chronological history of all overrides applied to this requirement. Overrides are
|
|
545
|
+
// intentional changes to the compliance status and/or impact score (waivers, attestations,
|
|
546
|
+
// false positives, risk adjustments). Array order is NOT significant: consumers resolve the
|
|
547
|
+
// governing override by appliedAt (the most recently applied non-expired one), never by
|
|
548
|
+
// position. Earlier revisions of this description asked for most-recent-first, but nothing
|
|
549
|
+
// enforces it and producers commonly append, so position is frequently the opposite of
|
|
550
|
+
// recency. Preserves full audit trail.
|
|
478
551
|
StatusOverrides []StatusOverride `json:"statusOverrides,omitempty"`
|
|
479
|
-
// The requirement identifier
|
|
552
|
+
// The requirement identifier, naming the requirement itself rather than one finding of it.
|
|
553
|
+
// Example: 'SV-238196'. Several entries in one baseline may legitimately carry the same id
|
|
554
|
+
// (one scanner reporting one CVE against several packages, or an overlay restating what it
|
|
555
|
+
// inherits), so an id is not an instance key: index requirements as id to list, never id to
|
|
556
|
+
// one, and an amendment addressing an id applies to every entry carrying it.
|
|
480
557
|
ID string `json:"id"`
|
|
481
|
-
// The impactfulness or severity (0.0 to 1.0).
|
|
558
|
+
// The impactfulness or severity (0.0 to 1.0).
|
|
482
559
|
Impact float64 `json:"impact"`
|
|
483
|
-
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
560
|
+
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
484
561
|
Tags map[string]interface{} `json:"tags"`
|
|
485
|
-
// Whether the requirement is mandatory within its baseline.
|
|
486
|
-
//
|
|
487
|
-
// Distinct from severity (risk weight) and status (lifecycle state).
|
|
488
|
-
//
|
|
489
|
-
// Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:'
|
|
490
|
-
// markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may
|
|
491
|
-
// carry richer semantics; layer those onto props[]/tags{}).
|
|
492
|
-
//
|
|
493
|
-
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
494
|
-
// convention.
|
|
562
|
+
// Whether the requirement is mandatory within its baseline.
|
|
563
|
+
//
|
|
564
|
+
// Distinct from severity (risk weight) and status (lifecycle state).
|
|
565
|
+
//
|
|
566
|
+
// Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:'
|
|
567
|
+
// markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may
|
|
568
|
+
// carry richer semantics; layer those onto props[]/tags{}).
|
|
569
|
+
//
|
|
570
|
+
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
571
|
+
// convention.
|
|
495
572
|
Applicability *Applicability `json:"applicability,omitempty"`
|
|
496
|
-
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
497
|
-
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
498
|
-
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
499
|
-
// underlying source code.
|
|
573
|
+
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
574
|
+
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
575
|
+
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
576
|
+
// underlying source code.
|
|
500
577
|
Code *string `json:"code,omitempty"`
|
|
501
|
-
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
502
|
-
// categories.
|
|
503
|
-
//
|
|
504
|
-
// 'policy' = an authored governance statement; 'procedure' = a documented process;
|
|
505
|
-
// 'technical' = an enforced technical configuration; 'management' = a
|
|
506
|
-
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
507
|
-
// AT, IR, MA families).
|
|
508
|
-
//
|
|
509
|
-
// Optional: when omitted, consumers may infer heuristically from family/id but should not
|
|
510
|
-
// assume a default.
|
|
578
|
+
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
579
|
+
// categories.
|
|
580
|
+
//
|
|
581
|
+
// 'policy' = an authored governance statement; 'procedure' = a documented process;
|
|
582
|
+
// 'technical' = an enforced technical configuration; 'management' = a
|
|
583
|
+
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
584
|
+
// AT, IR, MA families).
|
|
585
|
+
//
|
|
586
|
+
// Optional: when omitted, consumers may infer heuristically from family/id but should not
|
|
587
|
+
// assume a default.
|
|
511
588
|
ControlType *ControlType `json:"controlType,omitempty"`
|
|
512
|
-
// Optional references to external artifacts relevant to this requirement (CTI/STIX
|
|
513
|
-
// correlation, advisories, control/definition sources, or any URI-addressable artifact).
|
|
514
|
-
// Applies to both baseline requirement definitions and evaluated requirements. Inert
|
|
515
|
-
// context; see External_Reference.
|
|
589
|
+
// Optional references to external artifacts relevant to this requirement (CTI/STIX
|
|
590
|
+
// correlation, advisories, control/definition sources, or any URI-addressable artifact).
|
|
591
|
+
// Applies to both baseline requirement definitions and evaluated requirements. Inert
|
|
592
|
+
// context; see External_Reference.
|
|
516
593
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
517
|
-
// The set of references to external documents.
|
|
594
|
+
// The set of references to external documents.
|
|
518
595
|
Refs []Reference `json:"refs,omitempty"`
|
|
519
|
-
// The title - is nullable.
|
|
596
|
+
// The title - is nullable.
|
|
520
597
|
Title *string `json:"title,omitempty"`
|
|
521
|
-
// How this requirement is intended to be verified.
|
|
522
|
-
//
|
|
523
|
-
// Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the
|
|
524
|
-
// requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs);
|
|
525
|
-
// 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule
|
|
526
|
-
// lacking a fix).
|
|
527
|
-
//
|
|
528
|
-
// 'automated' = a check exists and runs without operator action; 'hybrid' = part automated,
|
|
529
|
-
// part manual.
|
|
530
|
-
//
|
|
531
|
-
// Optional: when omitted, consumers should not infer a default.
|
|
598
|
+
// How this requirement is intended to be verified.
|
|
599
|
+
//
|
|
600
|
+
// Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the
|
|
601
|
+
// requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs);
|
|
602
|
+
// 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule
|
|
603
|
+
// lacking a fix).
|
|
604
|
+
//
|
|
605
|
+
// 'automated' = a check exists and runs without operator action; 'hybrid' = part automated,
|
|
606
|
+
// part manual.
|
|
607
|
+
//
|
|
608
|
+
// Optional: when omitted, consumers should not infer a default.
|
|
532
609
|
VerificationMethod *VerificationMethodEnum `json:"verificationMethod,omitempty"`
|
|
533
610
|
}
|
|
534
611
|
|
|
@@ -541,35 +618,35 @@ type EvaluatedRequirement struct {
|
|
|
541
618
|
// name/version implicitly, so either may stand on its own; the name+version+ecosystem combination
|
|
542
619
|
// is the explicit form for sources without formal identifiers.
|
|
543
620
|
type AffectedPackage struct {
|
|
544
|
-
// Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
|
|
545
|
-
// 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
|
|
546
|
-
// system) are enforced here. Use `hdf-utilities.parseCpe` for full-grammar parsing.
|
|
547
|
-
// Example: `cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*`.
|
|
621
|
+
// Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
|
|
622
|
+
// 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
|
|
623
|
+
// system) are enforced here. Use `hdf-utilities.parseCpe` for full-grammar parsing.
|
|
624
|
+
// Example: `cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*`.
|
|
548
625
|
Cpe *string `json:"cpe,omitempty"`
|
|
549
|
-
// The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
550
|
-
// anything outside the listed language/OS package managers.
|
|
626
|
+
// The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
627
|
+
// anything outside the listed language/OS package managers.
|
|
551
628
|
Ecosystem *Ecosystem `json:"ecosystem,omitempty"`
|
|
552
|
-
// Optional version string identifying the first release that contains the fix for the
|
|
553
|
-
// vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes
|
|
554
|
-
// 'openssl@1.1.1k'.
|
|
629
|
+
// Optional version string identifying the first release that contains the fix for the
|
|
630
|
+
// vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes
|
|
631
|
+
// 'openssl@1.1.1k'.
|
|
555
632
|
FixedInVersion *string `json:"fixedInVersion,omitempty"`
|
|
556
|
-
// The package name as published in its ecosystem. Examples: 'openssl' (rpm), 'lodash'
|
|
557
|
-
// (npm), 'org.apache.logging.log4j:log4j-core' (maven, group:artifact).
|
|
633
|
+
// The package name as published in its ecosystem. Examples: 'openssl' (rpm), 'lodash'
|
|
634
|
+
// (npm), 'org.apache.logging.log4j:log4j-core' (maven, group:artifact).
|
|
558
635
|
Name *string `json:"name,omitempty"`
|
|
559
|
-
// Optional Package URL (PURL) identifying the affected package.
|
|
560
|
-
//
|
|
561
|
-
// Validated leniently: only the 'pkg:TYPE/' scheme prefix is enforced here, where TYPE
|
|
562
|
-
// follows the PURL grammar (a letter followed by letters, digits, '.', '+', or '-') and is
|
|
563
|
-
// matched case-insensitively to mirror `hdf-utilities.parsePurl`'s accept-and-warn
|
|
564
|
-
// behavior.
|
|
565
|
-
//
|
|
566
|
-
// Use `parsePurl` for full PURL parsing.
|
|
567
|
-
//
|
|
568
|
-
// Example: 'pkg:rpm/redhat/openssl@1.1.1k-7.el8_4?arch=x86_64'.
|
|
636
|
+
// Optional Package URL (PURL) identifying the affected package.
|
|
637
|
+
//
|
|
638
|
+
// Validated leniently: only the 'pkg:TYPE/' scheme prefix is enforced here, where TYPE
|
|
639
|
+
// follows the PURL grammar (a letter followed by letters, digits, '.', '+', or '-') and is
|
|
640
|
+
// matched case-insensitively to mirror `hdf-utilities.parsePurl`'s accept-and-warn
|
|
641
|
+
// behavior.
|
|
642
|
+
//
|
|
643
|
+
// Use `parsePurl` for full PURL parsing.
|
|
644
|
+
//
|
|
645
|
+
// Example: 'pkg:rpm/redhat/openssl@1.1.1k-7.el8_4?arch=x86_64'.
|
|
569
646
|
Purl *string `json:"purl,omitempty"`
|
|
570
|
-
// The exact version of the package that the vulnerability scanner observed. Use the
|
|
571
|
-
// ecosystem's native version string verbatim (e.g., '1.1.1k-7.el8_4' for rpm, '4.17.20' for
|
|
572
|
-
// npm).
|
|
647
|
+
// The exact version of the package that the vulnerability scanner observed. Use the
|
|
648
|
+
// ecosystem's native version string verbatim (e.g., '1.1.1k-7.el8_4' for rpm, '4.17.20' for
|
|
649
|
+
// npm).
|
|
573
650
|
Version *string `json:"version,omitempty"`
|
|
574
651
|
}
|
|
575
652
|
|
|
@@ -580,59 +657,59 @@ type AffectedPackage struct {
|
|
|
580
657
|
// per version, correct values per metric) is performed by the hdf-utilities `validateCvssVector`
|
|
581
658
|
// helper rather than at the schema layer.
|
|
582
659
|
type Cvss struct {
|
|
583
|
-
// The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
|
|
584
|
-
// vendor-published severity before consumer enrichment.
|
|
660
|
+
// The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
|
|
661
|
+
// vendor-published severity before consumer enrichment.
|
|
585
662
|
BaseScore *float64 `json:"baseScore,omitempty"`
|
|
586
|
-
// Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
587
|
-
// 'none' or 'critical' bands; map accordingly when populating.
|
|
663
|
+
// Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
664
|
+
// 'none' or 'critical' bands; map accordingly when populating.
|
|
588
665
|
BaseSeverity *CVSSSeverity `json:"baseSeverity,omitempty"`
|
|
589
|
-
// Optional Base metric group vector string as emitted by the source (e.g.,
|
|
590
|
-
// 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H').
|
|
591
|
-
//
|
|
592
|
-
// For CVSS 2.0 the version prefix is omitted.
|
|
593
|
-
//
|
|
594
|
-
// Some vendor tools emit a final baseScore without the vector — in that case this field is
|
|
595
|
-
// absent and the score cannot be recomputed or decomposed.
|
|
596
|
-
//
|
|
597
|
-
// The pattern accepts any version-prefixed or prefix-less metric token sequence; semantic
|
|
598
|
-
// validity of individual metrics is checked by hdf-utilities, not by the schema.
|
|
666
|
+
// Optional Base metric group vector string as emitted by the source (e.g.,
|
|
667
|
+
// 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H').
|
|
668
|
+
//
|
|
669
|
+
// For CVSS 2.0 the version prefix is omitted.
|
|
670
|
+
//
|
|
671
|
+
// Some vendor tools emit a final baseScore without the vector — in that case this field is
|
|
672
|
+
// absent and the score cannot be recomputed or decomposed.
|
|
673
|
+
//
|
|
674
|
+
// The pattern accepts any version-prefixed or prefix-less metric token sequence; semantic
|
|
675
|
+
// validity of individual metrics is checked by hdf-utilities, not by the schema.
|
|
599
676
|
BaseVector *string `json:"baseVector,omitempty"`
|
|
600
|
-
// Optional final score after combining Base + Threat + Environmental metrics. This is the
|
|
601
|
-
// score consumers should treat as authoritative for risk decisions when present.
|
|
677
|
+
// Optional final score after combining Base + Threat + Environmental metrics. This is the
|
|
678
|
+
// score consumers should treat as authoritative for risk decisions when present.
|
|
602
679
|
ComputedScore *float64 `json:"computedScore,omitempty"`
|
|
603
|
-
// Qualitative severity band corresponding to computedScore. Same band convention as
|
|
604
|
-
// baseSeverity.
|
|
680
|
+
// Qualitative severity band corresponding to computedScore. Same band convention as
|
|
681
|
+
// baseSeverity.
|
|
605
682
|
ComputedSeverity *CVSSSeverity `json:"computedSeverity,omitempty"`
|
|
606
|
-
// Optional score (0.0–10.0) recomputed after applying Environmental metrics.
|
|
683
|
+
// Optional score (0.0–10.0) recomputed after applying Environmental metrics.
|
|
607
684
|
EnvironmentalScore *float64 `json:"environmentalScore,omitempty"`
|
|
608
|
-
// Optional Environmental metric group vector segment (e.g., 'MAV:N/CR:H/IR:H/AR:H').
|
|
609
|
-
// Consumer-supplied — reflects the deployment context (criticality, mitigations, network
|
|
610
|
-
// exposure).
|
|
685
|
+
// Optional Environmental metric group vector segment (e.g., 'MAV:N/CR:H/IR:H/AR:H').
|
|
686
|
+
// Consumer-supplied — reflects the deployment context (criticality, mitigations, network
|
|
687
|
+
// exposure).
|
|
611
688
|
EnvironmentalVector *string `json:"environmentalVector,omitempty"`
|
|
612
|
-
// Optional identifier the CVSS data is associated with — most commonly a CVE ID (e.g.,
|
|
613
|
-
// 'CVE-2024-12345'), but may also be a vendor advisory ID, GHSA, or similar.
|
|
689
|
+
// Optional identifier the CVSS data is associated with — most commonly a CVE ID (e.g.,
|
|
690
|
+
// 'CVE-2024-12345'), but may also be a vendor advisory ID, GHSA, or similar.
|
|
614
691
|
Source *string `json:"source,omitempty"`
|
|
615
|
-
// Optional Supplemental metric group vector segment (CVSS 4.0 only). Examples:
|
|
616
|
-
// 'S:P/AU:N/V:C/RE:M/U:Amber'. Per CVSS 4.0 spec, supplemental metrics convey additional
|
|
617
|
-
// context but have no impact on the computed score.
|
|
692
|
+
// Optional Supplemental metric group vector segment (CVSS 4.0 only). Examples:
|
|
693
|
+
// 'S:P/AU:N/V:C/RE:M/U:Amber'. Per CVSS 4.0 spec, supplemental metrics convey additional
|
|
694
|
+
// context but have no impact on the computed score.
|
|
618
695
|
SupplementalVector *string `json:"supplementalVector,omitempty"`
|
|
619
|
-
// Optional score (0.0–10.0) recomputed after applying Threat metrics. Always less than or
|
|
620
|
-
// equal to baseScore in practice.
|
|
696
|
+
// Optional score (0.0–10.0) recomputed after applying Threat metrics. Always less than or
|
|
697
|
+
// equal to baseScore in practice.
|
|
621
698
|
ThreatScore *float64 `json:"threatScore,omitempty"`
|
|
622
|
-
// Optional Threat metric group vector segment (e.g., 'E:U/RL:O/RC:C' for CVSS 3.1, or 'E:A'
|
|
623
|
-
// for CVSS 4.0). Consumer-supplied — captures real-world exploitation and remediation
|
|
624
|
-
// context the vendor cannot know.
|
|
699
|
+
// Optional Threat metric group vector segment (e.g., 'E:U/RL:O/RC:C' for CVSS 3.1, or 'E:A'
|
|
700
|
+
// for CVSS 4.0). Consumer-supplied — captures real-world exploitation and remediation
|
|
701
|
+
// context the vendor cannot know.
|
|
625
702
|
ThreatVector *string `json:"threatVector,omitempty"`
|
|
626
|
-
// The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
627
|
-
// or 4.0; legacy data may use 2.0 or 3.0.
|
|
703
|
+
// The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
704
|
+
// or 4.0; legacy data may use 2.0 or 3.0.
|
|
628
705
|
Version Version `json:"version"`
|
|
629
706
|
}
|
|
630
707
|
|
|
631
708
|
type Description struct {
|
|
632
|
-
// The description text content.
|
|
709
|
+
// The description text content.
|
|
633
710
|
Data string `json:"data"`
|
|
634
|
-
// Description category. The 'default' label is required for the primary description. Common
|
|
635
|
-
// labels: 'default', 'check', 'fix', 'rationale'. Tools may use custom labels.
|
|
711
|
+
// Description category. The 'default' label is required for the primary description. Common
|
|
712
|
+
// labels: 'default', 'check', 'fix', 'rationale'. Tools may use custom labels.
|
|
636
713
|
Label string `json:"label"`
|
|
637
714
|
}
|
|
638
715
|
|
|
@@ -640,57 +717,57 @@ type Description struct {
|
|
|
640
717
|
// fields are required when an Epss object is present; the date disambiguates which day's score this
|
|
641
718
|
// is, since EPSS recomputes daily.
|
|
642
719
|
type Epss struct {
|
|
643
|
-
// ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
|
|
720
|
+
// ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
|
|
644
721
|
Date string `json:"date"`
|
|
645
|
-
// Rank of this score relative to all scored CVEs, expressed as a value between 0.0 and 1.0
|
|
646
|
-
// inclusive. A percentile of 0.99 means this CVE is scored at or above 99% of all scored
|
|
647
|
-
// CVEs.
|
|
722
|
+
// Rank of this score relative to all scored CVEs, expressed as a value between 0.0 and 1.0
|
|
723
|
+
// inclusive. A percentile of 0.99 means this CVE is scored at or above 99% of all scored
|
|
724
|
+
// CVEs.
|
|
648
725
|
Percentile float64 `json:"percentile"`
|
|
649
|
-
// Exploit probability as a value between 0.0 and 1.0 inclusive. Higher values indicate
|
|
650
|
-
// greater predicted likelihood of exploitation in the next 30 days. Example: 0.97532 means
|
|
651
|
-
// roughly a 97.5% predicted probability.
|
|
726
|
+
// Exploit probability as a value between 0.0 and 1.0 inclusive. Higher values indicate
|
|
727
|
+
// greater predicted likelihood of exploitation in the next 30 days. Example: 0.97532 means
|
|
728
|
+
// roughly a 97.5% predicted probability.
|
|
652
729
|
Score float64 `json:"score"`
|
|
653
730
|
}
|
|
654
731
|
|
|
655
732
|
// Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts,
|
|
656
733
|
// or URLs.
|
|
657
734
|
type Evidence struct {
|
|
658
|
-
// Timestamp when this evidence was captured. ISO 8601 format.
|
|
735
|
+
// Timestamp when this evidence was captured. ISO 8601 format.
|
|
659
736
|
CapturedAt *time.Time `json:"capturedAt,omitempty"`
|
|
660
|
-
// Identity of who or what captured this evidence.
|
|
737
|
+
// Identity of who or what captured this evidence.
|
|
661
738
|
CapturedBy *Identity `json:"capturedBy,omitempty"`
|
|
662
|
-
// The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs:
|
|
663
|
-
// the raw text. For URLs: the URL string. Must not be empty. When encoding is 'base64',
|
|
664
|
-
// data must be bare base64 matching ^[0-9A-Za-z+/]+={0,2}$ (OSCAL's Base64Datatype): no
|
|
665
|
-
// data: URI prefix, URL, or line breaks.
|
|
739
|
+
// The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs:
|
|
740
|
+
// the raw text. For URLs: the URL string. Must not be empty. When encoding is 'base64',
|
|
741
|
+
// data must be bare base64 matching ^[0-9A-Za-z+/]+={0,2}$ (OSCAL's Base64Datatype): no
|
|
742
|
+
// data: URI prefix, URL, or line breaks.
|
|
666
743
|
Data string `json:"data"`
|
|
667
|
-
// Human-readable description of what this evidence shows.
|
|
744
|
+
// Human-readable description of what this evidence shows.
|
|
668
745
|
Description *string `json:"description,omitempty"`
|
|
669
|
-
// Encoding used for the data. Example: 'base64', 'utf-8'. The value 'base64' (exactly,
|
|
670
|
-
// lowercase) requires data to be bare base64.
|
|
746
|
+
// Encoding used for the data. Example: 'base64', 'utf-8'. The value 'base64' (exactly,
|
|
747
|
+
// lowercase) requires data to be bare base64.
|
|
671
748
|
Encoding *string `json:"encoding,omitempty"`
|
|
672
|
-
// MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'.
|
|
749
|
+
// MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'.
|
|
673
750
|
MIMEType *string `json:"mimeType,omitempty"`
|
|
674
|
-
// Size of the evidence data in bytes.
|
|
751
|
+
// Size of the evidence data in bytes.
|
|
675
752
|
Size *float64 `json:"size,omitempty"`
|
|
676
|
-
// The type of evidence being provided.
|
|
753
|
+
// The type of evidence being provided.
|
|
677
754
|
Type EvidenceType `json:"type"`
|
|
678
755
|
}
|
|
679
756
|
|
|
680
757
|
// CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
681
758
|
// dueDate carry the federal patching deadline.
|
|
682
759
|
type Kev struct {
|
|
683
|
-
// ISO 8601 calendar date (YYYY-MM-DD) the vulnerability was added to the CISA KEV catalog.
|
|
684
|
-
// Required when inKev is true.
|
|
760
|
+
// ISO 8601 calendar date (YYYY-MM-DD) the vulnerability was added to the CISA KEV catalog.
|
|
761
|
+
// Required when inKev is true.
|
|
685
762
|
DateAdded *string `json:"dateAdded,omitempty"`
|
|
686
|
-
// ISO 8601 calendar date (YYYY-MM-DD) by which federal agencies must remediate per CISA BOD
|
|
687
|
-
// 22-01. Normally later than dateAdded, but the schema does not enforce ordering because
|
|
688
|
-
// CISA occasionally adjusts published dates. Required when inKev is true.
|
|
763
|
+
// ISO 8601 calendar date (YYYY-MM-DD) by which federal agencies must remediate per CISA BOD
|
|
764
|
+
// 22-01. Normally later than dateAdded, but the schema does not enforce ordering because
|
|
765
|
+
// CISA occasionally adjusts published dates. Required when inKev is true.
|
|
689
766
|
DueDate *string `json:"dueDate,omitempty"`
|
|
690
|
-
// Whether this vulnerability is currently in the CISA Known Exploited Vulnerabilities
|
|
691
|
-
// catalog. When true, dateAdded and dueDate are required.
|
|
767
|
+
// Whether this vulnerability is currently in the CISA Known Exploited Vulnerabilities
|
|
768
|
+
// catalog. When true, dateAdded and dueDate are required.
|
|
692
769
|
InKev bool `json:"inKev"`
|
|
693
|
-
// CISA's notes describing the vulnerability, observed exploitation, or remediation guidance.
|
|
770
|
+
// CISA's notes describing the vulnerability, observed exploitation, or remediation guidance.
|
|
694
771
|
Notes *string `json:"notes,omitempty"`
|
|
695
772
|
}
|
|
696
773
|
|
|
@@ -698,54 +775,54 @@ type Kev struct {
|
|
|
698
775
|
// POAMs do NOT change the effectiveStatus - the requirement remains in its current state
|
|
699
776
|
// while the POA&M tracks remediation efforts.
|
|
700
777
|
type PoamElement struct {
|
|
701
|
-
// Timestamp when this POA&M was created. ISO 8601 format.
|
|
778
|
+
// Timestamp when this POA&M was created. ISO 8601 format.
|
|
702
779
|
AppliedAt time.Time `json:"appliedAt"`
|
|
703
|
-
// Identity of who created this POA&M. For simple cases, use type 'simple' with just an
|
|
704
|
-
// identifier.
|
|
780
|
+
// Identity of who created this POA&M. For simple cases, use type 'simple' with just an
|
|
781
|
+
// identifier.
|
|
705
782
|
AppliedBy Identity `json:"appliedBy"`
|
|
706
|
-
// Supporting evidence for this POA&M, such as documentation of compensating controls or
|
|
707
|
-
// mitigation implementation.
|
|
783
|
+
// Supporting evidence for this POA&M, such as documentation of compensating controls or
|
|
784
|
+
// mitigation implementation.
|
|
708
785
|
Evidence []Evidence `json:"evidence,omitempty"`
|
|
709
|
-
// Required deadline for this POA&M. A POA&M is a time-boxed acceptance of an open finding;
|
|
710
|
-
// without a deadline it lets a failing requirement duck remediation indefinitely. Source a
|
|
711
|
-
// real date (e.g. a remediation target or vendor-fix date) — never a wall-clock default.
|
|
712
|
-
// ISO 8601 format.
|
|
786
|
+
// Required deadline for this POA&M. A POA&M is a time-boxed acceptance of an open finding;
|
|
787
|
+
// without a deadline it lets a failing requirement duck remediation indefinitely. Source a
|
|
788
|
+
// real date (e.g. a remediation target or vendor-fix date) — never a wall-clock default.
|
|
789
|
+
// ISO 8601 format.
|
|
713
790
|
ExpiresAt time.Time `json:"expiresAt"`
|
|
714
|
-
// Detailed explanation of the plan, including what actions will be taken.
|
|
791
|
+
// Detailed explanation of the plan, including what actions will be taken.
|
|
715
792
|
Explanation string `json:"explanation"`
|
|
716
|
-
// Optional array of milestones tracking progress toward completion.
|
|
793
|
+
// Optional array of milestones tracking progress toward completion.
|
|
717
794
|
Milestones []Milestone `json:"milestones,omitempty"`
|
|
718
|
-
// SHA-256 checksum of the previous amendment in chronological order. Each amendment's
|
|
719
|
-
// checksum is recorded by the NEXT one, so editing an amendment in place is detectable —
|
|
720
|
-
// provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment,
|
|
721
|
-
// the document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
722
|
-
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
723
|
-
// non-repudiation. Omitted on the first amendment on a requirement.
|
|
795
|
+
// SHA-256 checksum of the previous amendment in chronological order. Each amendment's
|
|
796
|
+
// checksum is recorded by the NEXT one, so editing an amendment in place is detectable —
|
|
797
|
+
// provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment,
|
|
798
|
+
// the document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
799
|
+
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
800
|
+
// non-repudiation. Omitted on the first amendment on a requirement.
|
|
724
801
|
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
725
|
-
// Optional digital signature for enhanced trust and non-repudiation.
|
|
802
|
+
// Optional digital signature for enhanced trust and non-repudiation.
|
|
726
803
|
Signature *Signature `json:"signature,omitempty"`
|
|
727
|
-
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
728
|
-
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
729
|
-
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
804
|
+
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
805
|
+
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
806
|
+
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
730
807
|
Type POAMType `json:"type"`
|
|
731
808
|
}
|
|
732
809
|
|
|
733
810
|
// A milestone or task within a POA&M remediation plan.
|
|
734
811
|
type Milestone struct {
|
|
735
|
-
// Actual completion timestamp. ISO 8601 format.
|
|
812
|
+
// Actual completion timestamp. ISO 8601 format.
|
|
736
813
|
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
|
737
|
-
// Identity of who completed this milestone.
|
|
814
|
+
// Identity of who completed this milestone.
|
|
738
815
|
CompletedBy *Identity `json:"completedBy,omitempty"`
|
|
739
|
-
// Description of this milestone or task.
|
|
816
|
+
// Description of this milestone or task.
|
|
740
817
|
Description string `json:"description"`
|
|
741
|
-
// Estimated completion date. ISO 8601 format.
|
|
818
|
+
// Estimated completion date. ISO 8601 format.
|
|
742
819
|
EstimatedCompletion time.Time `json:"estimatedCompletion"`
|
|
743
|
-
// Current status of this milestone.
|
|
820
|
+
// Current status of this milestone.
|
|
744
821
|
Status MilestoneStatus `json:"status"`
|
|
745
|
-
// Short single-line label for this milestone, suitable where a consumer needs a title (for
|
|
746
|
-
// example an OSCAL POA&M remediation or task). No line breaks, and no leading or trailing
|
|
747
|
-
// whitespace. The description remains the full text of the milestone; the title does not
|
|
748
|
-
// replace it.
|
|
822
|
+
// Short single-line label for this milestone, suitable where a consumer needs a title (for
|
|
823
|
+
// example an OSCAL POA&M remediation or task). No line breaks, and no leading or trailing
|
|
824
|
+
// whitespace. The description remains the full text of the milestone; the title does not
|
|
825
|
+
// replace it.
|
|
749
826
|
Title *string `json:"title,omitempty"`
|
|
750
827
|
}
|
|
751
828
|
|
|
@@ -753,42 +830,42 @@ type Milestone struct {
|
|
|
753
830
|
// tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic signing methods
|
|
754
831
|
// via JWK, PEM, or Base58 key formats.
|
|
755
832
|
type Signature struct {
|
|
756
|
-
// Challenge value from the verifier, used in challenge-response authentication.
|
|
833
|
+
// Challenge value from the verifier, used in challenge-response authentication.
|
|
757
834
|
Challenge *string `json:"challenge,omitempty"`
|
|
758
|
-
// When the signature was created. ISO 8601 format.
|
|
835
|
+
// When the signature was created. ISO 8601 format.
|
|
759
836
|
Created time.Time `json:"created"`
|
|
760
|
-
// The identity that created this signature.
|
|
837
|
+
// The identity that created this signature.
|
|
761
838
|
Creator Identity `json:"creator"`
|
|
762
|
-
// Domain restriction for the signature, prevents cross-domain replay attacks.
|
|
839
|
+
// Domain restriction for the signature, prevents cross-domain replay attacks.
|
|
763
840
|
Domain *string `json:"domain,omitempty"`
|
|
764
|
-
// Random value to prevent replay attacks.
|
|
841
|
+
// Random value to prevent replay attacks.
|
|
765
842
|
Nonce *string `json:"nonce,omitempty"`
|
|
766
|
-
// The purpose of this signature. Example: 'attestation', 'authentication',
|
|
767
|
-
// 'assertionMethod'.
|
|
843
|
+
// The purpose of this signature. Example: 'attestation', 'authentication',
|
|
844
|
+
// 'assertionMethod'.
|
|
768
845
|
ProofPurpose string `json:"proofPurpose"`
|
|
769
|
-
// The base64-encoded or base58-encoded signature value.
|
|
846
|
+
// The base64-encoded or base58-encoded signature value.
|
|
770
847
|
SignatureValue string `json:"signatureValue"`
|
|
771
|
-
// The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018',
|
|
772
|
-
// 'Ed25519Signature2020'.
|
|
848
|
+
// The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018',
|
|
849
|
+
// 'Ed25519Signature2020'.
|
|
773
850
|
Type string `json:"type"`
|
|
774
|
-
// The verification method containing the public key for signature verification.
|
|
851
|
+
// The verification method containing the public key for signature verification.
|
|
775
852
|
VerificationMethod VerificationMethod `json:"verificationMethod"`
|
|
776
853
|
}
|
|
777
854
|
|
|
778
855
|
// Verification method containing the public key needed to verify a digital signature. Supports
|
|
779
856
|
// multiple key formats including JWK (for RSA, EC), PEM, and Base58.
|
|
780
857
|
type VerificationMethod struct {
|
|
781
|
-
// The entity that controls this verification method. Can be a DID, URI, or other identifier.
|
|
858
|
+
// The entity that controls this verification method. Can be a DID, URI, or other identifier.
|
|
782
859
|
Controller string `json:"controller"`
|
|
783
|
-
// Public key in Base58 format, commonly used with Ed25519 keys.
|
|
860
|
+
// Public key in Base58 format, commonly used with Ed25519 keys.
|
|
784
861
|
PublicKeyBase58 *string `json:"publicKeyBase58,omitempty"`
|
|
785
|
-
// Public key in JSON Web Key format.
|
|
862
|
+
// Public key in JSON Web Key format.
|
|
786
863
|
PublicKeyJwk map[string]interface{} `json:"publicKeyJwk,omitempty"`
|
|
787
|
-
// Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC
|
|
788
|
-
// KEY-----'.
|
|
864
|
+
// Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC
|
|
865
|
+
// KEY-----'.
|
|
789
866
|
PublicKeyPem *string `json:"publicKeyPem,omitempty"`
|
|
790
|
-
// The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018',
|
|
791
|
-
// 'Ed25519VerificationKey2020'.
|
|
867
|
+
// The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018',
|
|
868
|
+
// 'Ed25519VerificationKey2020'.
|
|
792
869
|
Type string `json:"type"`
|
|
793
870
|
}
|
|
794
871
|
|
|
@@ -801,292 +878,355 @@ type Reference struct {
|
|
|
801
878
|
|
|
802
879
|
// A test within a requirement and its results and findings such as how long it took to run.
|
|
803
880
|
type RequirementResult struct {
|
|
804
|
-
// The stacktrace/backtrace of the exception if one occurred.
|
|
805
|
-
Backtrace
|
|
806
|
-
// A description of this test. Example: 'limits.conf * is expected to include ["hard",
|
|
807
|
-
// "maxlogins", "10"]'.
|
|
808
|
-
CodeDesc
|
|
809
|
-
// The type of exception if an exception was thrown.
|
|
810
|
-
Exception
|
|
811
|
-
// An explanation of the test result. Typically provided for failed tests, errors, or to
|
|
812
|
-
// explain why a test was not applicable or not reviewed.
|
|
813
|
-
Message
|
|
814
|
-
// The
|
|
815
|
-
|
|
816
|
-
//
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
881
|
+
// The stacktrace/backtrace of the exception if one occurred.
|
|
882
|
+
Backtrace []string `json:"backtrace,omitempty"`
|
|
883
|
+
// A description of this test. Example: 'limits.conf * is expected to include ["hard",
|
|
884
|
+
// "maxlogins", "10"]'.
|
|
885
|
+
CodeDesc string `json:"codeDesc"`
|
|
886
|
+
// The type of exception if an exception was thrown.
|
|
887
|
+
Exception *string `json:"exception,omitempty"`
|
|
888
|
+
// An explanation of the test result. Typically provided for failed tests, errors, or to
|
|
889
|
+
// explain why a test was not applicable or not reviewed.
|
|
890
|
+
Message *string `json:"message,omitempty"`
|
|
891
|
+
// The source tool's own record for this result, carrying every field the record had.
|
|
892
|
+
// Complete, not necessarily byte-exact: see Raw_Source_Record.content for the producer and
|
|
893
|
+
// consumer obligations, and extensions.rawSourceArtifacts[] when byte-exact carriage is
|
|
894
|
+
// required.
|
|
895
|
+
RawSourceRecord *RawSourceRecord `json:"rawSourceRecord,omitempty"`
|
|
896
|
+
// The resource used in the test. Example: 'file', 'command', 'service'.
|
|
897
|
+
Resource *string `json:"resource,omitempty"`
|
|
898
|
+
// The unique identifier of the resource. Example: '/etc/passwd'.
|
|
899
|
+
ResourceID *string `json:"resourceId,omitempty"`
|
|
900
|
+
// The execution time in seconds for the test.
|
|
901
|
+
RunTime *float64 `json:"runTime,omitempty"`
|
|
902
|
+
// The time at which the test started.
|
|
903
|
+
StartTime time.Time `json:"startTime"`
|
|
904
|
+
// The status of this test within the requirement. Example: 'failed'.
|
|
905
|
+
Status ResultStatus `json:"status"`
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
// The source tool's own record for this result — the one entry in the converter's input that
|
|
909
|
+
// produced it, complete though not necessarily byte-for-byte (see `content`). SCOPED TO THE RESULT
|
|
910
|
+
// DELIBERATELY. For a vulnerability scanner the native record is one (vulnerability, package) pair,
|
|
911
|
+
// which is exactly one result: a CVE reported against two packages yields two entries whose records
|
|
912
|
+
// differ only in the package they matched. Held on the requirement instead, those two records would
|
|
913
|
+
// collide, and merging entries that share an id would have to discard one — so the result is not
|
|
914
|
+
// merely an available home but the correct one. Distinct from `extensions.rawSourceArtifacts[]`,
|
|
915
|
+
// which carries whole input artifacts: this carries the one record inside one of them, and
|
|
916
|
+
// `pointer` ties the two together. A consumer that wants the whole input reads the artifact; one
|
|
917
|
+
// that wants provenance for a single finding reads this. Distinct from `code`, which means the code
|
|
918
|
+
// that ran to evaluate the requirement — an InSpec control's source, or a check reference. A
|
|
919
|
+
// serialized finding is not code, and putting one there overloaded a field whose meaning came from
|
|
920
|
+
// InSpec. CLOSED, and deliberately not a passthrough bag: three required members and an optional
|
|
921
|
+
// pointer are the whole of it. Producer data that HDF does not model belongs in
|
|
922
|
+
// `extensions.passthrough`, which is document-scoped and permissive by design; this field is
|
|
923
|
+
// neither. Closed with `additionalProperties` rather than the house `unevaluatedProperties` because
|
|
924
|
+
// this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not
|
|
925
|
+
// implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a
|
|
926
|
+
// closure.
|
|
927
|
+
type RawSourceRecord struct {
|
|
928
|
+
// The source tool's own record for this result, carrying every field the record had.
|
|
929
|
+
//
|
|
930
|
+
// COMPLETE, NOT NECESSARILY BYTE-EXACT. A producer SHOULD write the record's bytes
|
|
931
|
+
// unchanged where it can. A producer that cannot — notably one implemented in two languages
|
|
932
|
+
// whose JSON serializers disagree on key order, HTML escaping and number rendering, and
|
|
933
|
+
// which therefore MUST canonicalize to stay byte-identical with its twin — MAY write a
|
|
934
|
+
// canonically serialized form instead. Such a form preserves every field and value but not
|
|
935
|
+
// the original key order, insignificant whitespace, or duplicate keys. A consumer MUST
|
|
936
|
+
// therefore compare records by parsing them, not by comparing bytes, and MUST NOT checksum
|
|
937
|
+
// this field and expect the result to match a checksum of the input.
|
|
938
|
+
//
|
|
939
|
+
// For carriage that IS byte-exact, use `extensions.rawSourceArtifacts[]`, which forbids a
|
|
940
|
+
// parsed `document` precisely so the bytes and their checksum survive; `pointer` ties this
|
|
941
|
+
// record to its position within that artifact.
|
|
942
|
+
Content string `json:"content"`
|
|
943
|
+
// How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text.
|
|
944
|
+
Encoding ExternalReferenceEncoding `json:"encoding"`
|
|
945
|
+
// The record's IANA media type — the type of this record, which for a fragment of a larger
|
|
946
|
+
// artifact may be narrower than the artifact's own. Example: 'application/json' for one
|
|
947
|
+
// match object out of a JSON report.
|
|
948
|
+
MediaType string `json:"mediaType"`
|
|
949
|
+
// Where this record sits inside the artifact it came from, as a JSON Pointer (RFC 6901) for
|
|
950
|
+
// JSON sources or an XPath for XML ones. Example: '/matches/3'.
|
|
951
|
+
//
|
|
952
|
+
// Optional, and the link that makes carriage verifiable rather than merely present: with it
|
|
953
|
+
// a consumer can confirm the record really is the subtree of
|
|
954
|
+
// `extensions.rawSourceArtifacts[]` it claims to be. Omit it when the source's shape gives
|
|
955
|
+
// a record no addressable location.
|
|
956
|
+
Pointer *string `json:"pointer,omitempty"`
|
|
824
957
|
}
|
|
825
958
|
|
|
826
959
|
// The explicit location of a requirement within source code.
|
|
827
960
|
type SourceLocation struct {
|
|
828
|
-
// The line on which this requirement is located.
|
|
961
|
+
// The line on which this requirement is located.
|
|
829
962
|
Line *float64 `json:"line,omitempty"`
|
|
830
|
-
// Path to the file that this requirement originates from.
|
|
963
|
+
// Path to the file that this requirement originates from.
|
|
831
964
|
Ref *string `json:"ref,omitempty"`
|
|
832
965
|
}
|
|
833
966
|
|
|
834
|
-
// An intentional change to a requirement's compliance status and/or impact score
|
|
835
|
-
//
|
|
836
|
-
//
|
|
967
|
+
// An intentional change to a requirement's compliance status and/or impact score, as it sits on the
|
|
968
|
+
// requirement once applied. The same type-conditional rule as Standalone_Override: when type is
|
|
969
|
+
// 'operationalRequirement', neither status nor impact may be set, because the override records an
|
|
970
|
+
// accepted deviation without adjudicating the finding; it still governs disposition, and
|
|
971
|
+
// effectiveStatus stays what the results decided. When type is 'riskAdjustment', status may not be
|
|
972
|
+
// set: it re-rates the risk through impact and never changes pass/fail. For every other type, at
|
|
973
|
+
// least one of status or impact must be set. All overrides must have an expiration date to enforce
|
|
974
|
+
// periodic review.
|
|
837
975
|
type StatusOverride struct {
|
|
838
|
-
// Timestamp when this override was applied. ISO 8601 format.
|
|
976
|
+
// Timestamp when this override was applied. ISO 8601 format.
|
|
839
977
|
AppliedAt time.Time `json:"appliedAt"`
|
|
840
|
-
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
841
|
-
// identifier.
|
|
978
|
+
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
979
|
+
// identifier.
|
|
842
980
|
AppliedBy Identity `json:"appliedBy"`
|
|
843
|
-
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
844
|
-
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
845
|
-
// a riskAdjustment. For other override types this is optional context.
|
|
981
|
+
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
982
|
+
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
983
|
+
// a riskAdjustment. For other override types this is optional context.
|
|
846
984
|
Cvss *Cvss `json:"cvss,omitempty"`
|
|
847
|
-
// Supporting evidence for this override, such as screenshots demonstrating manual
|
|
848
|
-
// verification for attestations.
|
|
985
|
+
// Supporting evidence for this override, such as screenshots demonstrating manual
|
|
986
|
+
// verification for attestations.
|
|
849
987
|
Evidence []Evidence `json:"evidence,omitempty"`
|
|
850
|
-
// Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
|
|
851
|
-
// permanent overrides allowed. ISO 8601 format.
|
|
988
|
+
// Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
|
|
989
|
+
// permanent overrides allowed. ISO 8601 format.
|
|
852
990
|
ExpiresAt time.Time `json:"expiresAt"`
|
|
853
|
-
// Optional references to the external artifacts behind this override (e.g. the STIX
|
|
854
|
-
// bundle/object or CTI feed motivating an E:A riskAdjustment). Inert context distinct from
|
|
855
|
-
// `evidence`; see External_Reference. Symmetric with Standalone_Override.externalReferences
|
|
856
|
-
// for the inline (results-embedded) override carrier.
|
|
991
|
+
// Optional references to the external artifacts behind this override (e.g. the STIX
|
|
992
|
+
// bundle/object or CTI feed motivating an E:A riskAdjustment). Inert context distinct from
|
|
993
|
+
// `evidence`; see External_Reference. Symmetric with Standalone_Override.externalReferences
|
|
994
|
+
// for the inline (results-embedded) override carrier.
|
|
857
995
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
858
|
-
// Override to the requirement's impact score.
|
|
996
|
+
// Override to the requirement's impact score. For every type except operationalRequirement,
|
|
997
|
+
// at least one of status or impact must be set; an operationalRequirement carries neither.
|
|
859
998
|
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
860
|
-
// Structured controlled-vocabulary classification for why this override applies.
|
|
861
|
-
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
862
|
-
// and attestation overrides where the structured category enables filtering and lossless
|
|
863
|
-
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
864
|
-
// precedent vocabulary and rationale.
|
|
999
|
+
// Structured controlled-vocabulary classification for why this override applies.
|
|
1000
|
+
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
1001
|
+
// and attestation overrides where the structured category enables filtering and lossless
|
|
1002
|
+
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
1003
|
+
// precedent vocabulary and rationale.
|
|
865
1004
|
Justification *Justification `json:"justification,omitempty"`
|
|
866
|
-
// SHA-256 checksum of the previous amendment in chronological order. Each amendment's
|
|
867
|
-
// checksum is recorded by the NEXT one, so editing an amendment in place is detectable —
|
|
868
|
-
// provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment,
|
|
869
|
-
// the document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
870
|
-
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
871
|
-
// non-repudiation. Omitted on the first amendment on a requirement.
|
|
1005
|
+
// SHA-256 checksum of the previous amendment in chronological order. Each amendment's
|
|
1006
|
+
// checksum is recorded by the NEXT one, so editing an amendment in place is detectable —
|
|
1007
|
+
// provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment,
|
|
1008
|
+
// the document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
1009
|
+
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
1010
|
+
// non-repudiation. Omitted on the first amendment on a requirement.
|
|
872
1011
|
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
873
|
-
// Explanation for why this override was applied.
|
|
1012
|
+
// Explanation for why this override was applied.
|
|
874
1013
|
Reason string `json:"reason"`
|
|
875
|
-
// Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
876
|
-
// security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
877
|
-
// methods.
|
|
1014
|
+
// Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
1015
|
+
// security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
1016
|
+
// methods.
|
|
878
1017
|
Signature *Signature `json:"signature,omitempty"`
|
|
879
|
-
// The new status this override sets for the requirement. Optional when only impact is being
|
|
880
|
-
// overridden
|
|
1018
|
+
// The new status this override sets for the requirement. Optional when only impact is being
|
|
1019
|
+
// overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a
|
|
1020
|
+
// riskAdjustment, which re-rates impact only.
|
|
881
1021
|
Status *ResultStatus `json:"status,omitempty"`
|
|
882
|
-
// The type of override applied to this requirement.
|
|
1022
|
+
// The type of override applied to this requirement.
|
|
883
1023
|
Type OverrideType `json:"type"`
|
|
884
1024
|
}
|
|
885
1025
|
|
|
886
1026
|
// An override to the requirement's impact score. The prior impact is the original result value or
|
|
887
1027
|
// the preceding override in the chain.
|
|
888
1028
|
type ImpactOverride struct {
|
|
889
|
-
// The overridden impact score (0.0–1.0).
|
|
1029
|
+
// The overridden impact score (0.0–1.0).
|
|
890
1030
|
Value float64 `json:"value"`
|
|
891
1031
|
}
|
|
892
1032
|
|
|
893
1033
|
// A supported platform target. Example: the platform name being 'ubuntu'.
|
|
894
1034
|
type SupportedPlatform struct {
|
|
895
|
-
// The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'.
|
|
1035
|
+
// The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'.
|
|
896
1036
|
Platform *string `json:"platform,omitempty"`
|
|
897
|
-
// The platform family. Example: 'redhat'.
|
|
1037
|
+
// The platform family. Example: 'redhat'.
|
|
898
1038
|
PlatformFamily *string `json:"platformFamily,omitempty"`
|
|
899
|
-
// The platform name - can include wildcards. Example: 'debian'.
|
|
1039
|
+
// The platform name - can include wildcards. Example: 'debian'.
|
|
900
1040
|
PlatformName *string `json:"platformName,omitempty"`
|
|
901
|
-
// The release of the platform. Example: '20.04' for 'ubuntu'.
|
|
1041
|
+
// The release of the platform. Example: '20.04' for 'ubuntu'.
|
|
902
1042
|
Release *string `json:"release,omitempty"`
|
|
903
1043
|
}
|
|
904
1044
|
|
|
905
1045
|
// A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset
|
|
906
1046
|
// of Target with identity, external IDs, and SBOM support.
|
|
907
1047
|
type Component struct {
|
|
908
|
-
// Names of baselines that apply to this component.
|
|
1048
|
+
// Names of baselines that apply to this component.
|
|
909
1049
|
BaselineRefs []string `json:"baselineRefs,omitempty"`
|
|
910
|
-
// Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
|
|
911
|
-
// each carried by passthrough (ref/document) or normalized. Replaces the former
|
|
912
|
-
// sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
|
|
913
|
-
// ai-model BOM). See primitives/bom.schema.json.
|
|
1050
|
+
// Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
|
|
1051
|
+
// each carried by passthrough (ref/document) or normalized. Replaces the former
|
|
1052
|
+
// sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
|
|
1053
|
+
// ai-model BOM). See primitives/bom.schema.json.
|
|
914
1054
|
Boms []BillOfMaterials `json:"boms,omitempty"`
|
|
915
|
-
// Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
916
|
-
// hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
1055
|
+
// Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
1056
|
+
// hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
917
1057
|
ComponentID *string `json:"componentId,omitempty"`
|
|
918
|
-
// Description of this component's role or purpose.
|
|
1058
|
+
// Description of this component's role or purpose.
|
|
919
1059
|
Description *string `json:"description,omitempty"`
|
|
920
|
-
// Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure
|
|
921
|
-
// (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are
|
|
922
|
-
// allowed.
|
|
1060
|
+
// Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure
|
|
1061
|
+
// (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are
|
|
1062
|
+
// allowed.
|
|
923
1063
|
ExternalIDS map[string]string `json:"externalIds,omitempty"`
|
|
924
|
-
// System-specific overrides for baseline input values.
|
|
1064
|
+
// System-specific overrides for baseline input values.
|
|
925
1065
|
InputOverrides []InputOverride `json:"inputOverrides,omitempty"`
|
|
926
|
-
// Cryptographic integrity of this component's underlying artifact — model weights or
|
|
927
|
-
// shards, dataset archive, container image, or package bytes.
|
|
928
|
-
//
|
|
929
|
-
// An array supports multi-file/sharded artifacts.
|
|
930
|
-
//
|
|
931
|
-
// This is the single, generic home for artifact/subject integrity across all component
|
|
932
|
-
// types (it replaced the former per-type Container_Image digest and Artifact checksum
|
|
933
|
-
// fields).
|
|
934
|
-
//
|
|
935
|
-
// Distinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence
|
|
936
|
-
// Integrity type.
|
|
1066
|
+
// Cryptographic integrity of this component's underlying artifact — model weights or
|
|
1067
|
+
// shards, dataset archive, container image, or package bytes.
|
|
1068
|
+
//
|
|
1069
|
+
// An array supports multi-file/sharded artifacts.
|
|
1070
|
+
//
|
|
1071
|
+
// This is the single, generic home for artifact/subject integrity across all component
|
|
1072
|
+
// types (it replaced the former per-type Container_Image digest and Artifact checksum
|
|
1073
|
+
// fields).
|
|
1074
|
+
//
|
|
1075
|
+
// Distinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence
|
|
1076
|
+
// Integrity type.
|
|
937
1077
|
Integrity []Checksum `json:"integrity,omitempty"`
|
|
938
|
-
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
939
|
-
// environment, region, team. Values must be strings.
|
|
1078
|
+
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1079
|
+
// environment, region, team. Values must be strings.
|
|
940
1080
|
Labels map[string]string `json:"labels,omitempty"`
|
|
941
|
-
// Human-readable name for this component.
|
|
1081
|
+
// Human-readable name for this component.
|
|
942
1082
|
Name string `json:"name"`
|
|
943
|
-
// Team or individual responsible for this component. Enables per-component ownership when
|
|
944
|
-
// different teams manage different parts of a system.
|
|
1083
|
+
// Team or individual responsible for this component. Enables per-component ownership when
|
|
1084
|
+
// different teams manage different parts of a system.
|
|
945
1085
|
Owner *Identity `json:"owner,omitempty"`
|
|
946
|
-
// Label selector to match targets belonging to this component during migration. Targets
|
|
947
|
-
// with matching labels are automatically included.
|
|
1086
|
+
// Label selector to match targets belonging to this component during migration. Targets
|
|
1087
|
+
// with matching labels are automatically included.
|
|
948
1088
|
TargetSelector map[string]string `json:"targetSelector,omitempty"`
|
|
949
|
-
// Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
950
|
-
// AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
1089
|
+
// Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
|
|
1090
|
+
// AI subject components whose detail lives in an attached ai-model / dataset BOM).
|
|
951
1091
|
Type TargetType `json:"type"`
|
|
952
|
-
// Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
|
|
953
|
-
// host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
|
|
954
|
-
// workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
|
|
955
|
-
// from a source that carries directory membership.
|
|
1092
|
+
// Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
|
|
1093
|
+
// host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
|
|
1094
|
+
// workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
|
|
1095
|
+
// from a source that carries directory membership.
|
|
956
1096
|
Domain *string `json:"domain,omitempty"`
|
|
957
|
-
// Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
|
|
958
|
-
// (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
|
|
959
|
-
// schema does not enforce case so source fidelity is preserved on round-trip.
|
|
1097
|
+
// Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
|
|
1098
|
+
// (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
|
|
1099
|
+
// schema does not enforce case so source fidelity is preserved on round-trip.
|
|
960
1100
|
FQDN *string `json:"fqdn,omitempty"`
|
|
961
|
-
// Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
|
|
962
|
-
// from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
|
|
963
|
-
// (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
|
|
964
|
-
// suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
|
|
965
|
-
// the source reports; do not derive it from the FQDN.
|
|
1101
|
+
// Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
|
|
1102
|
+
// from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
|
|
1103
|
+
// (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
|
|
1104
|
+
// suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
|
|
1105
|
+
// the source reports; do not derive it from the FQDN.
|
|
966
1106
|
Hostname *string `json:"hostname,omitempty"`
|
|
967
|
-
// IP address of the host.
|
|
1107
|
+
// IP address of the host.
|
|
968
1108
|
IPAddress *string `json:"ipAddress,omitempty"`
|
|
969
|
-
// MAC address in colon-separated hexadecimal format.
|
|
1109
|
+
// MAC address in colon-separated hexadecimal format.
|
|
970
1110
|
MACAddress *string `json:"macAddress,omitempty"`
|
|
971
|
-
// Operating system name.
|
|
1111
|
+
// Operating system name.
|
|
972
1112
|
OSName *string `json:"osName,omitempty"`
|
|
973
|
-
// Operating system version.
|
|
1113
|
+
// Operating system version.
|
|
974
1114
|
OSVersion *string `json:"osVersion,omitempty"`
|
|
975
|
-
// Container image ID.
|
|
1115
|
+
// Container image ID.
|
|
976
1116
|
ImageID *string `json:"imageId,omitempty"`
|
|
977
|
-
// Container registry. Example: 'docker.io'.
|
|
1117
|
+
// Container registry. Example: 'docker.io'.
|
|
978
1118
|
Registry *string `json:"registry,omitempty"`
|
|
979
|
-
// Repository name. Example: 'library/nginx'.
|
|
1119
|
+
// Repository name. Example: 'library/nginx'.
|
|
980
1120
|
Repository *string `json:"repository,omitempty"`
|
|
981
|
-
// Image tag. Example: '1.25'.
|
|
1121
|
+
// Image tag. Example: '1.25'.
|
|
982
1122
|
Tag *string `json:"tag,omitempty"`
|
|
983
|
-
// Running container ID.
|
|
1123
|
+
// Running container ID.
|
|
984
1124
|
ContainerID *string `json:"containerId,omitempty"`
|
|
985
|
-
// Image the container was started from.
|
|
1125
|
+
// Image the container was started from.
|
|
986
1126
|
Image *string `json:"image,omitempty"`
|
|
987
|
-
// Container runtime. Example: 'docker', 'containerd', 'cri-o'.
|
|
1127
|
+
// Container runtime. Example: 'docker', 'containerd', 'cri-o'.
|
|
988
1128
|
Runtime *string `json:"runtime,omitempty"`
|
|
989
|
-
// Cluster name.
|
|
1129
|
+
// Cluster name.
|
|
990
1130
|
ClusterName *string `json:"clusterName,omitempty"`
|
|
991
|
-
// Namespace within the cluster, if applicable.
|
|
1131
|
+
// Namespace within the cluster, if applicable.
|
|
992
1132
|
Namespace *string `json:"namespace,omitempty"`
|
|
993
|
-
// Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'.
|
|
1133
|
+
// Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'.
|
|
994
1134
|
PlatformType *string `json:"platformType,omitempty"`
|
|
995
|
-
// Platform version.
|
|
996
|
-
//
|
|
997
|
-
// Application version.
|
|
998
|
-
//
|
|
999
|
-
// Package version.
|
|
1000
|
-
//
|
|
1001
|
-
// Database version.
|
|
1002
|
-
//
|
|
1003
|
-
// Model version, revision, or checkpoint tag.
|
|
1004
|
-
//
|
|
1005
|
-
// Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
|
|
1006
|
-
// release marker.
|
|
1135
|
+
// Platform version.
|
|
1136
|
+
//
|
|
1137
|
+
// Application version.
|
|
1138
|
+
//
|
|
1139
|
+
// Package version.
|
|
1140
|
+
//
|
|
1141
|
+
// Database version.
|
|
1142
|
+
//
|
|
1143
|
+
// Model version, revision, or checkpoint tag.
|
|
1144
|
+
//
|
|
1145
|
+
// Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
|
|
1146
|
+
// release marker.
|
|
1007
1147
|
Version *string `json:"version,omitempty"`
|
|
1008
|
-
// Cloud account identifier.
|
|
1148
|
+
// Cloud account identifier.
|
|
1009
1149
|
AccountID *string `json:"accountId,omitempty"`
|
|
1010
|
-
// Cloud provider.
|
|
1150
|
+
// Cloud provider.
|
|
1011
1151
|
Provider *CloudProvider `json:"provider,omitempty"`
|
|
1012
|
-
// Cloud region, if applicable.
|
|
1013
|
-
//
|
|
1014
|
-
// Cloud region where the resource resides.
|
|
1152
|
+
// Cloud region, if applicable.
|
|
1153
|
+
//
|
|
1154
|
+
// Cloud region where the resource resides.
|
|
1015
1155
|
Region *string `json:"region,omitempty"`
|
|
1016
|
-
// Amazon Resource Name (AWS only).
|
|
1156
|
+
// Amazon Resource Name (AWS only).
|
|
1017
1157
|
Arn *string `json:"arn,omitempty"`
|
|
1018
|
-
// Provider-specific resource identifier.
|
|
1158
|
+
// Provider-specific resource identifier.
|
|
1019
1159
|
ResourceID *string `json:"resourceId,omitempty"`
|
|
1020
|
-
// Type of cloud resource. Example: 'ec2:instance', 's3:bucket'.
|
|
1160
|
+
// Type of cloud resource. Example: 'ec2:instance', 's3:bucket'.
|
|
1021
1161
|
ResourceType *string `json:"resourceType,omitempty"`
|
|
1022
|
-
// Branch that was scanned.
|
|
1162
|
+
// Branch that was scanned.
|
|
1023
1163
|
Branch *string `json:"branch,omitempty"`
|
|
1024
|
-
// Commit SHA that was scanned.
|
|
1164
|
+
// Commit SHA that was scanned.
|
|
1025
1165
|
Commit *string `json:"commit,omitempty"`
|
|
1026
|
-
// Repository URL.
|
|
1027
|
-
//
|
|
1028
|
-
// Application URL (for DAST tools).
|
|
1166
|
+
// Repository URL.
|
|
1167
|
+
//
|
|
1168
|
+
// Application URL (for DAST tools).
|
|
1029
1169
|
URL *string `json:"url,omitempty"`
|
|
1030
|
-
// Environment. Example: 'production', 'staging', 'development'.
|
|
1170
|
+
// Environment. Example: 'production', 'staging', 'development'.
|
|
1031
1171
|
Environment *string `json:"environment,omitempty"`
|
|
1032
|
-
// Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
1172
|
+
// Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
1033
1173
|
PackageManager *string `json:"packageManager,omitempty"`
|
|
1034
|
-
// Package name.
|
|
1174
|
+
// Package name.
|
|
1035
1175
|
PackageName *string `json:"packageName,omitempty"`
|
|
1036
|
-
// Network CIDR block.
|
|
1176
|
+
// Network CIDR block.
|
|
1037
1177
|
CIDR *string `json:"cidr,omitempty"`
|
|
1038
|
-
// Network gateway address.
|
|
1178
|
+
// Network gateway address.
|
|
1039
1179
|
Gateway *string `json:"gateway,omitempty"`
|
|
1040
|
-
// Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'.
|
|
1180
|
+
// Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'.
|
|
1041
1181
|
Engine *string `json:"engine,omitempty"`
|
|
1042
|
-
// Database host.
|
|
1182
|
+
// Database host.
|
|
1043
1183
|
Host *string `json:"host,omitempty"`
|
|
1044
|
-
// Database port.
|
|
1184
|
+
// Database port.
|
|
1045
1185
|
Port *int64 `json:"port,omitempty"`
|
|
1046
|
-
// Provider/registry identifier for the model. Examples: a Hugging Face repo id
|
|
1047
|
-
// ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
|
|
1048
|
-
// BOM(s) and to lineage references from other models.
|
|
1186
|
+
// Provider/registry identifier for the model. Examples: a Hugging Face repo id
|
|
1187
|
+
// ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
|
|
1188
|
+
// BOM(s) and to lineage references from other models.
|
|
1049
1189
|
ModelID *string `json:"modelId,omitempty"`
|
|
1050
|
-
// Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
|
|
1051
|
-
// ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
|
|
1052
|
-
// its dataset BOM(s) and to datasetRefs from ai-model components.
|
|
1190
|
+
// Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
|
|
1191
|
+
// ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
|
|
1192
|
+
// its dataset BOM(s) and to datasetRefs from ai-model components.
|
|
1053
1193
|
DatasetID *string `json:"datasetId,omitempty"`
|
|
1054
1194
|
}
|
|
1055
1195
|
|
|
1056
1196
|
type BillOfMaterials struct {
|
|
1057
|
-
// The manifest kind. Determines which normalized type-extension (model/dataset/packages)
|
|
1058
|
-
// may appear.
|
|
1197
|
+
// The manifest kind. Determines which normalized type-extension (model/dataset/packages)
|
|
1198
|
+
// may appear.
|
|
1059
1199
|
BOMType string `json:"bomType"`
|
|
1060
|
-
// Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1200
|
+
// Normalized dataset extension. Permitted only when bomType is dataset.
|
|
1061
1201
|
Dataset *DatasetBOMExtension `json:"dataset,omitempty"`
|
|
1062
|
-
// Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
|
|
1063
|
-
// SPDX object). HDF does not constrain its internal shape — full manifest validation is a
|
|
1064
|
-
// tool-level concern.
|
|
1202
|
+
// Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
|
|
1203
|
+
// SPDX object). HDF does not constrain its internal shape — full manifest validation is a
|
|
1204
|
+
// tool-level concern.
|
|
1065
1205
|
Document map[string]interface{} `json:"document,omitempty"`
|
|
1066
|
-
// Source manifest format the BOM was produced from or references. Examples: cyclonedx,
|
|
1067
|
-
// cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
|
|
1068
|
-
// schema change; the converter that emits the BOM owns the value.
|
|
1206
|
+
// Source manifest format the BOM was produced from or references. Examples: cyclonedx,
|
|
1207
|
+
// cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
|
|
1208
|
+
// schema change; the converter that emits the BOM owns the value.
|
|
1069
1209
|
Format string `json:"format"`
|
|
1070
|
-
// Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
|
|
1071
|
-
// NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
|
|
1072
|
-
// weights, dataset archive) is a component-level concern, not carried here. Subject
|
|
1073
|
-
// identity is inherited from the host component/system; per-node identity lives in the
|
|
1074
|
-
// type-extension.
|
|
1210
|
+
// Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
|
|
1211
|
+
// NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
|
|
1212
|
+
// weights, dataset archive) is a component-level concern, not carried here. Subject
|
|
1213
|
+
// identity is inherited from the host component/system; per-node identity lives in the
|
|
1214
|
+
// type-extension.
|
|
1075
1215
|
Hashes []Checksum `json:"hashes,omitempty"`
|
|
1076
|
-
// Optional license of the BOM document as a whole (SPDX license expression). Nullable and
|
|
1077
|
-
// often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
|
|
1078
|
-
// live in the type-extension, not here.
|
|
1216
|
+
// Optional license of the BOM document as a whole (SPDX license expression). Nullable and
|
|
1217
|
+
// often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
|
|
1218
|
+
// live in the type-extension, not here.
|
|
1079
1219
|
License *string `json:"license,omitempty"`
|
|
1080
|
-
// Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1220
|
+
// Normalized ai-model extension. Permitted only when bomType is ai-model.
|
|
1081
1221
|
Model *AIModelBOMExtension `json:"model,omitempty"`
|
|
1082
|
-
// Normalized sbom extension: the flattened software package inventory. Permitted only when
|
|
1083
|
-
// bomType is sbom.
|
|
1222
|
+
// Normalized sbom extension: the flattened software package inventory. Permitted only when
|
|
1223
|
+
// bomType is sbom.
|
|
1084
1224
|
Packages []SBOMPackage `json:"packages,omitempty"`
|
|
1085
|
-
// Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
|
|
1086
|
-
// manifest document. Present for externally-hosted BOMs.
|
|
1225
|
+
// Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
|
|
1226
|
+
// manifest document. Present for externally-hosted BOMs.
|
|
1087
1227
|
Ref *string `json:"ref,omitempty"`
|
|
1088
|
-
// Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
|
|
1089
|
-
// documentNamespace). Correlates the same BOM across evidence packages.
|
|
1228
|
+
// Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
|
|
1229
|
+
// documentNamespace). Correlates the same BOM across evidence packages.
|
|
1090
1230
|
UniqueID *string `json:"uniqueId,omitempty"`
|
|
1091
1231
|
}
|
|
1092
1232
|
|
|
@@ -1095,35 +1235,35 @@ type BillOfMaterials struct {
|
|
|
1095
1235
|
// AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just as the
|
|
1096
1236
|
// model extension carries baseModelRef/adaptationType.
|
|
1097
1237
|
type DatasetBOMExtension struct {
|
|
1098
|
-
// References to the source dataset(s) this one was derived from — a dataset componentId, or
|
|
1099
|
-
// a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
|
|
1100
|
-
// ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
|
|
1238
|
+
// References to the source dataset(s) this one was derived from — a dataset componentId, or
|
|
1239
|
+
// a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
|
|
1240
|
+
// ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
|
|
1101
1241
|
BaseDatasetRefs []string `json:"baseDatasetRefs,omitempty"`
|
|
1102
|
-
// Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
|
|
1103
|
-
// phi.
|
|
1242
|
+
// Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
|
|
1243
|
+
// phi.
|
|
1104
1244
|
DataClassification *string `json:"dataClassification,omitempty"`
|
|
1105
|
-
// Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
|
|
1245
|
+
// Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
|
|
1106
1246
|
DatasetFormat *string `json:"datasetFormat,omitempty"`
|
|
1107
|
-
// Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1108
|
-
// adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1109
|
-
// (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1247
|
+
// Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
|
|
1248
|
+
// adaptationType. Minimal + extensible: filtered (subset by rule), augmented
|
|
1249
|
+
// (added/synthesized records), merged (union of sources), sampled (statistical draw).
|
|
1110
1250
|
Derivation *DatasetDerivationType `json:"derivation,omitempty"`
|
|
1111
|
-
// Free-text statement of the dataset's intended use (CISA/G7 minimum element).
|
|
1251
|
+
// Free-text statement of the dataset's intended use (CISA/G7 minimum element).
|
|
1112
1252
|
IntendedUse *string `json:"intendedUse,omitempty"`
|
|
1113
|
-
// Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
1114
|
-
// image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
1115
|
-
// encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
1116
|
-
// physical format. String or array of strings.
|
|
1253
|
+
// Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
|
|
1254
|
+
// image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
|
|
1255
|
+
// encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
1256
|
+
// physical format. String or array of strings.
|
|
1117
1257
|
Modality *Modality `json:"modality,omitempty"`
|
|
1118
|
-
// Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
|
|
1119
|
-
// provenance'; SPDX 3.0 dataset_dataCollectionProcess).
|
|
1258
|
+
// Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
|
|
1259
|
+
// provenance'; SPDX 3.0 dataset_dataCollectionProcess).
|
|
1120
1260
|
Provenance *string `json:"provenance,omitempty"`
|
|
1121
|
-
// Number of records/examples in the dataset.
|
|
1261
|
+
// Number of records/examples in the dataset.
|
|
1122
1262
|
RecordCount *int64 `json:"recordCount,omitempty"`
|
|
1123
|
-
// Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
|
|
1124
|
-
// open-ended by design). Intentionally free-text and will remain so permanently:
|
|
1125
|
-
// recordCount is the one structured statistic, and restructuring this into an object later
|
|
1126
|
-
// would break existing consumers, so it stays a string (additive-only).
|
|
1263
|
+
// Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
|
|
1264
|
+
// open-ended by design). Intentionally free-text and will remain so permanently:
|
|
1265
|
+
// recordCount is the one structured statistic, and restructuring this into an object later
|
|
1266
|
+
// would break existing consumers, so it stays a string (additive-only).
|
|
1127
1267
|
StatisticalProperties *string `json:"statisticalProperties,omitempty"`
|
|
1128
1268
|
}
|
|
1129
1269
|
|
|
@@ -1133,59 +1273,59 @@ type DatasetBOMExtension struct {
|
|
|
1133
1273
|
// (partial-fidelity pattern). Subject name/version are inherited from the host aiModel component,
|
|
1134
1274
|
// not repeated here.
|
|
1135
1275
|
type AIModelBOMExtension struct {
|
|
1136
|
-
// Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
1137
|
-
// vocabulary (the only typed lineage enum in the ecosystem).
|
|
1276
|
+
// Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
|
|
1277
|
+
// vocabulary (the only typed lineage enum in the ecosystem).
|
|
1138
1278
|
AdaptationType *ModelAdaptationType `json:"adaptationType,omitempty"`
|
|
1139
|
-
// Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
|
|
1140
|
-
// purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
|
|
1279
|
+
// Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
|
|
1280
|
+
// purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
|
|
1141
1281
|
BaseModelRef *string `json:"baseModelRef,omitempty"`
|
|
1142
|
-
// References to the training/evaluation datasets this model was produced from — preferably
|
|
1143
|
-
// a dataset component's componentId (correlating to a first-class dataset subject rather
|
|
1144
|
-
// than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
|
|
1145
|
-
// component exists.
|
|
1282
|
+
// References to the training/evaluation datasets this model was produced from — preferably
|
|
1283
|
+
// a dataset component's componentId (correlating to a first-class dataset subject rather
|
|
1284
|
+
// than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
|
|
1285
|
+
// component exists.
|
|
1146
1286
|
DatasetRefs []string `json:"datasetRefs,omitempty"`
|
|
1147
|
-
// Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
|
|
1148
|
-
// is the set of training knobs, NOT the model's trainable parameterCount — the two are
|
|
1149
|
-
// routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
|
|
1150
|
-
// ai_hyperparameter.
|
|
1287
|
+
// Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
|
|
1288
|
+
// is the set of training knobs, NOT the model's trainable parameterCount — the two are
|
|
1289
|
+
// routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
|
|
1290
|
+
// ai_hyperparameter.
|
|
1151
1291
|
Hyperparameters []Hyperparameter `json:"hyperparameters,omitempty"`
|
|
1152
|
-
// Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1153
|
-
// context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1154
|
-
// modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1292
|
+
// Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
|
|
1293
|
+
// context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1294
|
+
// modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1155
1295
|
InputOutput *InputOutput `json:"inputOutput,omitempty"`
|
|
1156
|
-
// Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
|
|
1296
|
+
// Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
|
|
1157
1297
|
IntendedUse *string `json:"intendedUse,omitempty"`
|
|
1158
|
-
// Model's learning/training paradigm. Free-text because the value set varies across
|
|
1159
|
-
// standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
|
|
1160
|
-
// Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
|
|
1161
|
-
// modelParameters.approach.type ∩ CISA/G7 learning type.
|
|
1298
|
+
// Model's learning/training paradigm. Free-text because the value set varies across
|
|
1299
|
+
// standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
|
|
1300
|
+
// Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
|
|
1301
|
+
// modelParameters.approach.type ∩ CISA/G7 learning type.
|
|
1162
1302
|
LearningApproach *string `json:"learningApproach,omitempty"`
|
|
1163
|
-
// Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
|
|
1303
|
+
// Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
|
|
1164
1304
|
ModelArchitecture *string `json:"modelArchitecture,omitempty"`
|
|
1165
|
-
// Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
|
|
1166
|
-
// because the EU AI Act keys GPAI obligations off model scale.
|
|
1305
|
+
// Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
|
|
1306
|
+
// because the EU AI Act keys GPAI obligations off model scale.
|
|
1167
1307
|
ParameterCount *int64 `json:"parameterCount,omitempty"`
|
|
1168
|
-
// Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
|
|
1169
|
-
// heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
|
|
1170
|
-
// true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
|
|
1171
|
-
// intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
|
|
1172
|
-
// CISA/G7 KPI cluster.
|
|
1308
|
+
// Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
|
|
1309
|
+
// heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
|
|
1310
|
+
// true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
|
|
1311
|
+
// intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
|
|
1312
|
+
// CISA/G7 KPI cluster.
|
|
1173
1313
|
PerformanceMetrics []PerformanceMetric `json:"performanceMetrics,omitempty"`
|
|
1174
|
-
// On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
|
|
1175
|
-
// pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
|
|
1176
|
-
// safetensors, pytorch, gguf, onnx, tensorflow.
|
|
1314
|
+
// On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
|
|
1315
|
+
// pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
|
|
1316
|
+
// safetensors, pytorch, gguf, onnx, tensorflow.
|
|
1177
1317
|
SerializationFormat *string `json:"serializationFormat,omitempty"`
|
|
1178
|
-
// The ML task the model performs. Free-text. Examples: text-classification,
|
|
1179
|
-
// sentiment-analysis, object-detection, translation. Sourced from CycloneDX
|
|
1180
|
-
// modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
|
|
1181
|
-
// intended-application.
|
|
1318
|
+
// The ML task the model performs. Free-text. Examples: text-classification,
|
|
1319
|
+
// sentiment-analysis, object-detection, translation. Sourced from CycloneDX
|
|
1320
|
+
// modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
|
|
1321
|
+
// intended-application.
|
|
1182
1322
|
Task *string `json:"task,omitempty"`
|
|
1183
1323
|
}
|
|
1184
1324
|
|
|
1185
1325
|
type Hyperparameter struct {
|
|
1186
|
-
// Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
|
|
1326
|
+
// Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
|
|
1187
1327
|
Name *string `json:"name,omitempty"`
|
|
1188
|
-
// Hyper-parameter value (free-text).
|
|
1328
|
+
// Hyper-parameter value (free-text).
|
|
1189
1329
|
Value *string `json:"value,omitempty"`
|
|
1190
1330
|
}
|
|
1191
1331
|
|
|
@@ -1193,51 +1333,51 @@ type Hyperparameter struct {
|
|
|
1193
1333
|
// context/sequence length, and tokenizer. Sourced from CycloneDX
|
|
1194
1334
|
// modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
|
|
1195
1335
|
type InputOutput struct {
|
|
1196
|
-
// Maximum context/sequence length the model accepts, in tokens.
|
|
1336
|
+
// Maximum context/sequence length the model accepts, in tokens.
|
|
1197
1337
|
ContextLength *int64 `json:"contextLength,omitempty"`
|
|
1198
|
-
// Input/output data types. Examples: string, byte[], float32, image.
|
|
1338
|
+
// Input/output data types. Examples: string, byte[], float32, image.
|
|
1199
1339
|
DataTypes []string `json:"dataTypes,omitempty"`
|
|
1200
|
-
// Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
1201
|
-
// Symmetric with Dataset_Extension.modality.
|
|
1340
|
+
// Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
1341
|
+
// Symmetric with Dataset_Extension.modality.
|
|
1202
1342
|
Modality *Modality `json:"modality,omitempty"`
|
|
1203
|
-
// Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
|
|
1343
|
+
// Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
|
|
1204
1344
|
Tokenizer *string `json:"tokenizer,omitempty"`
|
|
1205
1345
|
}
|
|
1206
1346
|
|
|
1207
1347
|
type PerformanceMetric struct {
|
|
1208
|
-
// Metric name. Examples: accuracy, f1, BLEU, latency.
|
|
1348
|
+
// Metric name. Examples: accuracy, f1, BLEU, latency.
|
|
1209
1349
|
Name *string `json:"name,omitempty"`
|
|
1210
|
-
// Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
|
|
1211
|
-
// milliseconds).
|
|
1350
|
+
// Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
|
|
1351
|
+
// milliseconds).
|
|
1212
1352
|
Value *string `json:"value,omitempty"`
|
|
1213
1353
|
}
|
|
1214
1354
|
|
|
1215
1355
|
// A single normalized software package entry within an sbom BOM. Minimal identity + version for
|
|
1216
1356
|
// querying/diffing; the full native record remains available via passthrough (document/ref).
|
|
1217
1357
|
type SBOMPackage struct {
|
|
1218
|
-
// SPDX license identifiers/expressions for this package.
|
|
1358
|
+
// SPDX license identifiers/expressions for this package.
|
|
1219
1359
|
Licenses []string `json:"licenses,omitempty"`
|
|
1220
|
-
// Package name.
|
|
1360
|
+
// Package name.
|
|
1221
1361
|
Name string `json:"name"`
|
|
1222
|
-
// Package URL (purl) — the preferred cross-BOM identity key when present.
|
|
1362
|
+
// Package URL (purl) — the preferred cross-BOM identity key when present.
|
|
1223
1363
|
Purl *string `json:"purl,omitempty"`
|
|
1224
|
-
// Package version.
|
|
1364
|
+
// Package version.
|
|
1225
1365
|
Version *string `json:"version,omitempty"`
|
|
1226
1366
|
}
|
|
1227
1367
|
|
|
1228
1368
|
// An override of a baseline input value for a specific component. Enables system-specific tailoring
|
|
1229
1369
|
// of baseline parameters.
|
|
1230
1370
|
type InputOverride struct {
|
|
1231
|
-
// Identity of the person or system that approved this override.
|
|
1371
|
+
// Identity of the person or system that approved this override.
|
|
1232
1372
|
ApprovedBy *Identity `json:"approvedBy,omitempty"`
|
|
1233
|
-
// Name of the baseline this override applies to. If omitted, applies to all baselines that
|
|
1234
|
-
// define this input.
|
|
1373
|
+
// Name of the baseline this override applies to. If omitted, applies to all baselines that
|
|
1374
|
+
// define this input.
|
|
1235
1375
|
BaselineRef *string `json:"baselineRef,omitempty"`
|
|
1236
|
-
// Name of the input being overridden. Must match an Input.name in the referenced baseline.
|
|
1376
|
+
// Name of the input being overridden. Must match an Input.name in the referenced baseline.
|
|
1237
1377
|
InputName string `json:"inputName"`
|
|
1238
|
-
// Rationale for why this override is needed.
|
|
1378
|
+
// Rationale for why this override is needed.
|
|
1239
1379
|
Justification *string `json:"justification,omitempty"`
|
|
1240
|
-
// The overridden value. Should match the type of the original input.
|
|
1380
|
+
// The overridden value. Should match the type of the original input.
|
|
1241
1381
|
Value interface{} `json:"value"`
|
|
1242
1382
|
}
|
|
1243
1383
|
|
|
@@ -1247,36 +1387,36 @@ type InputOverride struct {
|
|
|
1247
1387
|
// qualified derivation: derived entity, used entity (seed), activity (event application),
|
|
1248
1388
|
// generation time (asOf).
|
|
1249
1389
|
type Derivation struct {
|
|
1250
|
-
// The posture-as-of time of this reconciled view (RFC 3339, trimmed UTC) — the analog of
|
|
1251
|
-
// PROV's generatedAtTime.
|
|
1390
|
+
// The posture-as-of time of this reconciled view (RFC 3339, trimmed UTC) — the analog of
|
|
1391
|
+
// PROV's generatedAtTime.
|
|
1252
1392
|
AsOf time.Time `json:"asOf"`
|
|
1253
|
-
// Number of change events applied to the seed to produce this document.
|
|
1393
|
+
// Number of change events applied to the seed to produce this document.
|
|
1254
1394
|
EventsApplied int64 `json:"eventsApplied"`
|
|
1255
|
-
// The authoritative snapshot this document was reassembled from, pinned by content.
|
|
1395
|
+
// The authoritative snapshot this document was reassembled from, pinned by content.
|
|
1256
1396
|
Seed Seed `json:"seed"`
|
|
1257
|
-
// URI of the event-stream producer context whose events were applied (matches the events'
|
|
1258
|
-
// envelope source).
|
|
1397
|
+
// URI of the event-stream producer context whose events were applied (matches the events'
|
|
1398
|
+
// envelope source).
|
|
1259
1399
|
Source string `json:"source"`
|
|
1260
|
-
// The event watermark: the highest per-key sequence number applied. Downstream precedence
|
|
1261
|
-
// rule: a full-scan document supersedes the reconciled view as of its scan time; between
|
|
1262
|
-
// scans, the reconciled document with the highest throughSequence is the current posture.
|
|
1400
|
+
// The event watermark: the highest per-key sequence number applied. Downstream precedence
|
|
1401
|
+
// rule: a full-scan document supersedes the reconciled view as of its scan time; between
|
|
1402
|
+
// scans, the reconciled document with the highest throughSequence is the current posture.
|
|
1263
1403
|
ThroughSequence int64 `json:"throughSequence"`
|
|
1264
1404
|
}
|
|
1265
1405
|
|
|
1266
1406
|
// The authoritative snapshot this document was reassembled from, pinned by content.
|
|
1267
1407
|
type Seed struct {
|
|
1268
|
-
// Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by
|
|
1269
|
-
// content, not just location.
|
|
1408
|
+
// Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by
|
|
1409
|
+
// content, not just location.
|
|
1270
1410
|
Checksum Checksum `json:"checksum"`
|
|
1271
|
-
// URI to the seed snapshot document (relative path or absolute URL).
|
|
1411
|
+
// URI to the seed snapshot document (relative path or absolute URL).
|
|
1272
1412
|
URI string `json:"uri"`
|
|
1273
1413
|
}
|
|
1274
1414
|
|
|
1275
1415
|
// Information about the tool that generated this HDF file.
|
|
1276
1416
|
type Generator struct {
|
|
1277
|
-
// The name of the software that produced this HDF file. Example: 'gosec-to-hdf'.
|
|
1417
|
+
// The name of the software that produced this HDF file. Example: 'gosec-to-hdf'.
|
|
1278
1418
|
Name string `json:"name"`
|
|
1279
|
-
// The version of the tool. Example: '5.22.3'.
|
|
1419
|
+
// The version of the tool. Example: '5.22.3'.
|
|
1280
1420
|
Version string `json:"version"`
|
|
1281
1421
|
}
|
|
1282
1422
|
|
|
@@ -1284,593 +1424,612 @@ type Generator struct {
|
|
|
1284
1424
|
// external automation content like Ansible playbooks, Terraform scripts, or vendor-provided
|
|
1285
1425
|
// remediation tools.
|
|
1286
1426
|
type Remediation struct {
|
|
1287
|
-
// Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
1288
|
-
// fetched from the URI. Recommended for security when referencing external automation
|
|
1289
|
-
// scripts.
|
|
1427
|
+
// Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
1428
|
+
// fetched from the URI. Recommended for security when referencing external automation
|
|
1429
|
+
// scripts.
|
|
1290
1430
|
Checksum *Checksum `json:"checksum,omitempty"`
|
|
1291
|
-
// URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts,
|
|
1292
|
-
// etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content,
|
|
1293
|
-
// vendor-provided scripts.
|
|
1431
|
+
// URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts,
|
|
1432
|
+
// etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content,
|
|
1433
|
+
// vendor-provided scripts.
|
|
1294
1434
|
URI string `json:"uri"`
|
|
1295
1435
|
}
|
|
1296
1436
|
|
|
1297
1437
|
// Information about the test execution environment. This is distinct from the target being scanned
|
|
1298
1438
|
// - the runner is where the security tool executes, while targets are what is being assessed.
|
|
1299
1439
|
type Runner struct {
|
|
1300
|
-
// The CPU architecture of the runner system. Example: 'x86_64', 'arm64', 'aarch64'.
|
|
1440
|
+
// The CPU architecture of the runner system. Example: 'x86_64', 'arm64', 'aarch64'.
|
|
1301
1441
|
Architecture *string `json:"architecture,omitempty"`
|
|
1302
|
-
// The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'.
|
|
1303
|
-
// Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier.
|
|
1442
|
+
// The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'.
|
|
1443
|
+
// Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier.
|
|
1304
1444
|
ContainerID *string `json:"containerId,omitempty"`
|
|
1305
|
-
// The container image used for the test execution. Example: 'inspec/inspec:latest',
|
|
1306
|
-
// 'ghcr.io/my-org/scanner:v2.1.0'. Useful for CI/CD pipelines where tests run in containers.
|
|
1445
|
+
// The container image used for the test execution. Example: 'inspec/inspec:latest',
|
|
1446
|
+
// 'ghcr.io/my-org/scanner:v2.1.0'. Useful for CI/CD pipelines where tests run in containers.
|
|
1307
1447
|
ContainerImage *string `json:"containerImage,omitempty"`
|
|
1308
|
-
// The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
|
|
1309
|
-
// NOT the DNS suffix of the FQDN. Example: 'CORP'.
|
|
1448
|
+
// The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
|
|
1449
|
+
// NOT the DNS suffix of the FQDN. Example: 'CORP'.
|
|
1310
1450
|
Domain *string `json:"domain,omitempty"`
|
|
1311
|
-
// The fully qualified domain name of the runner system, when known. Distinct from the short
|
|
1312
|
-
// 'hostname'; kept separate for the same reason as on host components (an FQDN is not
|
|
1313
|
-
// reliably decomposable). Example: 'ci-runner-01.build.example.com'.
|
|
1451
|
+
// The fully qualified domain name of the runner system, when known. Distinct from the short
|
|
1452
|
+
// 'hostname'; kept separate for the same reason as on host components (an FQDN is not
|
|
1453
|
+
// reliably decomposable). Example: 'ci-runner-01.build.example.com'.
|
|
1314
1454
|
FQDN *string `json:"fqdn,omitempty"`
|
|
1315
|
-
// The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1316
|
-
// 'k8s-node-worker-03'.
|
|
1455
|
+
// The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1456
|
+
// 'k8s-node-worker-03'.
|
|
1317
1457
|
Hostname *string `json:"hostname,omitempty"`
|
|
1318
|
-
// The name of the runner environment. Examples: 'ubuntu', 'macos', 'windows', 'docker',
|
|
1319
|
-
// 'kubernetes-pod', 'manual'.
|
|
1458
|
+
// The name of the runner environment. Examples: 'ubuntu', 'macos', 'windows', 'docker',
|
|
1459
|
+
// 'kubernetes-pod', 'manual'.
|
|
1320
1460
|
Name string `json:"name"`
|
|
1321
|
-
// The identity of the person or system responsible for executing the test. This could be a
|
|
1322
|
-
// human auditor manually completing a checklist, an automated CI/CD system, or a security
|
|
1323
|
-
// tool. Optional field to support both automated and manual HDF generation.
|
|
1461
|
+
// The identity of the person or system responsible for executing the test. This could be a
|
|
1462
|
+
// human auditor manually completing a checklist, an automated CI/CD system, or a security
|
|
1463
|
+
// tool. Optional field to support both automated and manual HDF generation.
|
|
1324
1464
|
Operator *Identity `json:"operator,omitempty"`
|
|
1325
|
-
// The version/release of the operating system or runtime. Example: '20.04', '13.2', '11'.
|
|
1465
|
+
// The version/release of the operating system or runtime. Example: '20.04', '13.2', '11'.
|
|
1326
1466
|
Release *string `json:"release,omitempty"`
|
|
1327
1467
|
}
|
|
1328
1468
|
|
|
1329
1469
|
// Statistics for the assessment run(s) such as duration and result counts.
|
|
1330
1470
|
type Statistics struct {
|
|
1331
|
-
// How long (in seconds) this assessment run took.
|
|
1471
|
+
// How long (in seconds) this assessment run took.
|
|
1332
1472
|
Duration *float64 `json:"duration,omitempty"`
|
|
1333
|
-
// Breakdowns of requirement statistics by result status.
|
|
1473
|
+
// Breakdowns of requirement statistics by result status.
|
|
1334
1474
|
Requirements *StatisticHash `json:"requirements,omitempty"`
|
|
1335
1475
|
}
|
|
1336
1476
|
|
|
1337
1477
|
// Statistics for requirement results, grouped by status.
|
|
1338
1478
|
type StatisticHash struct {
|
|
1339
|
-
// Statistics for requirements that encountered an error during assessment.
|
|
1479
|
+
// Statistics for requirements that encountered an error during assessment.
|
|
1340
1480
|
Error *StatisticBlock `json:"error,omitempty"`
|
|
1341
|
-
// Statistics for requirements that failed.
|
|
1481
|
+
// Statistics for requirements that failed.
|
|
1342
1482
|
Failed *StatisticBlock `json:"failed,omitempty"`
|
|
1343
|
-
// Statistics for requirements that are not applicable to the target.
|
|
1483
|
+
// Statistics for requirements that are not applicable to the target.
|
|
1344
1484
|
NotApplicable *StatisticBlock `json:"notApplicable,omitempty"`
|
|
1345
|
-
// Statistics for requirements that were not reviewed (manual check required).
|
|
1485
|
+
// Statistics for requirements that were not reviewed (manual check required).
|
|
1346
1486
|
NotReviewed *StatisticBlock `json:"notReviewed,omitempty"`
|
|
1347
|
-
// Statistics for requirements that passed.
|
|
1487
|
+
// Statistics for requirements that passed.
|
|
1348
1488
|
Passed *StatisticBlock `json:"passed,omitempty"`
|
|
1349
1489
|
}
|
|
1350
1490
|
|
|
1351
1491
|
// Statistics for a given item, such as the total count.
|
|
1352
1492
|
type StatisticBlock struct {
|
|
1353
|
-
// The total count. Example: the total number of requirements in a given category for a run.
|
|
1493
|
+
// The total count. Example: the total number of requirements in a given category for a run.
|
|
1354
1494
|
Total int64 `json:"total"`
|
|
1355
1495
|
}
|
|
1356
1496
|
|
|
1357
1497
|
// The security tool that produced the assessment data represented in this HDF file. Aligns with
|
|
1358
1498
|
// SARIF, OSCAL, and CycloneDX terminology.
|
|
1359
1499
|
type Tool struct {
|
|
1360
|
-
// The named format of the source data, when it follows a recognized format specification
|
|
1361
|
-
// with its own identity: an interchange format emitted by many tools ('SARIF', 'XCCDF',
|
|
1362
|
-
// 'OSCAL') or one of several named output formats a single tool produces ('FVDL',
|
|
1363
|
-
// 'exec-json', 'FPF').
|
|
1364
|
-
//
|
|
1365
|
-
// Never a serialization structure — 'JSON', 'XML', and 'CSV' are encodings, not formats.
|
|
1366
|
-
//
|
|
1367
|
-
// Omit for a tool's native output: an absent format means the tool's own shape, and data
|
|
1368
|
-
// arriving as a named format is converted by that format's converter, which sets this field
|
|
1369
|
-
// alongside the producing tool's name.
|
|
1500
|
+
// The named format of the source data, when it follows a recognized format specification
|
|
1501
|
+
// with its own identity: an interchange format emitted by many tools ('SARIF', 'XCCDF',
|
|
1502
|
+
// 'OSCAL') or one of several named output formats a single tool produces ('FVDL',
|
|
1503
|
+
// 'exec-json', 'FPF').
|
|
1504
|
+
//
|
|
1505
|
+
// Never a serialization structure — 'JSON', 'XML', and 'CSV' are encodings, not formats.
|
|
1506
|
+
//
|
|
1507
|
+
// Omit for a tool's native output: an absent format means the tool's own shape, and data
|
|
1508
|
+
// arriving as a named format is converted by that format's converter, which sets this field
|
|
1509
|
+
// alongside the producing tool's name.
|
|
1370
1510
|
Format *string `json:"format,omitempty"`
|
|
1371
|
-
// The name of the security tool that produced the data. Examples: 'gosec', 'Semgrep',
|
|
1372
|
-
// 'OpenSCAP', 'AWS Config', 'Nessus'. Omit if the tool cannot be identified.
|
|
1511
|
+
// The name of the security tool that produced the data. Examples: 'gosec', 'Semgrep',
|
|
1512
|
+
// 'OpenSCAP', 'AWS Config', 'Nessus'. Omit if the tool cannot be identified.
|
|
1373
1513
|
Name *string `json:"name,omitempty"`
|
|
1374
|
-
// Version of the source tool, if available in the tool's output. Example: '5.22.3'.
|
|
1514
|
+
// Version of the source tool, if available in the tool's output. Example: '5.22.3'.
|
|
1375
1515
|
Version *string `json:"version,omitempty"`
|
|
1376
1516
|
}
|
|
1377
1517
|
|
|
1378
1518
|
// Information on the set of requirements that can be assessed, including baseline metadata and
|
|
1379
1519
|
// requirement definitions.
|
|
1380
1520
|
type HDFBaseline struct {
|
|
1381
|
-
// The set of dependencies this baseline depends on.
|
|
1521
|
+
// The set of dependencies this baseline depends on.
|
|
1382
1522
|
Depends []Dependency `json:"depends,omitempty"`
|
|
1383
|
-
//
|
|
1523
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) this
|
|
1524
|
+
// baseline was converted from.
|
|
1525
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
1526
|
+
// The tool that generated this file.
|
|
1384
1527
|
Generator *Generator `json:"generator,omitempty"`
|
|
1385
|
-
// A set of descriptions for the requirement groups.
|
|
1528
|
+
// A set of descriptions for the requirement groups.
|
|
1386
1529
|
Groups []RequirementGroup `json:"groups,omitempty"`
|
|
1387
|
-
// The input(s) or attribute(s) to be used in the run.
|
|
1530
|
+
// The input(s) or attribute(s) to be used in the run.
|
|
1388
1531
|
Inputs []Input `json:"inputs,omitempty"`
|
|
1389
|
-
// Cryptographic integrity information for verifying this baseline has not been tampered
|
|
1390
|
-
// with.
|
|
1532
|
+
// Cryptographic integrity information for verifying this baseline has not been tampered
|
|
1533
|
+
// with.
|
|
1391
1534
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1392
|
-
// Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1393
|
-
// scripts, etc.) for implementing the security controls defined in this baseline.
|
|
1535
|
+
// Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1536
|
+
// scripts, etc.) for implementing the security controls defined in this baseline.
|
|
1394
1537
|
Remediation *Remediation `json:"remediation,omitempty"`
|
|
1395
|
-
// The set of requirements - contains no findings as the assessment has not yet occurred.
|
|
1538
|
+
// The set of requirements - contains no findings as the assessment has not yet occurred.
|
|
1396
1539
|
Requirements []BaselineRequirement `json:"requirements"`
|
|
1397
|
-
// The name - must be unique.
|
|
1540
|
+
// The name - must be unique.
|
|
1398
1541
|
Name string `json:"name"`
|
|
1399
|
-
// The copyright holder(s).
|
|
1542
|
+
// The copyright holder(s).
|
|
1400
1543
|
Copyright *string `json:"copyright,omitempty"`
|
|
1401
|
-
// The email address or other contact information of the copyright holder(s).
|
|
1544
|
+
// The email address or other contact information of the copyright holder(s).
|
|
1402
1545
|
CopyrightEmail *string `json:"copyrightEmail,omitempty"`
|
|
1403
|
-
//
|
|
1404
|
-
//
|
|
1405
|
-
|
|
1546
|
+
// Prose description of the baseline, more detailed than summary. Carried verbatim, like
|
|
1547
|
+
// every HDF prose field.
|
|
1548
|
+
Description *string `json:"description,omitempty"`
|
|
1549
|
+
// Optional references to external artifacts relevant to this baseline (CTI/STIX,
|
|
1550
|
+
// advisories, source catalogs, or any URI-addressable artifact). Travels with the baseline
|
|
1551
|
+
// definition. Inert context; see External_Reference.
|
|
1406
1552
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
1407
|
-
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1408
|
-
// environment, region, team. Values must be strings.
|
|
1553
|
+
// Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1554
|
+
// environment, region, team. Values must be strings.
|
|
1409
1555
|
Labels map[string]string `json:"labels,omitempty"`
|
|
1410
|
-
// The copyright license. Example: 'Apache-2.0'.
|
|
1556
|
+
// The copyright license. Example: 'Apache-2.0'.
|
|
1411
1557
|
License *string `json:"license,omitempty"`
|
|
1412
|
-
// The maintainer(s).
|
|
1558
|
+
// The maintainer(s).
|
|
1413
1559
|
Maintainer *string `json:"maintainer,omitempty"`
|
|
1414
|
-
// The status. Example: 'loaded'.
|
|
1560
|
+
// The status. Example: 'loaded'.
|
|
1415
1561
|
Status *string `json:"status,omitempty"`
|
|
1416
|
-
// The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
1562
|
+
// The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
1417
1563
|
Summary *string `json:"summary,omitempty"`
|
|
1418
|
-
// The set of supported platform targets.
|
|
1564
|
+
// The set of supported platform targets.
|
|
1419
1565
|
Supports []SupportedPlatform `json:"supports,omitempty"`
|
|
1420
|
-
// The title - should be human readable.
|
|
1566
|
+
// The title - should be human readable.
|
|
1421
1567
|
Title *string `json:"title,omitempty"`
|
|
1422
|
-
// The version of the baseline.
|
|
1568
|
+
// The version of the baseline.
|
|
1423
1569
|
Version *string `json:"version,omitempty"`
|
|
1424
1570
|
}
|
|
1425
1571
|
|
|
1426
1572
|
// A requirement definition without assessment results.
|
|
1427
1573
|
type BaselineRequirement struct {
|
|
1428
|
-
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
1429
|
-
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
1430
|
-
// 'fix', 'rationale'.
|
|
1574
|
+
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
1575
|
+
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
1576
|
+
// 'fix', 'rationale'.
|
|
1431
1577
|
Descriptions []Description `json:"descriptions"`
|
|
1432
|
-
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
1433
|
-
// clarity.
|
|
1578
|
+
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
1579
|
+
// clarity.
|
|
1434
1580
|
Severity *Severity `json:"severity,omitempty"`
|
|
1435
|
-
// The requirement identifier
|
|
1581
|
+
// The requirement identifier, naming the requirement itself rather than one finding of it.
|
|
1582
|
+
// Example: 'SV-238196'. Several entries in one baseline may legitimately carry the same id
|
|
1583
|
+
// (one scanner reporting one CVE against several packages, or an overlay restating what it
|
|
1584
|
+
// inherits), so an id is not an instance key: index requirements as id to list, never id to
|
|
1585
|
+
// one, and an amendment addressing an id applies to every entry carrying it.
|
|
1436
1586
|
ID string `json:"id"`
|
|
1437
|
-
// The impactfulness or severity (0.0 to 1.0).
|
|
1587
|
+
// The impactfulness or severity (0.0 to 1.0).
|
|
1438
1588
|
Impact float64 `json:"impact"`
|
|
1439
|
-
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
1589
|
+
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
1440
1590
|
Tags map[string]interface{} `json:"tags"`
|
|
1441
|
-
// Whether the requirement is mandatory within its baseline.
|
|
1442
|
-
//
|
|
1443
|
-
// Distinct from severity (risk weight) and status (lifecycle state).
|
|
1444
|
-
//
|
|
1445
|
-
// Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:'
|
|
1446
|
-
// markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may
|
|
1447
|
-
// carry richer semantics; layer those onto props[]/tags{}).
|
|
1448
|
-
//
|
|
1449
|
-
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
1450
|
-
// convention.
|
|
1591
|
+
// Whether the requirement is mandatory within its baseline.
|
|
1592
|
+
//
|
|
1593
|
+
// Distinct from severity (risk weight) and status (lifecycle state).
|
|
1594
|
+
//
|
|
1595
|
+
// Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:'
|
|
1596
|
+
// markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may
|
|
1597
|
+
// carry richer semantics; layer those onto props[]/tags{}).
|
|
1598
|
+
//
|
|
1599
|
+
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
1600
|
+
// convention.
|
|
1451
1601
|
Applicability *Applicability `json:"applicability,omitempty"`
|
|
1452
|
-
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
1453
|
-
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
1454
|
-
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
1455
|
-
// underlying source code.
|
|
1602
|
+
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
1603
|
+
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
1604
|
+
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
1605
|
+
// underlying source code.
|
|
1456
1606
|
Code *string `json:"code,omitempty"`
|
|
1457
|
-
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
1458
|
-
// categories.
|
|
1459
|
-
//
|
|
1460
|
-
// 'policy' = an authored governance statement; 'procedure' = a documented process;
|
|
1461
|
-
// 'technical' = an enforced technical configuration; 'management' = a
|
|
1462
|
-
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
1463
|
-
// AT, IR, MA families).
|
|
1464
|
-
//
|
|
1465
|
-
// Optional: when omitted, consumers may infer heuristically from family/id but should not
|
|
1466
|
-
// assume a default.
|
|
1607
|
+
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
1608
|
+
// categories.
|
|
1609
|
+
//
|
|
1610
|
+
// 'policy' = an authored governance statement; 'procedure' = a documented process;
|
|
1611
|
+
// 'technical' = an enforced technical configuration; 'management' = a
|
|
1612
|
+
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
1613
|
+
// AT, IR, MA families).
|
|
1614
|
+
//
|
|
1615
|
+
// Optional: when omitted, consumers may infer heuristically from family/id but should not
|
|
1616
|
+
// assume a default.
|
|
1467
1617
|
ControlType *ControlType `json:"controlType,omitempty"`
|
|
1468
|
-
// Optional references to external artifacts relevant to this requirement (CTI/STIX
|
|
1469
|
-
// correlation, advisories, control/definition sources, or any URI-addressable artifact).
|
|
1470
|
-
// Applies to both baseline requirement definitions and evaluated requirements. Inert
|
|
1471
|
-
// context; see External_Reference.
|
|
1618
|
+
// Optional references to external artifacts relevant to this requirement (CTI/STIX
|
|
1619
|
+
// correlation, advisories, control/definition sources, or any URI-addressable artifact).
|
|
1620
|
+
// Applies to both baseline requirement definitions and evaluated requirements. Inert
|
|
1621
|
+
// context; see External_Reference.
|
|
1472
1622
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
1473
|
-
// The set of references to external documents.
|
|
1623
|
+
// The set of references to external documents.
|
|
1474
1624
|
Refs []Reference `json:"refs,omitempty"`
|
|
1475
|
-
// The explicit location of the requirement within the source code.
|
|
1625
|
+
// The explicit location of the requirement within the source code.
|
|
1476
1626
|
SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
|
|
1477
|
-
// The title - is nullable.
|
|
1627
|
+
// The title - is nullable.
|
|
1478
1628
|
Title *string `json:"title,omitempty"`
|
|
1479
|
-
// How this requirement is intended to be verified.
|
|
1480
|
-
//
|
|
1481
|
-
// Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the
|
|
1482
|
-
// requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs);
|
|
1483
|
-
// 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule
|
|
1484
|
-
// lacking a fix).
|
|
1485
|
-
//
|
|
1486
|
-
// 'automated' = a check exists and runs without operator action; 'hybrid' = part automated,
|
|
1487
|
-
// part manual.
|
|
1488
|
-
//
|
|
1489
|
-
// Optional: when omitted, consumers should not infer a default.
|
|
1629
|
+
// How this requirement is intended to be verified.
|
|
1630
|
+
//
|
|
1631
|
+
// Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the
|
|
1632
|
+
// requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs);
|
|
1633
|
+
// 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule
|
|
1634
|
+
// lacking a fix).
|
|
1635
|
+
//
|
|
1636
|
+
// 'automated' = a check exists and runs without operator action; 'hybrid' = part automated,
|
|
1637
|
+
// part manual.
|
|
1638
|
+
//
|
|
1639
|
+
// Optional: when omitted, consumers should not infer a default.
|
|
1490
1640
|
VerificationMethod *VerificationMethodEnum `json:"verificationMethod,omitempty"`
|
|
1491
1641
|
}
|
|
1492
1642
|
|
|
1493
1643
|
// Structured comparison between two or more HDF security assessment documents. Supports temporal,
|
|
1494
1644
|
// baseline, fleet, and multi-source comparison modes.
|
|
1495
1645
|
type HDFComparison struct {
|
|
1496
|
-
// Map of annotation IDs to annotation objects, providing context or action items for
|
|
1497
|
-
// requirement diffs.
|
|
1498
|
-
Annotations map[string]Annotation
|
|
1499
|
-
// Comparison of baselines between sources.
|
|
1500
|
-
BaselineDiffs []BaselineDiff
|
|
1501
|
-
// The mode of comparison being performed.
|
|
1502
|
-
ComparisonMode ComparisonMode
|
|
1503
|
-
// Comparison of components between two system documents. Used in systemDrift mode. A
|
|
1504
|
-
// component's BOM changes surface as a field change on its boms[] here.
|
|
1505
|
-
ComponentDiffs []ComponentDiff
|
|
1506
|
-
// External/metadata changes separate from status changes (Terraform pattern).
|
|
1507
|
-
Drift []RequirementDiff
|
|
1508
|
-
//
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
//
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
//
|
|
1523
|
-
//
|
|
1524
|
-
//
|
|
1525
|
-
//
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
Summary
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1646
|
+
// Map of annotation IDs to annotation objects, providing context or action items for
|
|
1647
|
+
// requirement diffs.
|
|
1648
|
+
Annotations map[string]Annotation `json:"annotations,omitempty"`
|
|
1649
|
+
// Comparison of baselines between sources.
|
|
1650
|
+
BaselineDiffs []BaselineDiff `json:"baselineDiffs,omitempty"`
|
|
1651
|
+
// The mode of comparison being performed.
|
|
1652
|
+
ComparisonMode ComparisonMode `json:"comparisonMode"`
|
|
1653
|
+
// Comparison of components between two system documents. Used in systemDrift mode. A
|
|
1654
|
+
// component's BOM changes surface as a field change on its boms[] here.
|
|
1655
|
+
ComponentDiffs []ComponentDiff `json:"componentDiffs,omitempty"`
|
|
1656
|
+
// External/metadata changes separate from status changes (Terraform pattern).
|
|
1657
|
+
Drift []RequirementDiff `json:"drift,omitempty"`
|
|
1658
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) this
|
|
1659
|
+
// comparison was derived from.
|
|
1660
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
1661
|
+
// Optional references to external artifacts relevant to this comparison (CTI/STIX,
|
|
1662
|
+
// advisories, or any URI-addressable artifact). Inert context; see External_Reference.
|
|
1663
|
+
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
1664
|
+
// Schema version for this comparison format.
|
|
1665
|
+
FormatVersion FormatVersion `json:"formatVersion"`
|
|
1666
|
+
// Information about the tool that generated this comparison.
|
|
1667
|
+
Generator *Generator `json:"generator,omitempty"`
|
|
1668
|
+
// Cryptographic integrity information for verifying this comparison document.
|
|
1669
|
+
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1670
|
+
// Configuration for how requirements were matched across sources.
|
|
1671
|
+
Matching *MatchingConfig `json:"matching,omitempty"`
|
|
1672
|
+
// RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
|
|
1673
|
+
// component's BOM changes as a field change on its boms[] (see componentDiffs), and
|
|
1674
|
+
// standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
|
|
1675
|
+
// field is retained for a future normalized package-level diff; consumers must not expect
|
|
1676
|
+
// it from today's systemDrift output.
|
|
1677
|
+
PackageDiffs []PackageDiff `json:"packageDiffs,omitempty"`
|
|
1678
|
+
// Detailed comparison of individual requirements between sources.
|
|
1679
|
+
RequirementDiffs []RequirementDiff `json:"requirementDiffs"`
|
|
1680
|
+
// The source documents being compared. At least two sources are required.
|
|
1681
|
+
Sources []Source `json:"sources"`
|
|
1682
|
+
// Summary statistics for the overall comparison.
|
|
1683
|
+
Summary ComparisonSummary `json:"summary"`
|
|
1684
|
+
// URI identifying the system being compared in systemDrift mode.
|
|
1685
|
+
SystemRef *string `json:"systemRef,omitempty"`
|
|
1686
|
+
// When this comparison was performed.
|
|
1687
|
+
Timestamp *time.Time `json:"timestamp,omitempty"`
|
|
1537
1688
|
}
|
|
1538
1689
|
|
|
1539
1690
|
// An annotation attached to a comparison, providing context or action items.
|
|
1540
1691
|
type Annotation struct {
|
|
1541
|
-
// The category of this annotation.
|
|
1692
|
+
// The category of this annotation.
|
|
1542
1693
|
Category *AnnotationCategory `json:"category,omitempty"`
|
|
1543
|
-
// Detailed description of the annotation.
|
|
1694
|
+
// Detailed description of the annotation.
|
|
1544
1695
|
Description *string `json:"description,omitempty"`
|
|
1545
|
-
// Human-readable label for this annotation.
|
|
1696
|
+
// Human-readable label for this annotation.
|
|
1546
1697
|
Label string `json:"label"`
|
|
1547
|
-
// Whether this annotation requires human confirmation before acting on it.
|
|
1698
|
+
// Whether this annotation requires human confirmation before acting on it.
|
|
1548
1699
|
NeedsConfirmation *bool `json:"needsConfirmation,omitempty"`
|
|
1549
1700
|
}
|
|
1550
1701
|
|
|
1551
1702
|
// Comparison of a baseline between sources.
|
|
1552
1703
|
type BaselineDiff struct {
|
|
1553
|
-
// The source of any ID mapping used to correlate requirements across baseline versions.
|
|
1704
|
+
// The source of any ID mapping used to correlate requirements across baseline versions.
|
|
1554
1705
|
MappingSource *string `json:"mappingSource,omitempty"`
|
|
1555
|
-
// Name of the baseline being compared.
|
|
1706
|
+
// Name of the baseline being compared.
|
|
1556
1707
|
Name string `json:"name"`
|
|
1557
|
-
// Version of the baseline in the new source.
|
|
1708
|
+
// Version of the baseline in the new source.
|
|
1558
1709
|
NewVersion *string `json:"newVersion,omitempty"`
|
|
1559
|
-
// Version of the baseline in the old source.
|
|
1710
|
+
// Version of the baseline in the old source.
|
|
1560
1711
|
OldVersion *string `json:"oldVersion,omitempty"`
|
|
1561
|
-
// The state of this baseline in the comparison.
|
|
1712
|
+
// The state of this baseline in the comparison.
|
|
1562
1713
|
State BaselineDiffState `json:"state"`
|
|
1563
1714
|
}
|
|
1564
1715
|
|
|
1565
1716
|
// Comparison of a single component between two system document versions.
|
|
1566
1717
|
type ComponentDiff struct {
|
|
1567
|
-
// Component snapshot from the new system document. Null when state is 'absent'.
|
|
1718
|
+
// Component snapshot from the new system document. Null when state is 'absent'.
|
|
1568
1719
|
After interface{} `json:"after,omitempty"`
|
|
1569
|
-
// Component snapshot from the old system document. Null when state is 'new'.
|
|
1720
|
+
// Component snapshot from the old system document. Null when state is 'new'.
|
|
1570
1721
|
Before interface{} `json:"before,omitempty"`
|
|
1571
|
-
// Detailed field-level changes between the before and after component snapshots.
|
|
1722
|
+
// Detailed field-level changes between the before and after component snapshots.
|
|
1572
1723
|
FieldChanges []FieldChange `json:"fieldChanges,omitempty"`
|
|
1573
|
-
// Component name used for matching across system versions.
|
|
1724
|
+
// Component name used for matching across system versions.
|
|
1574
1725
|
Name string `json:"name"`
|
|
1575
|
-
// The state of this component in the comparison.
|
|
1726
|
+
// The state of this component in the comparison.
|
|
1576
1727
|
State BaselineDiffState `json:"state"`
|
|
1577
1728
|
}
|
|
1578
1729
|
|
|
1579
1730
|
// A single field-level change between two versions of a requirement.
|
|
1580
1731
|
type FieldChange struct {
|
|
1581
|
-
// The new value of the field (for 'add' and 'replace' operations).
|
|
1732
|
+
// The new value of the field (for 'add' and 'replace' operations).
|
|
1582
1733
|
NewValue interface{} `json:"newValue,omitempty"`
|
|
1583
|
-
// The previous value of the field (for 'remove' and 'replace' operations).
|
|
1734
|
+
// The previous value of the field (for 'remove' and 'replace' operations).
|
|
1584
1735
|
OldValue interface{} `json:"oldValue,omitempty"`
|
|
1585
|
-
// The type of change operation.
|
|
1736
|
+
// The type of change operation.
|
|
1586
1737
|
Op Op `json:"op"`
|
|
1587
|
-
// JSON Pointer path to the changed field.
|
|
1738
|
+
// JSON Pointer path to the changed field.
|
|
1588
1739
|
Path string `json:"path"`
|
|
1589
1740
|
}
|
|
1590
1741
|
|
|
1591
1742
|
// A comparison of a single requirement between sources, including state, changes, and full
|
|
1592
1743
|
// before/after snapshots.
|
|
1593
1744
|
type RequirementDiff struct {
|
|
1594
|
-
// The requirement as it appeared in the new source. Null when state is 'absent'.
|
|
1745
|
+
// The requirement as it appeared in the new source. Null when state is 'absent'.
|
|
1595
1746
|
After interface{} `json:"after"`
|
|
1596
|
-
// Sensitive data from the new source that should not be included in the main after snapshot.
|
|
1747
|
+
// Sensitive data from the new source that should not be included in the main after snapshot.
|
|
1597
1748
|
AfterSensitive map[string]interface{} `json:"afterSensitive,omitempty"`
|
|
1598
|
-
// IDs of annotations attached to this requirement diff.
|
|
1749
|
+
// IDs of annotations attached to this requirement diff.
|
|
1599
1750
|
AnnotationIDS []string `json:"annotationIds,omitempty"`
|
|
1600
|
-
//
|
|
1751
|
+
// Name of the baseline the requirement belongs to, so a consumer can group diffs the way
|
|
1752
|
+
// hdf diff --group-by baseline does. '(multiple)' when the id appears in more than one
|
|
1753
|
+
// baseline of the same document.
|
|
1754
|
+
Baseline *string `json:"baseline,omitempty"`
|
|
1755
|
+
// The requirement as it appeared in the old/reference source. Null when state is 'new'.
|
|
1601
1756
|
Before interface{} `json:"before"`
|
|
1602
|
-
// Sensitive data from the old source that should not be included in the main before
|
|
1603
|
-
// snapshot.
|
|
1757
|
+
// Sensitive data from the old source that should not be included in the main before
|
|
1758
|
+
// snapshot.
|
|
1604
1759
|
BeforeSensitive map[string]interface{} `json:"beforeSensitive,omitempty"`
|
|
1605
|
-
// The reasons for the state change.
|
|
1760
|
+
// The reasons for the state change.
|
|
1606
1761
|
ChangeReasons []ChangeReason `json:"changeReasons"`
|
|
1607
|
-
// Conflicts between multiple scanner results for this requirement.
|
|
1762
|
+
// Conflicts between multiple scanner results for this requirement.
|
|
1608
1763
|
Conflicts []ScannerConflict `json:"conflicts,omitempty"`
|
|
1609
|
-
// Detailed field-level changes between the before and after versions.
|
|
1764
|
+
// Detailed field-level changes between the before and after versions.
|
|
1610
1765
|
FieldChanges []FieldChange `json:"fieldChanges"`
|
|
1611
|
-
// The canonical requirement identifier used for this diff.
|
|
1766
|
+
// The canonical requirement identifier used for this diff.
|
|
1612
1767
|
ID string `json:"id"`
|
|
1613
|
-
// Confidence score for the match (0-1).
|
|
1768
|
+
// Confidence score for the match (0-1).
|
|
1614
1769
|
MatchConfidence *float64 `json:"matchConfidence,omitempty"`
|
|
1615
|
-
// Whether the match was manually confirmed by a human.
|
|
1770
|
+
// Whether the match was manually confirmed by a human.
|
|
1616
1771
|
MatchManual *bool `json:"matchManual,omitempty"`
|
|
1617
|
-
// The strategy that was used to match this requirement across sources.
|
|
1772
|
+
// The strategy that was used to match this requirement across sources.
|
|
1618
1773
|
MatchStrategy *MatchStrategy `json:"matchStrategy,omitempty"`
|
|
1619
|
-
// The effective status of the requirement in the new source.
|
|
1774
|
+
// The effective status of the requirement in the new source.
|
|
1620
1775
|
NewEffectiveStatus *string `json:"newEffectiveStatus,omitempty"`
|
|
1621
|
-
// The requirement ID in the new source, if different from the canonical id.
|
|
1776
|
+
// The requirement ID in the new source, if different from the canonical id.
|
|
1622
1777
|
NewID *string `json:"newId,omitempty"`
|
|
1623
|
-
// The impact score of the requirement in the new source (0-1).
|
|
1778
|
+
// The impact score of the requirement in the new source (0-1).
|
|
1624
1779
|
NewImpact *float64 `json:"newImpact,omitempty"`
|
|
1625
|
-
// The effective status of the requirement in the old source.
|
|
1780
|
+
// The effective status of the requirement in the old source.
|
|
1626
1781
|
OldEffectiveStatus *string `json:"oldEffectiveStatus,omitempty"`
|
|
1627
|
-
// The requirement ID in the old source, if different from the canonical id.
|
|
1782
|
+
// The requirement ID in the old source, if different from the canonical id.
|
|
1628
1783
|
OldID *string `json:"oldId,omitempty"`
|
|
1629
|
-
// The impact score of the requirement in the old source (0-1).
|
|
1784
|
+
// The impact score of the requirement in the old source (0-1).
|
|
1630
1785
|
OldImpact *float64 `json:"oldImpact,omitempty"`
|
|
1631
|
-
// Index into the sources array for multi-source comparisons.
|
|
1786
|
+
// Index into the sources array for multi-source comparisons.
|
|
1632
1787
|
SourceIndex *int64 `json:"sourceIndex,omitempty"`
|
|
1633
|
-
// The state of this requirement in the comparison.
|
|
1788
|
+
// The state of this requirement in the comparison.
|
|
1634
1789
|
State RequirementState `json:"state"`
|
|
1635
|
-
// The requirement title for human readability.
|
|
1790
|
+
// The requirement title for human readability.
|
|
1636
1791
|
Title *string `json:"title,omitempty"`
|
|
1637
1792
|
}
|
|
1638
1793
|
|
|
1639
1794
|
// A conflict between scanner results for the same requirement.
|
|
1640
1795
|
type ScannerConflict struct {
|
|
1641
|
-
// The field where the conflict occurs.
|
|
1796
|
+
// The field where the conflict occurs.
|
|
1642
1797
|
Field string `json:"field"`
|
|
1643
|
-
// How the conflict was resolved.
|
|
1798
|
+
// How the conflict was resolved.
|
|
1644
1799
|
Resolution *ConflictResolution `json:"resolution,omitempty"`
|
|
1645
|
-
// Index of the source whose value was chosen as the resolution.
|
|
1800
|
+
// Index of the source whose value was chosen as the resolution.
|
|
1646
1801
|
ResolvedIndex *int64 `json:"resolvedIndex,omitempty"`
|
|
1647
|
-
// The conflicting values from each source.
|
|
1802
|
+
// The conflicting values from each source.
|
|
1648
1803
|
Values []Value `json:"values"`
|
|
1649
1804
|
}
|
|
1650
1805
|
|
|
1651
1806
|
type Value struct {
|
|
1652
|
-
// Zero-based index into the sources array.
|
|
1807
|
+
// Zero-based index into the sources array.
|
|
1653
1808
|
SourceIndex int64 `json:"sourceIndex"`
|
|
1654
|
-
// Human-readable label for the source.
|
|
1809
|
+
// Human-readable label for the source.
|
|
1655
1810
|
SourceLabel string `json:"sourceLabel"`
|
|
1656
|
-
// The value reported by this source for the conflicting field.
|
|
1811
|
+
// The value reported by this source for the conflicting field.
|
|
1657
1812
|
Value interface{} `json:"value"`
|
|
1658
1813
|
}
|
|
1659
1814
|
|
|
1660
1815
|
// Configuration for how requirements are matched across sources.
|
|
1661
1816
|
type MatchingConfig struct {
|
|
1662
|
-
// Ordered list of fallback strategies tried when the primary strategy fails to find a match.
|
|
1817
|
+
// Ordered list of fallback strategies tried when the primary strategy fails to find a match.
|
|
1663
1818
|
FallbackStrategies []MatchStrategy `json:"fallbackStrategies,omitempty"`
|
|
1664
|
-
// Fields used to compute a fingerprint for fuzzy matching.
|
|
1819
|
+
// Fields used to compute a fingerprint for fuzzy matching.
|
|
1665
1820
|
FingerprintFields []string `json:"fingerprintFields,omitempty"`
|
|
1666
|
-
// URI pointing to an external mapping table used for ID translation.
|
|
1821
|
+
// URI pointing to an external mapping table used for ID translation.
|
|
1667
1822
|
MappingTableURI *string `json:"mappingTableUri,omitempty"`
|
|
1668
|
-
// Minimum confidence score (0-1) required to accept a match.
|
|
1823
|
+
// Minimum confidence score (0-1) required to accept a match.
|
|
1669
1824
|
MinimumConfidence *float64 `json:"minimumConfidence,omitempty"`
|
|
1670
|
-
// The primary strategy used to match requirements across sources.
|
|
1825
|
+
// The primary strategy used to match requirements across sources.
|
|
1671
1826
|
PrimaryStrategy MatchStrategy `json:"primaryStrategy"`
|
|
1672
1827
|
}
|
|
1673
1828
|
|
|
1674
1829
|
// Comparison of a single BOM node between two BOM versions, matched by purl (software) or
|
|
1675
1830
|
// identifier (models, datasets, hardware, crypto).
|
|
1676
1831
|
type PackageDiff struct {
|
|
1677
|
-
// Generic identity key for matching a BOM node across versions when no purl applies — e.g.
|
|
1678
|
-
// a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
|
|
1679
|
-
// number. At least one of purl or identifier is required.
|
|
1832
|
+
// Generic identity key for matching a BOM node across versions when no purl applies — e.g.
|
|
1833
|
+
// a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
|
|
1834
|
+
// number. At least one of purl or identifier is required.
|
|
1680
1835
|
Identifier *string `json:"identifier,omitempty"`
|
|
1681
|
-
// License identifiers for this package.
|
|
1836
|
+
// License identifiers for this package.
|
|
1682
1837
|
Licenses []string `json:"licenses,omitempty"`
|
|
1683
|
-
// Human-readable node name.
|
|
1838
|
+
// Human-readable node name.
|
|
1684
1839
|
Name *string `json:"name,omitempty"`
|
|
1685
|
-
// Package version in the new SBOM.
|
|
1840
|
+
// Package version in the new SBOM.
|
|
1686
1841
|
NewVersion *string `json:"newVersion,omitempty"`
|
|
1687
|
-
// Package version in the old SBOM.
|
|
1842
|
+
// Package version in the old SBOM.
|
|
1688
1843
|
OldVersion *string `json:"oldVersion,omitempty"`
|
|
1689
|
-
// Package URL (purl) — the preferred identity key for matching software packages across
|
|
1690
|
-
// BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
|
|
1691
|
-
// algorithms) key on identifier instead.
|
|
1844
|
+
// Package URL (purl) — the preferred identity key for matching software packages across
|
|
1845
|
+
// BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
|
|
1846
|
+
// algorithms) key on identifier instead.
|
|
1692
1847
|
Purl *string `json:"purl,omitempty"`
|
|
1693
|
-
// The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
1694
|
-
// updated (version changed), unchanged.
|
|
1848
|
+
// The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
1849
|
+
// updated (version changed), unchanged.
|
|
1695
1850
|
State PackageDiffState `json:"state"`
|
|
1696
1851
|
}
|
|
1697
1852
|
|
|
1698
1853
|
// A source document participating in the comparison.
|
|
1699
1854
|
type Source struct {
|
|
1700
|
-
// When the source assessment was performed. ISO 8601 format.
|
|
1855
|
+
// When the source assessment was performed. ISO 8601 format.
|
|
1701
1856
|
AssessmentTimestamp *time.Time `json:"assessmentTimestamp,omitempty"`
|
|
1702
|
-
// Reference to the baseline used in this source assessment.
|
|
1857
|
+
// Reference to the baseline used in this source assessment.
|
|
1703
1858
|
BaselineRef *BaselineRef `json:"baselineRef,omitempty"`
|
|
1704
|
-
// Cryptographic checksum of the source document for integrity verification.
|
|
1859
|
+
// Cryptographic checksum of the source document for integrity verification.
|
|
1705
1860
|
Checksum *Checksum `json:"checksum,omitempty"`
|
|
1706
|
-
// The components assessed in this source.
|
|
1861
|
+
// The components assessed in this source.
|
|
1707
1862
|
Components []Component `json:"components,omitempty"`
|
|
1708
|
-
// Human-readable label for this source. Example: 'Before remediation scan'.
|
|
1863
|
+
// Human-readable label for this source. Example: 'Before remediation scan'.
|
|
1709
1864
|
Label string `json:"label"`
|
|
1710
|
-
// The original format of the source document before conversion to HDF.
|
|
1865
|
+
// The original format of the source document before conversion to HDF.
|
|
1711
1866
|
OriginalFormat *OriginalFormat `json:"originalFormat,omitempty"`
|
|
1712
|
-
// The role of this source in the comparison.
|
|
1867
|
+
// The role of this source in the comparison.
|
|
1713
1868
|
Role SourceRole `json:"role"`
|
|
1714
|
-
// The security tool that produced the assessment data in this source.
|
|
1869
|
+
// The security tool that produced the assessment data in this source.
|
|
1715
1870
|
Tool *Tool `json:"tool,omitempty"`
|
|
1716
|
-
// URI pointing to the source document.
|
|
1871
|
+
// URI pointing to the source document.
|
|
1717
1872
|
URI *string `json:"uri,omitempty"`
|
|
1718
1873
|
}
|
|
1719
1874
|
|
|
1720
1875
|
// Reference to the baseline used in this source assessment.
|
|
1721
1876
|
type BaselineRef struct {
|
|
1722
|
-
// Name of the baseline used in this source.
|
|
1877
|
+
// Name of the baseline used in this source.
|
|
1723
1878
|
Name string `json:"name"`
|
|
1724
|
-
// Version of the baseline used in this source.
|
|
1879
|
+
// Version of the baseline used in this source.
|
|
1725
1880
|
Version *string `json:"version,omitempty"`
|
|
1726
1881
|
}
|
|
1727
1882
|
|
|
1728
1883
|
// Summary statistics for the overall comparison.
|
|
1729
1884
|
type ComparisonSummary struct {
|
|
1730
|
-
// Number of requirements present only in the old source.
|
|
1731
|
-
Absent
|
|
1732
|
-
// Average confidence score across all requirement matches (0-1).
|
|
1733
|
-
AverageMatchConfidence
|
|
1734
|
-
// State counts broken down by severity level.
|
|
1735
|
-
BySeverity
|
|
1736
|
-
// Change in compliance percentage (new - old).
|
|
1737
|
-
ComplianceDelta
|
|
1738
|
-
// Number of requirements that changed from failing to passing.
|
|
1739
|
-
Fixed
|
|
1740
|
-
// Number of requirements successfully matched between sources.
|
|
1741
|
-
MatchedCount
|
|
1742
|
-
// Number of requirements that were reorganized without content change.
|
|
1743
|
-
Moved
|
|
1744
|
-
// Number of requirements present only in the new source.
|
|
1745
|
-
New
|
|
1746
|
-
// Compliance percentage of the new source (0-100).
|
|
1747
|
-
NewCompliancePercent
|
|
1748
|
-
// Compliance percentage of the old source (0-100).
|
|
1749
|
-
OldCompliancePercent
|
|
1750
|
-
// Summary statistics for each individual source in a multi-source comparison.
|
|
1751
|
-
PerSource
|
|
1752
|
-
// Number of requirements that changed from passing to failing.
|
|
1753
|
-
Regressed
|
|
1754
|
-
// Total number of
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1885
|
+
// Number of requirements present only in the old source.
|
|
1886
|
+
Absent *int64 `json:"absent,omitempty"`
|
|
1887
|
+
// Average confidence score across all requirement matches (0-1).
|
|
1888
|
+
AverageMatchConfidence *float64 `json:"averageMatchConfidence,omitempty"`
|
|
1889
|
+
// State counts broken down by severity level.
|
|
1890
|
+
BySeverity *SeverityBreakdown `json:"bySeverity,omitempty"`
|
|
1891
|
+
// Change in compliance percentage (new - old).
|
|
1892
|
+
ComplianceDelta *float64 `json:"complianceDelta,omitempty"`
|
|
1893
|
+
// Number of requirements that changed from failing to passing.
|
|
1894
|
+
Fixed *int64 `json:"fixed,omitempty"`
|
|
1895
|
+
// Number of requirements successfully matched between sources.
|
|
1896
|
+
MatchedCount int64 `json:"matchedCount"`
|
|
1897
|
+
// Number of requirements that were reorganized without content change.
|
|
1898
|
+
Moved *int64 `json:"moved,omitempty"`
|
|
1899
|
+
// Number of requirements present only in the new source.
|
|
1900
|
+
New *int64 `json:"new,omitempty"`
|
|
1901
|
+
// Compliance percentage of the new source (0-100).
|
|
1902
|
+
NewCompliancePercent *float64 `json:"newCompliancePercent,omitempty"`
|
|
1903
|
+
// Compliance percentage of the old source (0-100).
|
|
1904
|
+
OldCompliancePercent *float64 `json:"oldCompliancePercent,omitempty"`
|
|
1905
|
+
// Summary statistics for each individual source in a multi-source comparison.
|
|
1906
|
+
PerSource []PerSourceSummary `json:"perSource,omitempty"`
|
|
1907
|
+
// Number of requirements that changed from passing to failing.
|
|
1908
|
+
Regressed *int64 `json:"regressed,omitempty"`
|
|
1909
|
+
// Total number of distinct requirement ids across all sources; an id carried by several
|
|
1910
|
+
// entries counts once.
|
|
1911
|
+
Total int64 `json:"total"`
|
|
1912
|
+
// Number of requirements with the same effective status.
|
|
1913
|
+
Unchanged *int64 `json:"unchanged,omitempty"`
|
|
1914
|
+
// Number of requirements in the new source with no match in the old source.
|
|
1915
|
+
UnmatchedNewCount int64 `json:"unmatchedNewCount"`
|
|
1916
|
+
// Number of requirements in the old source with no match in the new source.
|
|
1917
|
+
UnmatchedOldCount int64 `json:"unmatchedOldCount"`
|
|
1918
|
+
// Number of requirements with a generic status change.
|
|
1919
|
+
Updated *int64 `json:"updated,omitempty"`
|
|
1764
1920
|
}
|
|
1765
1921
|
|
|
1766
1922
|
// Breakdown of state counts by severity level.
|
|
1767
1923
|
type SeverityBreakdown struct {
|
|
1768
|
-
// State counts for critical severity requirements.
|
|
1924
|
+
// State counts for critical severity requirements.
|
|
1769
1925
|
Critical *StateCounts `json:"critical,omitempty"`
|
|
1770
|
-
// State counts for high severity requirements.
|
|
1926
|
+
// State counts for high severity requirements.
|
|
1771
1927
|
High *StateCounts `json:"high,omitempty"`
|
|
1772
|
-
// State counts for low severity requirements.
|
|
1928
|
+
// State counts for low severity requirements.
|
|
1773
1929
|
Low *StateCounts `json:"low,omitempty"`
|
|
1774
|
-
// State counts for medium severity requirements.
|
|
1930
|
+
// State counts for medium severity requirements.
|
|
1775
1931
|
Medium *StateCounts `json:"medium,omitempty"`
|
|
1776
1932
|
}
|
|
1777
1933
|
|
|
1778
1934
|
// Counts of requirements in each state.
|
|
1779
1935
|
type StateCounts struct {
|
|
1780
|
-
// Number of requirements present only in the old source.
|
|
1936
|
+
// Number of requirements present only in the old source.
|
|
1781
1937
|
Absent *int64 `json:"absent,omitempty"`
|
|
1782
|
-
// Number of requirements that changed from failing to passing.
|
|
1938
|
+
// Number of requirements that changed from failing to passing.
|
|
1783
1939
|
Fixed *int64 `json:"fixed,omitempty"`
|
|
1784
|
-
// Number of requirements that were reorganized without content change.
|
|
1940
|
+
// Number of requirements that were reorganized without content change.
|
|
1785
1941
|
Moved *int64 `json:"moved,omitempty"`
|
|
1786
|
-
// Number of requirements present only in the new source.
|
|
1942
|
+
// Number of requirements present only in the new source.
|
|
1787
1943
|
New *int64 `json:"new,omitempty"`
|
|
1788
|
-
// Number of requirements that changed from passing to failing.
|
|
1944
|
+
// Number of requirements that changed from passing to failing.
|
|
1789
1945
|
Regressed *int64 `json:"regressed,omitempty"`
|
|
1790
|
-
// Number of requirements with the same effective status.
|
|
1946
|
+
// Number of requirements with the same effective status.
|
|
1791
1947
|
Unchanged *int64 `json:"unchanged,omitempty"`
|
|
1792
|
-
// Number of requirements with a generic status change.
|
|
1948
|
+
// Number of requirements with a generic status change.
|
|
1793
1949
|
Updated *int64 `json:"updated,omitempty"`
|
|
1794
1950
|
}
|
|
1795
1951
|
|
|
1796
1952
|
// Summary statistics for a single source in a multi-source comparison.
|
|
1797
1953
|
type PerSourceSummary struct {
|
|
1798
|
-
// Number of requirements present only in the old source.
|
|
1954
|
+
// Number of requirements present only in the old source.
|
|
1799
1955
|
Absent *int64 `json:"absent,omitempty"`
|
|
1800
|
-
// Number of requirements that changed from failing to passing.
|
|
1956
|
+
// Number of requirements that changed from failing to passing.
|
|
1801
1957
|
Fixed *int64 `json:"fixed,omitempty"`
|
|
1802
|
-
// Human-readable label for this source.
|
|
1958
|
+
// Human-readable label for this source.
|
|
1803
1959
|
Label string `json:"label"`
|
|
1804
|
-
// Number of requirements that were reorganized without content change.
|
|
1960
|
+
// Number of requirements that were reorganized without content change.
|
|
1805
1961
|
Moved *int64 `json:"moved,omitempty"`
|
|
1806
|
-
// Number of requirements present only in the new source.
|
|
1962
|
+
// Number of requirements present only in the new source.
|
|
1807
1963
|
New *int64 `json:"new,omitempty"`
|
|
1808
|
-
// Number of requirements that changed from passing to failing.
|
|
1964
|
+
// Number of requirements that changed from passing to failing.
|
|
1809
1965
|
Regressed *int64 `json:"regressed,omitempty"`
|
|
1810
|
-
// Zero-based index into the sources array identifying which source this summary is for.
|
|
1966
|
+
// Zero-based index into the sources array identifying which source this summary is for.
|
|
1811
1967
|
SourceIndex int64 `json:"sourceIndex"`
|
|
1812
|
-
// Number of requirements with the same effective status.
|
|
1968
|
+
// Number of requirements with the same effective status.
|
|
1813
1969
|
Unchanged *int64 `json:"unchanged,omitempty"`
|
|
1814
|
-
// Number of requirements with a generic status change.
|
|
1970
|
+
// Number of requirements with a generic status change.
|
|
1815
1971
|
Updated *int64 `json:"updated,omitempty"`
|
|
1816
1972
|
}
|
|
1817
1973
|
|
|
1818
1974
|
// Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP
|
|
1819
1975
|
// system-characteristics and FedRAMP system inventory.
|
|
1820
1976
|
type HDFSystem struct {
|
|
1821
|
-
// Date the current authorization status was granted. ISO 8601 format.
|
|
1977
|
+
// Date the current authorization status was granted. ISO 8601 format.
|
|
1822
1978
|
AuthorizationDate *time.Time `json:"authorizationDate,omitempty"`
|
|
1823
|
-
// Current Authorization to Operate (ATO) status.
|
|
1979
|
+
// Current Authorization to Operate (ATO) status.
|
|
1824
1980
|
AuthorizationStatus *AuthorizationStatus `json:"authorizationStatus,omitempty"`
|
|
1825
|
-
// System-scoped Bills of Materials whose subject is the authorization boundary rather than
|
|
1826
|
-
// a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
|
|
1827
|
-
// Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
|
|
1828
|
-
// primitives/bom.schema.json.
|
|
1981
|
+
// System-scoped Bills of Materials whose subject is the authorization boundary rather than
|
|
1982
|
+
// a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
|
|
1983
|
+
// Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
|
|
1984
|
+
// primitives/bom.schema.json.
|
|
1829
1985
|
Boms []BillOfMaterials `json:"boms,omitempty"`
|
|
1830
|
-
// Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
1831
|
-
// VPC IDs, physical locations.
|
|
1986
|
+
// Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
1987
|
+
// VPC IDs, physical locations.
|
|
1832
1988
|
BoundaryDescription *string `json:"boundaryDescription,omitempty"`
|
|
1833
|
-
// FIPS 199 security categorization (impact level).
|
|
1989
|
+
// FIPS 199 security categorization (impact level).
|
|
1834
1990
|
CategorizationLevel *CategorizationLevel `json:"categorizationLevel,omitempty"`
|
|
1835
|
-
// System components within the authorization boundary. Uses the full polymorphic Component
|
|
1836
|
-
// type with stable identity (componentId), external references, and generalized BOM
|
|
1837
|
-
// attachment (boms[]).
|
|
1991
|
+
// System components within the authorization boundary. Uses the full polymorphic Component
|
|
1992
|
+
// type with stable identity (componentId), external references, and generalized BOM
|
|
1993
|
+
// attachment (boms[]).
|
|
1838
1994
|
Components []Component `json:"components"`
|
|
1839
|
-
// Declares which controls are common, hybrid, or system-specific, and which component
|
|
1840
|
-
// provides them. Maps to NIST SP 800-53 control designations and OSCAL
|
|
1841
|
-
// leveraged-authorizations.
|
|
1995
|
+
// Declares which controls are common, hybrid, or system-specific, and which component
|
|
1996
|
+
// provides them. Maps to NIST SP 800-53 control designations and OSCAL
|
|
1997
|
+
// leveraged-authorizations.
|
|
1842
1998
|
ControlDesignations []ControlDesignation `json:"controlDesignations,omitempty"`
|
|
1843
|
-
// Inter-component data flows describing how components communicate. Supports local,
|
|
1844
|
-
// cross-system, and external flows. Replaces the interconnections[] field.
|
|
1999
|
+
// Inter-component data flows describing how components communicate. Supports local,
|
|
2000
|
+
// cross-system, and external flows. Replaces the interconnections[] field.
|
|
1845
2001
|
DataFlows []DataFlow `json:"dataFlows,omitempty"`
|
|
1846
|
-
// Description of the system's purpose and mission.
|
|
2002
|
+
// Description of the system's purpose and mission.
|
|
1847
2003
|
Description *string `json:"description,omitempty"`
|
|
1848
|
-
//
|
|
1849
|
-
//
|
|
1850
|
-
|
|
2004
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) this system
|
|
2005
|
+
// document was converted from.
|
|
2006
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
2007
|
+
// Optional references to external artifacts describing this system's threat environment or
|
|
2008
|
+
// context (CTI/STIX, BOMs, advisories, or any URI-addressable artifact). Inert context; see
|
|
2009
|
+
// External_Reference.
|
|
1851
2010
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
1852
|
-
// Information about the tool that generated this system document.
|
|
2011
|
+
// Information about the tool that generated this system document.
|
|
1853
2012
|
Generator *Generator `json:"generator,omitempty"`
|
|
1854
|
-
// System identifier from an authoritative source. Example: eMASS system ID, FedRAMP package
|
|
1855
|
-
// ID.
|
|
2013
|
+
// System identifier from an authoritative source. Example: eMASS system ID, FedRAMP package
|
|
2014
|
+
// ID.
|
|
1856
2015
|
Identifier *string `json:"identifier,omitempty"`
|
|
1857
|
-
// URI identifying the scheme of the system identifier. Example: 'https://emass.mil',
|
|
1858
|
-
// 'https://fedramp.gov'.
|
|
2016
|
+
// URI identifying the scheme of the system identifier. Example: 'https://emass.mil',
|
|
2017
|
+
// 'https://fedramp.gov'.
|
|
1859
2018
|
IdentifierScheme *string `json:"identifierScheme,omitempty"`
|
|
1860
|
-
// Cryptographic integrity information for verifying this system document has not been
|
|
1861
|
-
// tampered with.
|
|
2019
|
+
// Cryptographic integrity information for verifying this system document has not been
|
|
2020
|
+
// tampered with.
|
|
1862
2021
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1863
|
-
// Optional key-value labels for grouping and querying systems.
|
|
2022
|
+
// Optional key-value labels for grouping and querying systems.
|
|
1864
2023
|
Labels map[string]string `json:"labels,omitempty"`
|
|
1865
|
-
// Human-readable system name. Example: 'Enterprise Portal Production'.
|
|
2024
|
+
// Human-readable system name. Example: 'Enterprise Portal Production'.
|
|
1866
2025
|
Name string `json:"name"`
|
|
1867
|
-
// Team or individual responsible for this system's authorization and compliance. Maps to
|
|
1868
|
-
// OSCAL responsible-party with role 'system-owner'.
|
|
2026
|
+
// Team or individual responsible for this system's authorization and compliance. Maps to
|
|
2027
|
+
// OSCAL responsible-party with role 'system-owner'.
|
|
1869
2028
|
Owner *Identity `json:"owner,omitempty"`
|
|
1870
|
-
// Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of
|
|
1871
|
-
// file location. Optional in casual use, expected in production documents.
|
|
2029
|
+
// Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of
|
|
2030
|
+
// file location. Optional in casual use, expected in production documents.
|
|
1872
2031
|
SystemID *string `json:"systemId,omitempty"`
|
|
1873
|
-
// Version of this system document.
|
|
2032
|
+
// Version of this system document.
|
|
1874
2033
|
Version *string `json:"version,omitempty"`
|
|
1875
2034
|
}
|
|
1876
2035
|
|
|
@@ -1879,24 +2038,24 @@ type HDFSystem struct {
|
|
|
1879
2038
|
// Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP by-component
|
|
1880
2039
|
// provided/inherited semantics.
|
|
1881
2040
|
type ControlDesignation struct {
|
|
1882
|
-
// The control identifier (e.g., 'SC-7', 'AC-2 (1)'). Must match a NIST tag in a baseline
|
|
1883
|
-
// requirement's tags.
|
|
2041
|
+
// The control identifier (e.g., 'SC-7', 'AC-2 (1)'). Must match a NIST tag in a baseline
|
|
2042
|
+
// requirement's tags.
|
|
1884
2043
|
ControlID string `json:"controlId"`
|
|
1885
|
-
// Justification for this designation — who provides the control, why it's inherited, and
|
|
1886
|
-
// any relevant authorization references.
|
|
2044
|
+
// Justification for this designation — who provides the control, why it's inherited, and
|
|
2045
|
+
// any relevant authorization references.
|
|
1887
2046
|
Description string `json:"description"`
|
|
1888
|
-
// NIST SP 800-53 control designation. 'common': fully provided by another component or
|
|
1889
|
-
// system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
|
|
1890
|
-
// shared responsibility between provider and inheritor.
|
|
2047
|
+
// NIST SP 800-53 control designation. 'common': fully provided by another component or
|
|
2048
|
+
// system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
|
|
2049
|
+
// shared responsibility between provider and inheritor.
|
|
1891
2050
|
Designation Designation `json:"designation"`
|
|
1892
|
-
// componentIds that inherit this control. If omitted, all components in the system inherit
|
|
1893
|
-
// it.
|
|
2051
|
+
// componentIds that inherit this control. If omitted, all components in the system inherit
|
|
2052
|
+
// it.
|
|
1894
2053
|
InheritedBy []string `json:"inheritedBy,omitempty"`
|
|
1895
|
-
// componentId of a local component that provides this control. Omit when the provider is an
|
|
1896
|
-
// external system.
|
|
2054
|
+
// componentId of a local component that provides this control. Omit when the provider is an
|
|
2055
|
+
// external system.
|
|
1897
2056
|
ProvidedBy *string `json:"providedBy,omitempty"`
|
|
1898
|
-
// Reference to another hdf-system document whose component provides this control. Use when
|
|
1899
|
-
// the provider is in a different system. Omit when the provider is local.
|
|
2057
|
+
// Reference to another hdf-system document whose component provides this control. Use when
|
|
2058
|
+
// the provider is in a different system. Omit when the provider is local.
|
|
1900
2059
|
SystemRef *string `json:"systemRef,omitempty"`
|
|
1901
2060
|
}
|
|
1902
2061
|
|
|
@@ -1904,143 +2063,152 @@ type ControlDesignation struct {
|
|
|
1904
2063
|
// endpoint can be local, cross-system, or external. Use 'direction' to indicate whether data flows
|
|
1905
2064
|
// one-way or both ways.
|
|
1906
2065
|
type DataFlow struct {
|
|
1907
|
-
// Authentication mechanism used for this connection. Examples: 'mTLS', 'OAuth2', 'API key',
|
|
1908
|
-
// 'SAML', 'Kerberos'.
|
|
2066
|
+
// Authentication mechanism used for this connection. Examples: 'mTLS', 'OAuth2', 'API key',
|
|
2067
|
+
// 'SAML', 'Kerberos'.
|
|
1909
2068
|
Authentication *string `json:"authentication,omitempty"`
|
|
1910
|
-
// Human-readable description of this data flow's purpose and the data exchanged.
|
|
2069
|
+
// Human-readable description of this data flow's purpose and the data exchanged.
|
|
1911
2070
|
Description *string `json:"description,omitempty"`
|
|
1912
|
-
// Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
|
|
1913
|
-
// means data flows in both directions (e.g., request/response).
|
|
2071
|
+
// Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
|
|
2072
|
+
// means data flows in both directions (e.g., request/response).
|
|
1914
2073
|
Direction *Direction `json:"direction,omitempty"`
|
|
1915
|
-
// UUID of the local component that is one end of this data flow. Always references a
|
|
1916
|
-
// component in the current system document.
|
|
2074
|
+
// UUID of the local component that is one end of this data flow. Always references a
|
|
2075
|
+
// component in the current system document.
|
|
1917
2076
|
From string `json:"from"`
|
|
1918
|
-
// Network port number.
|
|
2077
|
+
// Network port number.
|
|
1919
2078
|
Port *int64 `json:"port,omitempty"`
|
|
1920
|
-
// Communication protocol. Examples: 'http', 'https', 'grpc', 'ssh', 'jdbc', 'k8s-api',
|
|
1921
|
-
// 'socket', 'sftp'.
|
|
2079
|
+
// Communication protocol. Examples: 'http', 'https', 'grpc', 'ssh', 'jdbc', 'k8s-api',
|
|
2080
|
+
// 'socket', 'sftp'.
|
|
1922
2081
|
Protocol *string `json:"protocol,omitempty"`
|
|
1923
|
-
// The other end of this data flow. Can be a local component (UUID), a cross-system
|
|
1924
|
-
// component reference, or an external endpoint.
|
|
2082
|
+
// The other end of this data flow. Can be a local component (UUID), a cross-system
|
|
2083
|
+
// component reference, or an external endpoint.
|
|
1925
2084
|
To interface{} `json:"to"`
|
|
1926
2085
|
}
|
|
1927
2086
|
|
|
1928
2087
|
// Defines an assessment plan — what baselines to run against which targets, with resolved inputs
|
|
1929
2088
|
// and scheduling. Maps to OSCAL Assessment Plan.
|
|
1930
2089
|
type HDFPlan struct {
|
|
1931
|
-
// The assessments to perform. Each assessment pairs a baseline with targets and resolved
|
|
1932
|
-
// inputs.
|
|
2090
|
+
// The assessments to perform. Each assessment pairs a baseline with targets and resolved
|
|
2091
|
+
// inputs.
|
|
1933
2092
|
Assessments []Assessment `json:"assessments"`
|
|
1934
|
-
// Description of the plan's purpose and scope.
|
|
2093
|
+
// Description of the plan's purpose and scope.
|
|
1935
2094
|
Description *string `json:"description,omitempty"`
|
|
1936
|
-
//
|
|
1937
|
-
//
|
|
1938
|
-
|
|
2095
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) this plan
|
|
2096
|
+
// was converted from.
|
|
2097
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
2098
|
+
// Optional references to external artifacts relevant to this assessment plan (CTI/STIX,
|
|
2099
|
+
// advisories, methodology docs, or any URI-addressable artifact). Inert context; see
|
|
2100
|
+
// External_Reference.
|
|
1939
2101
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
1940
|
-
// Information about the tool that generated this plan.
|
|
2102
|
+
// Information about the tool that generated this plan.
|
|
1941
2103
|
Generator *Generator `json:"generator,omitempty"`
|
|
1942
|
-
// Cryptographic integrity information for verifying this plan document has not been
|
|
1943
|
-
// tampered with.
|
|
2104
|
+
// Cryptographic integrity information for verifying this plan document has not been
|
|
2105
|
+
// tampered with.
|
|
1944
2106
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
1945
|
-
// Optional key-value labels for grouping and querying plans.
|
|
2107
|
+
// Optional key-value labels for grouping and querying plans.
|
|
1946
2108
|
Labels map[string]string `json:"labels,omitempty"`
|
|
1947
|
-
// Human-readable plan name. Example: 'Portal Monthly Assessment'.
|
|
2109
|
+
// Human-readable plan name. Example: 'Portal Monthly Assessment'.
|
|
1948
2110
|
Name string `json:"name"`
|
|
1949
|
-
// Unique identifier for this plan. Optional in casual use, expected in production
|
|
1950
|
-
// documents. Auto-generated if omitted during creation.
|
|
2111
|
+
// Unique identifier for this plan. Optional in casual use, expected in production
|
|
2112
|
+
// documents. Auto-generated if omitted during creation.
|
|
1951
2113
|
PlanID *string `json:"planId,omitempty"`
|
|
1952
|
-
// Optional scheduling configuration for recurring assessments.
|
|
2114
|
+
// Optional scheduling configuration for recurring assessments.
|
|
1953
2115
|
Schedule *Schedule `json:"schedule,omitempty"`
|
|
1954
|
-
// URI to the hdf-system document this plan targets. Example: 'portal-prod.hdf-system.json'.
|
|
2116
|
+
// URI to the hdf-system document this plan targets. Example: 'portal-prod.hdf-system.json'.
|
|
1955
2117
|
SystemRef *string `json:"systemRef,omitempty"`
|
|
1956
|
-
// The type of assessment plan.
|
|
2118
|
+
// The type of assessment plan.
|
|
1957
2119
|
Type *PlanType `json:"type,omitempty"`
|
|
1958
|
-
// Version of this plan document.
|
|
2120
|
+
// Version of this plan document.
|
|
1959
2121
|
Version *string `json:"version,omitempty"`
|
|
1960
2122
|
}
|
|
1961
2123
|
|
|
1962
2124
|
// A single assessment within a plan — defines which baseline to run against which targets with what
|
|
1963
2125
|
// configuration.
|
|
1964
2126
|
type Assessment struct {
|
|
1965
|
-
// Reference to the baseline to evaluate. May be a baseline name (e.g. 'RHEL9-STIG'), a
|
|
1966
|
-
// relative path to an HDF Baseline document (e.g. 'rhel9-stig.hdf-baseline.json'), or an
|
|
1967
|
-
// absolute URI.
|
|
2127
|
+
// Reference to the baseline to evaluate. May be a baseline name (e.g. 'RHEL9-STIG'), a
|
|
2128
|
+
// relative path to an HDF Baseline document (e.g. 'rhel9-stig.hdf-baseline.json'), or an
|
|
2129
|
+
// absolute URI.
|
|
1968
2130
|
BaselineRef string `json:"baselineRef"`
|
|
1969
|
-
// componentId of the system component this assessment targets. Use for direct component
|
|
1970
|
-
// binding. Alternative to targetSelector.
|
|
2131
|
+
// componentId of the system component this assessment targets. Use for direct component
|
|
2132
|
+
// binding. Alternative to targetSelector.
|
|
1971
2133
|
ComponentRef *string `json:"componentRef,omitempty"`
|
|
1972
|
-
// Description of this assessment's purpose.
|
|
2134
|
+
// Description of this assessment's purpose.
|
|
1973
2135
|
Description *string `json:"description,omitempty"`
|
|
1974
|
-
// Resolved input values for this assessment. Keys are input names, values are the final
|
|
1975
|
-
// resolved values (after baseline defaults + system overrides).
|
|
2136
|
+
// Resolved input values for this assessment. Keys are input names, values are the final
|
|
2137
|
+
// resolved values (after baseline defaults + system overrides).
|
|
1976
2138
|
Inputs map[string]interface{} `json:"inputs,omitempty"`
|
|
1977
|
-
// Runner/scanner configuration for this assessment.
|
|
2139
|
+
// Runner/scanner configuration for this assessment.
|
|
1978
2140
|
Runner *RunnerConfig `json:"runner,omitempty"`
|
|
1979
|
-
// Label selector to match targets for this assessment. Overrides the system component's
|
|
1980
|
-
// targetSelector if provided.
|
|
2141
|
+
// Label selector to match targets for this assessment. Overrides the system component's
|
|
2142
|
+
// targetSelector if provided.
|
|
1981
2143
|
TargetSelector map[string]string `json:"targetSelector,omitempty"`
|
|
1982
2144
|
}
|
|
1983
2145
|
|
|
1984
2146
|
// Configuration for the assessment runner/scanner.
|
|
1985
2147
|
type RunnerConfig struct {
|
|
1986
|
-
// Name of the assessment runner. Example: 'cinc-auditor', 'inspec', 'openscap'.
|
|
2148
|
+
// Name of the assessment runner. Example: 'cinc-auditor', 'inspec', 'openscap'.
|
|
1987
2149
|
Name *string `json:"name,omitempty"`
|
|
1988
|
-
// Version of the runner.
|
|
2150
|
+
// Version of the runner.
|
|
1989
2151
|
Version *string `json:"version,omitempty"`
|
|
1990
2152
|
}
|
|
1991
2153
|
|
|
1992
2154
|
// Scheduling configuration for recurring assessments.
|
|
1993
2155
|
type Schedule struct {
|
|
1994
|
-
// Cron expression for recurring assessments. Example: '0 2 1 * *' (2 AM on the 1st of each
|
|
1995
|
-
// month).
|
|
2156
|
+
// Cron expression for recurring assessments. Example: '0 2 1 * *' (2 AM on the 1st of each
|
|
2157
|
+
// month).
|
|
1996
2158
|
Cron *string `json:"cron,omitempty"`
|
|
1997
|
-
// Date after which assessments should no longer run. ISO 8601 format.
|
|
2159
|
+
// Date after which assessments should no longer run. ISO 8601 format.
|
|
1998
2160
|
EndDate *time.Time `json:"endDate,omitempty"`
|
|
1999
|
-
// Email addresses or notification endpoints to alert when assessments complete.
|
|
2161
|
+
// Email addresses or notification endpoints to alert when assessments complete.
|
|
2000
2162
|
NotifyOnCompletion []string `json:"notifyOnCompletion,omitempty"`
|
|
2001
|
-
// Email addresses or notification endpoints to alert when regressions are detected.
|
|
2163
|
+
// Email addresses or notification endpoints to alert when regressions are detected.
|
|
2002
2164
|
NotifyOnRegression []string `json:"notifyOnRegression,omitempty"`
|
|
2003
|
-
// Earliest date to begin assessments. ISO 8601 format.
|
|
2165
|
+
// Earliest date to begin assessments. ISO 8601 format.
|
|
2004
2166
|
StartDate *time.Time `json:"startDate,omitempty"`
|
|
2005
2167
|
}
|
|
2006
2168
|
|
|
2007
2169
|
// Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments
|
|
2008
2170
|
// are standalone documents that can be applied to results via merge operations.
|
|
2009
2171
|
type HDFAmendments struct {
|
|
2010
|
-
// Unique identifier for this amendments document. Useful for cross-referencing when
|
|
2011
|
-
// multiple amendment documents target the same results.
|
|
2172
|
+
// Unique identifier for this amendments document. Useful for cross-referencing when
|
|
2173
|
+
// multiple amendment documents target the same results.
|
|
2012
2174
|
AmendmentID *string `json:"amendmentId,omitempty"`
|
|
2013
|
-
// Default identity of who created this amendments document. Individual overrides may
|
|
2014
|
-
// specify their own appliedBy.
|
|
2175
|
+
// Default identity of who created this amendments document. Individual overrides may
|
|
2176
|
+
// specify their own appliedBy.
|
|
2015
2177
|
AppliedBy *Identity `json:"appliedBy,omitempty"`
|
|
2016
|
-
// Identity of the authorizing official who approved these amendments.
|
|
2178
|
+
// Identity of the authorizing official who approved these amendments.
|
|
2017
2179
|
ApprovedBy *Identity `json:"approvedBy,omitempty"`
|
|
2018
|
-
// Description of the amendments' purpose and scope.
|
|
2180
|
+
// Description of the amendments' purpose and scope.
|
|
2019
2181
|
Description *string `json:"description,omitempty"`
|
|
2020
|
-
//
|
|
2182
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) these
|
|
2183
|
+
// amendments were converted from — the VEX family and oscal-poam-to-hdf all emit this
|
|
2184
|
+
// document type.
|
|
2185
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
2186
|
+
// Information about the tool that generated this document.
|
|
2021
2187
|
Generator *Generator `json:"generator,omitempty"`
|
|
2022
|
-
// Cryptographic integrity information for verifying this amendments document has not been
|
|
2023
|
-
// tampered with.
|
|
2188
|
+
// Cryptographic integrity information for verifying this amendments document has not been
|
|
2189
|
+
// tampered with.
|
|
2024
2190
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
2025
|
-
// Optional key-value labels for grouping and querying amendments.
|
|
2191
|
+
// Optional key-value labels for grouping and querying amendments.
|
|
2026
2192
|
Labels map[string]string `json:"labels,omitempty"`
|
|
2027
|
-
// Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
|
|
2193
|
+
// Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
|
|
2028
2194
|
Name string `json:"name"`
|
|
2029
|
-
// The set of amendments (waivers, attestations, POA&Ms, and other overrides).
|
|
2195
|
+
// The set of amendments (waivers, attestations, POA&Ms, and other overrides).
|
|
2030
2196
|
Overrides []StandaloneOverride `json:"overrides"`
|
|
2031
|
-
// Document-level digital signature covering all amendments.
|
|
2197
|
+
// Document-level digital signature covering all amendments.
|
|
2032
2198
|
Signature *Signature `json:"signature,omitempty"`
|
|
2033
|
-
// URI to the hdf-system document these amendments apply to.
|
|
2199
|
+
// URI to the hdf-system document these amendments apply to.
|
|
2034
2200
|
SystemRef *string `json:"systemRef,omitempty"`
|
|
2035
|
-
// Version of this amendments document.
|
|
2201
|
+
// Version of this amendments document.
|
|
2036
2202
|
Version *string `json:"version,omitempty"`
|
|
2037
2203
|
}
|
|
2038
2204
|
|
|
2039
|
-
// A standalone override to a requirement's compliance status or risk impact. Validation
|
|
2040
|
-
//
|
|
2041
|
-
//
|
|
2042
|
-
//
|
|
2043
|
-
//
|
|
2205
|
+
// A standalone override to a requirement's compliance status or risk impact. Validation is gated on
|
|
2206
|
+
// 'type': when type is 'operationalRequirement', neither 'status' nor 'impact' may be set — the
|
|
2207
|
+
// override records accepted risk without changing the finding (documentation-only). When type is
|
|
2208
|
+
// 'riskAdjustment', 'status' may not be set — it re-rates the risk through 'impact' and never
|
|
2209
|
+
// changes the finding's pass/fail; an override that must change status is a waiver or
|
|
2210
|
+
// falsePositive. For all other types, at least one of 'status' or 'impact' must be set. This rule
|
|
2211
|
+
// aligns with: - OSCAL Assessment Results — finding.target.status and
|
|
2044
2212
|
// finding.associated-risk[].facet[] are separate axes
|
|
2045
2213
|
// (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/) - FedRAMP
|
|
2046
2214
|
// deviation request types — Risk Adjustment changes impact only, Operational Requirement documents
|
|
@@ -2049,161 +2217,177 @@ type HDFAmendments struct {
|
|
|
2049
2217
|
// RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment status
|
|
2050
2218
|
// (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
|
|
2051
2219
|
type StandaloneOverride struct {
|
|
2052
|
-
// Software packages this amendment is scoped to, distinct from componentRef (which scopes
|
|
2053
|
-
// to an HDF-internal Component by UUID).
|
|
2054
|
-
//
|
|
2055
|
-
// Use when the source amendment format references packages by purl/cpe/name+version — e.g.,
|
|
2056
|
-
// VEX `affects[]` / `products[]`, OSCAL POA&M `subjects[]`, FedRAMP component-aware
|
|
2057
|
-
// amendments.
|
|
2058
|
-
//
|
|
2059
|
-
// Symmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same
|
|
2060
|
-
// package vocabulary.
|
|
2061
|
-
//
|
|
2062
|
-
// When omitted, the amendment applies system-wide (or only to componentRef when that is
|
|
2063
|
-
// set).
|
|
2220
|
+
// Software packages this amendment is scoped to, distinct from componentRef (which scopes
|
|
2221
|
+
// to an HDF-internal Component by UUID).
|
|
2222
|
+
//
|
|
2223
|
+
// Use when the source amendment format references packages by purl/cpe/name+version — e.g.,
|
|
2224
|
+
// VEX `affects[]` / `products[]`, OSCAL POA&M `subjects[]`, FedRAMP component-aware
|
|
2225
|
+
// amendments.
|
|
2226
|
+
//
|
|
2227
|
+
// Symmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same
|
|
2228
|
+
// package vocabulary.
|
|
2229
|
+
//
|
|
2230
|
+
// When omitted, the amendment applies system-wide (or only to componentRef when that is
|
|
2231
|
+
// set).
|
|
2064
2232
|
AffectedPackages []AffectedPackage `json:"affectedPackages,omitempty"`
|
|
2065
|
-
// When this amendment was applied. ISO 8601 format.
|
|
2233
|
+
// When this amendment was applied. ISO 8601 format.
|
|
2066
2234
|
AppliedAt time.Time `json:"appliedAt"`
|
|
2067
|
-
// Identity of who applied this amendment.
|
|
2235
|
+
// Identity of who applied this amendment.
|
|
2068
2236
|
AppliedBy Identity `json:"appliedBy"`
|
|
2069
|
-
// Name of the baseline containing the requirement. Required when the system has multiple
|
|
2070
|
-
// baselines with potentially overlapping requirement IDs.
|
|
2237
|
+
// Name of the baseline containing the requirement. Required when the system has multiple
|
|
2238
|
+
// baselines with potentially overlapping requirement IDs.
|
|
2071
2239
|
BaselineRef *string `json:"baselineRef,omitempty"`
|
|
2072
|
-
// componentId of the component this amendment is scoped to. When set, the amendment only
|
|
2073
|
-
// applies to the specified component. When omitted, the amendment applies system-wide.
|
|
2240
|
+
// componentId of the component this amendment is scoped to. When set, the amendment only
|
|
2241
|
+
// applies to the specified component. When omitted, the amendment applies system-wide.
|
|
2074
2242
|
ComponentRef *string `json:"componentRef,omitempty"`
|
|
2075
|
-
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
2076
|
-
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
2077
|
-
// a riskAdjustment. For other override types this is optional context.
|
|
2243
|
+
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
2244
|
+
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
2245
|
+
// a riskAdjustment. For other override types this is optional context.
|
|
2078
2246
|
Cvss *Cvss `json:"cvss,omitempty"`
|
|
2079
|
-
// Supporting evidence (screenshots, logs, URLs, documents).
|
|
2247
|
+
// Supporting evidence (screenshots, logs, URLs, documents).
|
|
2080
2248
|
Evidence []Evidence `json:"evidence,omitempty"`
|
|
2081
|
-
// When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
2082
|
-
// format.
|
|
2249
|
+
// When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
2250
|
+
// format.
|
|
2083
2251
|
ExpiresAt time.Time `json:"expiresAt"`
|
|
2084
|
-
// Optional references to the external artifacts behind this override (e.g. the STIX
|
|
2085
|
-
// bundle/object, advisory, or CTI feed that motivated it). Inert context distinct from
|
|
2086
|
-
// `evidence`; see External_Reference.
|
|
2252
|
+
// Optional references to the external artifacts behind this override (e.g. the STIX
|
|
2253
|
+
// bundle/object, advisory, or CTI feed that motivated it). Inert context distinct from
|
|
2254
|
+
// `evidence`; see External_Reference.
|
|
2087
2255
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
2088
|
-
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
2256
|
+
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
2089
2257
|
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
2090
|
-
// componentId of the local component that provides this control. Set when the provider is
|
|
2091
|
-
// in the same system. Omit for external or cross-system providers; the reason field
|
|
2092
|
-
// explains the source. Primarily used with type 'inherited'.
|
|
2258
|
+
// componentId of the local component that provides this control. Set when the provider is
|
|
2259
|
+
// in the same system. Omit for external or cross-system providers; the reason field
|
|
2260
|
+
// explains the source. Primarily used with type 'inherited'.
|
|
2093
2261
|
InheritedFrom *string `json:"inheritedFrom,omitempty"`
|
|
2094
|
-
// Structured controlled-vocabulary classification for why this override applies.
|
|
2095
|
-
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
2096
|
-
// and attestation overrides where the structured category enables filtering and lossless
|
|
2097
|
-
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
2098
|
-
// precedent vocabulary and rationale.
|
|
2262
|
+
// Structured controlled-vocabulary classification for why this override applies.
|
|
2263
|
+
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
2264
|
+
// and attestation overrides where the structured category enables filtering and lossless
|
|
2265
|
+
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
2266
|
+
// precedent vocabulary and rationale.
|
|
2099
2267
|
Justification *Justification `json:"justification,omitempty"`
|
|
2100
|
-
// Remediation milestones (primarily for POA&M type amendments).
|
|
2268
|
+
// Remediation milestones (primarily for POA&M type amendments).
|
|
2101
2269
|
Milestones []Milestone `json:"milestones,omitempty"`
|
|
2102
|
-
// SHA-256 checksum of the prior amendment in chronological order. Each amendment's checksum
|
|
2103
|
-
// is recorded by the NEXT one, so editing an amendment in place is detectable — provided a
|
|
2104
|
-
// later amendment is chained to it. It is NOT tamper-proof: the final amendment, the
|
|
2105
|
-
// document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
2106
|
-
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
2107
|
-
// non-repudiation. Omitted on the first amendment.
|
|
2270
|
+
// SHA-256 checksum of the prior amendment in chronological order. Each amendment's checksum
|
|
2271
|
+
// is recorded by the NEXT one, so editing an amendment in place is detectable — provided a
|
|
2272
|
+
// later amendment is chained to it. It is NOT tamper-proof: the final amendment, the
|
|
2273
|
+
// document envelope, deleted trailing amendments, and a chain that has been stripped or
|
|
2274
|
+
// recomputed wholesale are all outside what it can detect. Use signature for
|
|
2275
|
+
// non-repudiation. Omitted on the first amendment.
|
|
2108
2276
|
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
2109
|
-
// Justification for this amendment.
|
|
2277
|
+
// Justification for this amendment.
|
|
2110
2278
|
Reason string `json:"reason"`
|
|
2111
|
-
// The
|
|
2112
|
-
// baseline
|
|
2279
|
+
// The id of the requirement being amended. An id names the requirement, not one finding, so
|
|
2280
|
+
// the override applies to every requirement entry carrying that id in the baseline(s) it
|
|
2281
|
+
// targets.
|
|
2113
2282
|
RequirementID string `json:"requirementId"`
|
|
2114
|
-
// Digital signature for non-repudiation.
|
|
2283
|
+
// Digital signature for non-repudiation.
|
|
2115
2284
|
Signature *Signature `json:"signature,omitempty"`
|
|
2116
|
-
// The new status this
|
|
2285
|
+
// The new status this override sets for the requirement. Optional when only impact is being
|
|
2286
|
+
// overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a
|
|
2287
|
+
// riskAdjustment, which re-rates impact only.
|
|
2117
2288
|
Status *ResultStatus `json:"status,omitempty"`
|
|
2118
|
-
// The type of amendment.
|
|
2289
|
+
// The type of amendment.
|
|
2119
2290
|
Type OverrideType `json:"type"`
|
|
2120
2291
|
}
|
|
2121
2292
|
|
|
2122
2293
|
// Bundles references to all HDF documents for audit, authorization, and compliance review. Each
|
|
2123
2294
|
// content entry references a document by type, URI, and checksum for integrity verification.
|
|
2124
2295
|
type HDFEvidencePackage struct {
|
|
2125
|
-
// Summary of assessment completeness and compliance status.
|
|
2296
|
+
// Summary of assessment completeness and compliance status.
|
|
2126
2297
|
CompletenessCheck *CompletenessCheck `json:"completenessCheck,omitempty"`
|
|
2127
|
-
// References to HDF documents included in this evidence package.
|
|
2298
|
+
// References to HDF documents included in this evidence package.
|
|
2128
2299
|
Contents []ContentReference `json:"contents"`
|
|
2129
|
-
// Description of the evidence package's purpose and scope.
|
|
2300
|
+
// Description of the evidence package's purpose and scope.
|
|
2130
2301
|
Description *string `json:"description,omitempty"`
|
|
2131
|
-
//
|
|
2132
|
-
//
|
|
2133
|
-
|
|
2134
|
-
//
|
|
2302
|
+
// Producer data outside the HDF model, and the pre-converted source artifact(s) this
|
|
2303
|
+
// package was assembled from.
|
|
2304
|
+
Extensions *Extensions `json:"extensions,omitempty"`
|
|
2305
|
+
// References to external native-format evidence (log/telemetry corpora and other artifacts)
|
|
2306
|
+
// carried by URI + integrity hash + format discriminator, without recreating the data
|
|
2307
|
+
// inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
|
|
2308
|
+
// here rather than transcoding them.
|
|
2135
2309
|
ExternalEvidence []ExternalEvidenceReference `json:"externalEvidence,omitempty"`
|
|
2136
|
-
// Optional references to external artifacts relevant to this evidence package (CTI/STIX,
|
|
2137
|
-
// BOMs, advisories, or any URI-addressable artifact) beyond the document references it
|
|
2138
|
-
// already carries. Inert context; see External_Reference.
|
|
2310
|
+
// Optional references to external artifacts relevant to this evidence package (CTI/STIX,
|
|
2311
|
+
// BOMs, advisories, or any URI-addressable artifact) beyond the document references it
|
|
2312
|
+
// already carries. Inert context; see External_Reference.
|
|
2139
2313
|
ExternalReferences []ExternalReference `json:"externalReferences,omitempty"`
|
|
2140
|
-
// Information about the tool that generated this document.
|
|
2314
|
+
// Information about the tool that generated this document.
|
|
2141
2315
|
Generator *Generator `json:"generator,omitempty"`
|
|
2142
|
-
// Cryptographic integrity information for verifying this evidence package has not been
|
|
2143
|
-
// tampered with.
|
|
2316
|
+
// Cryptographic integrity information for verifying this evidence package has not been
|
|
2317
|
+
// tampered with.
|
|
2144
2318
|
Integrity *Integrity `json:"integrity,omitempty"`
|
|
2145
|
-
// Optional key-value labels for grouping and querying evidence packages.
|
|
2319
|
+
// Optional key-value labels for grouping and querying evidence packages.
|
|
2146
2320
|
Labels map[string]string `json:"labels,omitempty"`
|
|
2147
|
-
// Human-readable name for this evidence package. Example: 'Enterprise Portal ATO Evidence -
|
|
2148
|
-
// Q1 2026'.
|
|
2321
|
+
// Human-readable name for this evidence package. Example: 'Enterprise Portal ATO Evidence -
|
|
2322
|
+
// Q1 2026'.
|
|
2149
2323
|
Name string `json:"name"`
|
|
2150
|
-
// Unique identifier for this evidence package. Optional in casual use, expected in
|
|
2151
|
-
// production ATO submissions. Auto-generated if omitted during creation.
|
|
2324
|
+
// Unique identifier for this evidence package. Optional in casual use, expected in
|
|
2325
|
+
// production ATO submissions. Auto-generated if omitted during creation.
|
|
2152
2326
|
PackageID *string `json:"packageId,omitempty"`
|
|
2153
|
-
// URI to the hdf-plan document that drove this assessment. Used for completeness
|
|
2154
|
-
// verification — every baseline in the plan should have a corresponding results document in
|
|
2155
|
-
// this package.
|
|
2327
|
+
// URI to the hdf-plan document that drove this assessment. Used for completeness
|
|
2328
|
+
// verification — every baseline in the plan should have a corresponding results document in
|
|
2329
|
+
// this package.
|
|
2156
2330
|
PlanRef *string `json:"planRef,omitempty"`
|
|
2157
|
-
// When this evidence package was prepared. ISO 8601 format.
|
|
2331
|
+
// When this evidence package was prepared. ISO 8601 format.
|
|
2158
2332
|
PreparedAt *time.Time `json:"preparedAt,omitempty"`
|
|
2159
|
-
// Identity of who prepared this evidence package.
|
|
2333
|
+
// Identity of who prepared this evidence package.
|
|
2160
2334
|
PreparedBy *Identity `json:"preparedBy,omitempty"`
|
|
2161
|
-
// Digital signature covering the entire evidence package.
|
|
2335
|
+
// Digital signature covering the entire evidence package.
|
|
2162
2336
|
Signature *Signature `json:"signature,omitempty"`
|
|
2163
|
-
// URI to the hdf-system document this evidence package covers.
|
|
2337
|
+
// URI to the hdf-system document this evidence package covers.
|
|
2164
2338
|
SystemRef *string `json:"systemRef,omitempty"`
|
|
2165
|
-
// Version of this evidence package.
|
|
2339
|
+
// Version of this evidence package.
|
|
2166
2340
|
Version *string `json:"version,omitempty"`
|
|
2167
2341
|
}
|
|
2168
2342
|
|
|
2169
2343
|
// Informational summary of assessment completeness. Not authoritative — tools should compute these
|
|
2170
2344
|
// from the referenced documents.
|
|
2171
2345
|
type CompletenessCheck struct {
|
|
2172
|
-
// Whether all baselines referenced by system components have assessment results.
|
|
2346
|
+
// Whether all baselines referenced by system components have assessment results.
|
|
2173
2347
|
AllBaselinesAssessed *bool `json:"allBaselinesAssessed,omitempty"`
|
|
2174
|
-
// Whether all system components have at least one matching target in the results.
|
|
2348
|
+
// Whether all system components have at least one matching target in the results.
|
|
2175
2349
|
AllComponentsCovered *bool `json:"allComponentsCovered,omitempty"`
|
|
2176
|
-
// Overall compliance percentage across all assessments.
|
|
2350
|
+
// Overall compliance percentage across all assessments.
|
|
2177
2351
|
CompliancePercent *float64 `json:"compliancePercent,omitempty"`
|
|
2178
|
-
// Number of waivers/amendments that have expired.
|
|
2352
|
+
// Number of waivers/amendments that have expired.
|
|
2179
2353
|
ExpiredWaivers *int64 `json:"expiredWaivers,omitempty"`
|
|
2180
|
-
// SBOM coverage across system components.
|
|
2354
|
+
// SBOM coverage across system components.
|
|
2181
2355
|
SbomCoverage *SBOMCoverage `json:"sbomCoverage,omitempty"`
|
|
2182
|
-
// Number of POA&M items that are still open (not completed).
|
|
2356
|
+
// Number of POA&M items that are still open (not completed).
|
|
2183
2357
|
UnresolvedPoams *int64 `json:"unresolvedPoams,omitempty"`
|
|
2184
2358
|
}
|
|
2185
2359
|
|
|
2186
2360
|
// SBOM coverage statistics for the system.
|
|
2187
2361
|
type SBOMCoverage struct {
|
|
2188
|
-
// Number of system components that have an associated SBOM.
|
|
2362
|
+
// Number of system components that have an associated SBOM.
|
|
2189
2363
|
ComponentsWithSbom *int64 `json:"componentsWithSbom,omitempty"`
|
|
2190
|
-
// Total number of components in the system.
|
|
2364
|
+
// Total number of components in the system.
|
|
2191
2365
|
TotalComponents *int64 `json:"totalComponents,omitempty"`
|
|
2192
2366
|
}
|
|
2193
2367
|
|
|
2194
2368
|
// A reference to an HDF document or BOM/manifest included in the evidence package.
|
|
2195
2369
|
type ContentReference struct {
|
|
2196
|
-
// Cryptographic checksum for verifying the referenced document's integrity.
|
|
2197
|
-
Checksum
|
|
2198
|
-
// componentId of the component this content entry relates to. Use to link SBOMs, results,
|
|
2199
|
-
// or other documents to a specific system component.
|
|
2200
|
-
ComponentRef
|
|
2201
|
-
// Optional description of this content entry.
|
|
2202
|
-
Description
|
|
2203
|
-
// The type of HDF document being referenced.
|
|
2204
|
-
Type
|
|
2205
|
-
//
|
|
2206
|
-
|
|
2370
|
+
// Cryptographic checksum for verifying the referenced document's integrity.
|
|
2371
|
+
Checksum *Checksum `json:"checksum,omitempty"`
|
|
2372
|
+
// componentId of the component this content entry relates to. Use to link SBOMs, results,
|
|
2373
|
+
// or other documents to a specific system component.
|
|
2374
|
+
ComponentRef *string `json:"componentRef,omitempty"`
|
|
2375
|
+
// Optional description of this content entry.
|
|
2376
|
+
Description *string `json:"description,omitempty"`
|
|
2377
|
+
// The type of HDF document being referenced.
|
|
2378
|
+
Type ContentType `json:"type"`
|
|
2379
|
+
// A uri-reference whose DECODED form is a path relative to the package document's own
|
|
2380
|
+
// directory — that is what the reference MEANS, independently of any one consumer.
|
|
2381
|
+
// Percent-escapes are part of the encoding, not the name: `my%20scans/q4.json` and `my
|
|
2382
|
+
// scans/q4.json` name the same file, and the escaped spelling is the one this field's
|
|
2383
|
+
// format admits. A consumer decodes before it resolves, never after, because decoding can
|
|
2384
|
+
// produce a parent traversal that containment must then see. It is never fetched: there is
|
|
2385
|
+
// no network retrieval anywhere in evidence handling. `uri-reference` admits shapes other
|
|
2386
|
+
// than a relative path and they stay schema-valid; how a consumer resolves one, and what it
|
|
2387
|
+
// does when it cannot, is that consumer's own contract. An artifact deliberately held
|
|
2388
|
+
// elsewhere belongs in externalEvidence[], which references it by URI and checksum without
|
|
2389
|
+
// retrieving it.
|
|
2390
|
+
URI string `json:"uri"`
|
|
2207
2391
|
}
|
|
2208
2392
|
|
|
2209
2393
|
// A reference to external native-format evidence (log/telemetry corpus or other artifact) carried
|
|
@@ -2211,43 +2395,43 @@ type ContentReference struct {
|
|
|
2211
2395
|
// (corpora can be huge) or transcoded (that would be lossy) — it stays canonical in its native
|
|
2212
2396
|
// format and HDF acts as the structured index.
|
|
2213
2397
|
type ExternalEvidenceReference struct {
|
|
2214
|
-
// Cryptographic checksum of the referenced artifact for integrity verification.
|
|
2398
|
+
// Cryptographic checksum of the referenced artifact for integrity verification.
|
|
2215
2399
|
Checksum *Checksum `json:"checksum,omitempty"`
|
|
2216
|
-
// Optional human-readable description of this evidence entry.
|
|
2400
|
+
// Optional human-readable description of this evidence entry.
|
|
2217
2401
|
Description *string `json:"description,omitempty"`
|
|
2218
|
-
// The native format discriminator of the referenced artifact.
|
|
2402
|
+
// The native format discriminator of the referenced artifact.
|
|
2219
2403
|
Format string `json:"format"`
|
|
2220
|
-
// Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
|
|
2221
|
-
// Free-text and untrusted — HDF does not validate it against a registry.
|
|
2404
|
+
// Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
|
|
2405
|
+
// Free-text and untrusted — HDF does not validate it against a registry.
|
|
2222
2406
|
FormatVersion *string `json:"formatVersion,omitempty"`
|
|
2223
|
-
// Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
|
|
2224
|
-
// (the semantic standard). Examples: application/x-ndjson, application/json,
|
|
2225
|
-
// application/vnd.apache.parquet, text/csv.
|
|
2407
|
+
// Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
|
|
2408
|
+
// (the semantic standard). Examples: application/x-ndjson, application/json,
|
|
2409
|
+
// application/vnd.apache.parquet, text/csv.
|
|
2226
2410
|
MediaType *string `json:"mediaType,omitempty"`
|
|
2227
|
-
// Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
2411
|
+
// Optional descriptive metadata about the referenced corpus. Does not affect integrity.
|
|
2228
2412
|
Metadata *ExternalEvidenceMetadata `json:"metadata,omitempty"`
|
|
2229
|
-
// URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
|
|
2230
|
-
// a relative path or absolute URL. The data stays canonical in its native format — HDF
|
|
2231
|
-
// references it, never parses or transcodes it.
|
|
2413
|
+
// URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
|
|
2414
|
+
// a relative path or absolute URL. The data stays canonical in its native format — HDF
|
|
2415
|
+
// references it, never parses or transcodes it.
|
|
2232
2416
|
URI string `json:"uri"`
|
|
2233
2417
|
}
|
|
2234
2418
|
|
|
2235
2419
|
// Descriptive metadata about a referenced external evidence corpus. Does not affect integrity.
|
|
2236
2420
|
type ExternalEvidenceMetadata struct {
|
|
2237
|
-
// The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
|
|
2238
|
-
// 'elastic-agent'.
|
|
2421
|
+
// The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
|
|
2422
|
+
// 'elastic-agent'.
|
|
2239
2423
|
Collector *string `json:"collector,omitempty"`
|
|
2240
|
-
// Approximate number of records/events in the referenced corpus.
|
|
2424
|
+
// Approximate number of records/events in the referenced corpus.
|
|
2241
2425
|
RecordCount *int64 `json:"recordCount,omitempty"`
|
|
2242
|
-
// The time window the referenced evidence covers.
|
|
2426
|
+
// The time window the referenced evidence covers.
|
|
2243
2427
|
TimeRange *ExternalEvidenceTimeRange `json:"timeRange,omitempty"`
|
|
2244
2428
|
}
|
|
2245
2429
|
|
|
2246
2430
|
// The time window a referenced external evidence corpus covers.
|
|
2247
2431
|
type ExternalEvidenceTimeRange struct {
|
|
2248
|
-
// End of the time window the corpus covers (ISO 8601).
|
|
2432
|
+
// End of the time window the corpus covers (ISO 8601).
|
|
2249
2433
|
End *time.Time `json:"end,omitempty"`
|
|
2250
|
-
// Start of the time window the corpus covers (ISO 8601).
|
|
2434
|
+
// Start of the time window the corpus covers (ISO 8601).
|
|
2251
2435
|
Start *time.Time `json:"start,omitempty"`
|
|
2252
2436
|
}
|
|
2253
2437
|
|
|
@@ -2259,61 +2443,61 @@ type ExternalEvidenceTimeRange struct {
|
|
|
2259
2443
|
// before projection, and the full after requirement (the evidence a responder opens the event for).
|
|
2260
2444
|
// Design: ADR-0005.
|
|
2261
2445
|
type HDFRequirementChangeEvent struct {
|
|
2262
|
-
// The full requirement as evaluated after the change — required and non-null for every
|
|
2263
|
-
// state except absent (null there: the requirement left the assessment scope). Full content
|
|
2264
|
-
// is load-bearing twice over: reassembly parity (applyChangeEvents cannot reproduce changed
|
|
2265
|
-
// result content from a projection) and triage (the failing results[] ARE the 'why' a
|
|
2266
|
-
// responder opens the event for).
|
|
2446
|
+
// The full requirement as evaluated after the change — required and non-null for every
|
|
2447
|
+
// state except absent (null there: the requirement left the assessment scope). Full content
|
|
2448
|
+
// is load-bearing twice over: reassembly parity (applyChangeEvents cannot reproduce changed
|
|
2449
|
+
// result content from a projection) and triage (the failing results[] ARE the 'why' a
|
|
2450
|
+
// responder opens the event for).
|
|
2267
2451
|
After interface{} `json:"after"`
|
|
2268
|
-
// Thin projection of the prior effective posture, for at-a-glance alerting without a
|
|
2269
|
-
// state-store lookup. Null exactly when state is new (no prior posture exists). The full
|
|
2270
|
-
// prior state is recoverable from the consumer's materialized state; the envelope's
|
|
2271
|
-
// priorChecksum covers the integrity of that recovery.
|
|
2452
|
+
// Thin projection of the prior effective posture, for at-a-glance alerting without a
|
|
2453
|
+
// state-store lookup. Null exactly when state is new (no prior posture exists). The full
|
|
2454
|
+
// prior state is recoverable from the consumer's materialized state; the envelope's
|
|
2455
|
+
// priorChecksum covers the integrity of that recovery.
|
|
2272
2456
|
Before interface{} `json:"before"`
|
|
2273
|
-
// Why the state changed. An overrideExpired flip is a different triage than resultChanged:
|
|
2274
|
-
// the control did not get worse, a waiver lapsed.
|
|
2457
|
+
// Why the state changed. An overrideExpired flip is a different triage than resultChanged:
|
|
2458
|
+
// the control did not get worse, a waiver lapsed.
|
|
2275
2459
|
ChangeReasons []EventChangeReason `json:"changeReasons,omitempty"`
|
|
2276
|
-
// Canonical requirement identifier — the same identity as Requirement_Diff.id and the
|
|
2277
|
-
// requirement's id in hdf-results. Together with the envelope's (systemRef, componentId)
|
|
2278
|
-
// this forms the durable entity key. A requirement renumbering is emitted as absent + new
|
|
2279
|
-
// under the two keys, never an in-place key change; batch comparison reconciles renames via
|
|
2280
|
-
// its oldId/newId matching.
|
|
2460
|
+
// Canonical requirement identifier — the same identity as Requirement_Diff.id and the
|
|
2461
|
+
// requirement's id in hdf-results. Together with the envelope's (systemRef, componentId)
|
|
2462
|
+
// this forms the durable entity key. A requirement renumbering is emitted as absent + new
|
|
2463
|
+
// under the two keys, never an in-place key change; batch comparison reconciles renames via
|
|
2464
|
+
// its oldId/newId matching.
|
|
2281
2465
|
RequirementID string `json:"requirementId"`
|
|
2282
|
-
// The producer-computable subset of Requirement_State: new | absent | updated | fixed |
|
|
2283
|
-
// regressed. fixed and regressed carry the direction SARIF's baselineState lacks; project
|
|
2284
|
-
// down to SARIF's closed 4 values for external interop.
|
|
2466
|
+
// The producer-computable subset of Requirement_State: new | absent | updated | fixed |
|
|
2467
|
+
// regressed. fixed and regressed carry the direction SARIF's baselineState lacks; project
|
|
2468
|
+
// down to SARIF's closed 4 values for external interop.
|
|
2285
2469
|
State EventRequirementState `json:"state"`
|
|
2286
|
-
// componentId of the system component this event concerns.
|
|
2470
|
+
// componentId of the system component this event concerns.
|
|
2287
2471
|
ComponentID string `json:"componentId"`
|
|
2288
|
-
// Identity of this event occurrence, unique per source. (source, eventId) is the
|
|
2289
|
-
// deduplication key: consumers may treat events with identical source and eventId as
|
|
2290
|
-
// duplicates. UUIDv7 (time-ordered) is recommended but not required.
|
|
2472
|
+
// Identity of this event occurrence, unique per source. (source, eventId) is the
|
|
2473
|
+
// deduplication key: consumers may treat events with identical source and eventId as
|
|
2474
|
+
// duplicates. UUIDv7 (time-ordered) is recommended but not required.
|
|
2291
2475
|
EventID string `json:"eventId"`
|
|
2292
|
-
// The effectiveChecksum of the entity state this event supersedes, forming a per-key hash
|
|
2293
|
-
// chain: a mismatch or gap against stored state is detectable, letting a consumer mark the
|
|
2294
|
-
// key unverified instead of serving stale posture.
|
|
2295
|
-
//
|
|
2296
|
-
// Null at chain start (no prior state, e.g. a new entity or the first event after a seed).
|
|
2297
|
-
//
|
|
2298
|
-
// The chain provides tamper/gap evidence given a trusted head; completeness is anchored
|
|
2299
|
-
// out-of-band by periodic re-centering rescans.
|
|
2476
|
+
// The effectiveChecksum of the entity state this event supersedes, forming a per-key hash
|
|
2477
|
+
// chain: a mismatch or gap against stored state is detectable, letting a consumer mark the
|
|
2478
|
+
// key unverified instead of serving stale posture.
|
|
2479
|
+
//
|
|
2480
|
+
// Null at chain start (no prior state, e.g. a new entity or the first event after a seed).
|
|
2481
|
+
//
|
|
2482
|
+
// The chain provides tamper/gap evidence given a trusted head; completeness is anchored
|
|
2483
|
+
// out-of-band by periodic re-centering rescans.
|
|
2300
2484
|
PriorChecksum interface{} `json:"priorChecksum"`
|
|
2301
|
-
// The versioned schema $id this event validates against, so events self-describe on
|
|
2302
|
-
// heterogeneous streams. Recommended on every wire event.
|
|
2485
|
+
// The versioned schema $id this event validates against, so events self-describe on
|
|
2486
|
+
// heterogeneous streams. Recommended on every wire event.
|
|
2303
2487
|
SchemaRef *string `json:"schemaRef,omitempty"`
|
|
2304
|
-
// Monotonically increasing sequence number per entity key. The ONLY ordering authority for
|
|
2305
|
-
// folding: consumers keep the greatest sequence per key regardless of arrival order or
|
|
2306
|
-
// timestamp. Deliberately per-entity-key (event-sourcing aggregate-version practice) rather
|
|
2307
|
-
// than per-source.
|
|
2488
|
+
// Monotonically increasing sequence number per entity key. The ONLY ordering authority for
|
|
2489
|
+
// folding: consumers keep the greatest sequence per key regardless of arrival order or
|
|
2490
|
+
// timestamp. Deliberately per-entity-key (event-sourcing aggregate-version practice) rather
|
|
2491
|
+
// than per-source.
|
|
2308
2492
|
Sequence int64 `json:"sequence"`
|
|
2309
|
-
// URI identifying the producer context that emitted this event (for example, a scanner
|
|
2310
|
-
// instance and profile). eventId uniqueness and sequence numbering are scoped per source.
|
|
2493
|
+
// URI identifying the producer context that emitted this event (for example, a scanner
|
|
2494
|
+
// instance and profile). eventId uniqueness and sequence numbering are scoped per source.
|
|
2311
2495
|
Source string `json:"source"`
|
|
2312
|
-
// URI to the hdf-system document (authorization boundary) this event applies to. Resolves
|
|
2313
|
-
// to the latest version of the evolving system document.
|
|
2496
|
+
// URI to the hdf-system document (authorization boundary) this event applies to. Resolves
|
|
2497
|
+
// to the latest version of the evolving system document.
|
|
2314
2498
|
SystemRef string `json:"systemRef"`
|
|
2315
|
-
// Occurrence time of the observed change (RFC 3339, trimmed UTC). Display and audit
|
|
2316
|
-
// metadata only — NEVER an ordering key; ordering is sequence's job.
|
|
2499
|
+
// Occurrence time of the observed change (RFC 3339, trimmed UTC). Display and audit
|
|
2500
|
+
// metadata only — NEVER an ordering key; ordering is sequence's job.
|
|
2317
2501
|
Timestamp time.Time `json:"timestamp"`
|
|
2318
2502
|
}
|
|
2319
2503
|
|
|
@@ -2336,8 +2520,14 @@ const (
|
|
|
2336
2520
|
Username IdentityType = "username"
|
|
2337
2521
|
)
|
|
2338
2522
|
|
|
2339
|
-
//
|
|
2340
|
-
// container-image and other artifact digests that use it.
|
|
2523
|
+
// Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers
|
|
2524
|
+
// container-image and other artifact digests that use it. HDF tooling verifies every algorithm in
|
|
2525
|
+
// this enum, so any of them may be recorded where the checksum needs to be verifiable. md5 and sha1
|
|
2526
|
+
// are excluded deliberately: a checksum or integrity record exists to detect tampering, and both
|
|
2527
|
+
// are collision-broken, so a digest in either would look verifiable while proving nothing. A source
|
|
2528
|
+
// tool digest in an excluded algorithm is not recorded as a checksum. Admitting weak hashes as an
|
|
2529
|
+
// application-level accept/reject decision was considered and rejected; widening this enum is a
|
|
2530
|
+
// schema decision, not an oversight.
|
|
2341
2531
|
type HashAlgorithm string
|
|
2342
2532
|
|
|
2343
2533
|
const (
|
|
@@ -2347,6 +2537,15 @@ const (
|
|
|
2347
2537
|
Sha512 HashAlgorithm = "sha512"
|
|
2348
2538
|
)
|
|
2349
2539
|
|
|
2540
|
+
// How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not
|
|
2541
|
+
// valid UTF-8 text.
|
|
2542
|
+
type ExternalReferenceEncoding string
|
|
2543
|
+
|
|
2544
|
+
const (
|
|
2545
|
+
Base64 ExternalReferenceEncoding = "base64"
|
|
2546
|
+
UTF8 ExternalReferenceEncoding = "utf-8"
|
|
2547
|
+
)
|
|
2548
|
+
|
|
2350
2549
|
// Comparison operator for evaluating the input value against observed values. Numeric:
|
|
2351
2550
|
// eq/ne/lt/le/gt/ge. String: eq/ne/contains/matches. Collection: in/notIn.
|
|
2352
2551
|
type ComparisonOperator string
|
|
@@ -2464,10 +2663,11 @@ const (
|
|
|
2464
2663
|
// to 'notApplicable'. The disposition field on the requirement distinguishes false positives from
|
|
2465
2664
|
// genuinely not-applicable findings. - 'riskAdjustment': impact score adjusted based on
|
|
2466
2665
|
// environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact
|
|
2467
|
-
// via the impact field. - 'operationalRequirement':
|
|
2468
|
-
// (FedRAMP Operational Requirement); the finding
|
|
2469
|
-
// the affected functionality. Remains an open
|
|
2470
|
-
// v3.1.0 — use 'waiver' with status
|
|
2666
|
+
// via the impact field; a status on it is rejected by validation. - 'operationalRequirement':
|
|
2667
|
+
// deviation required by operational constraints (FedRAMP Operational Requirement); the finding
|
|
2668
|
+
// cannot be remediated because the system requires the affected functionality. Remains an open
|
|
2669
|
+
// risk. Migration note: 'exception' was removed in v3.1.0 — use 'waiver' with status
|
|
2670
|
+
// 'notApplicable' instead.
|
|
2471
2671
|
type OverrideType string
|
|
2472
2672
|
|
|
2473
2673
|
const (
|
|
@@ -2647,9 +2847,8 @@ const (
|
|
|
2647
2847
|
ScannerNote AnnotationCategory = "scannerNote"
|
|
2648
2848
|
)
|
|
2649
2849
|
|
|
2650
|
-
//
|
|
2651
|
-
//
|
|
2652
|
-
// The state of this component in the comparison.
|
|
2850
|
+
// How a baseline or component fared across the compared documents: new (only in the newer), absent
|
|
2851
|
+
// (only in the older), unchanged, or updated (present in both with a changed version).
|
|
2653
2852
|
type BaselineDiffState string
|
|
2654
2853
|
|
|
2655
2854
|
const (
|
|
@@ -2905,13 +3104,8 @@ func (x *Ref) MarshalJSON() ([]byte, error) {
|
|
|
2905
3104
|
return marshalUnion(nil, nil, nil, x.String, x.AnythingMapArray != nil, x.AnythingMapArray, false, nil, false, nil, false, nil, false)
|
|
2906
3105
|
}
|
|
2907
3106
|
|
|
2908
|
-
//
|
|
2909
|
-
//
|
|
2910
|
-
// encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
|
|
2911
|
-
// physical format. String or array of strings.
|
|
2912
|
-
//
|
|
2913
|
-
// Input/output modalities. String or array of strings. Examples: text, image, audio.
|
|
2914
|
-
// Symmetric with Dataset_Extension.modality.
|
|
3107
|
+
// A content modality such as text, image, audio, tabular or timeseries: one string, or a list when
|
|
3108
|
+
// the content spans several.
|
|
2915
3109
|
type Modality struct {
|
|
2916
3110
|
String *string
|
|
2917
3111
|
StringArray []string
|