Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
905e58a
fix
jkowalleck Aug 3, 2026
f4829e5
Merge branch '2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 4, 2026
faaa42d
Merge branch '2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 5, 2026
bda8d96
Merge branch '2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 5, 2026
9ac7ae3
Merge branch '2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 5, 2026
3ff7b2e
fix
jkowalleck Aug 5, 2026
377fd52
fix
jkowalleck Aug 5, 2026
73b22de
compiled
jkowalleck Aug 5, 2026
ec1d783
fix
jkowalleck Aug 5, 2026
cf92dc7
fix
jkowalleck Aug 5, 2026
2927d0b
revert-bundle
jkowalleck Aug 5, 2026
2c793a2
Merge branch '2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 5, 2026
bbcfa55
fixes
jkowalleck Aug 5, 2026
3b9cfbb
tests
jkowalleck Aug 5, 2026
b6325bf
tests
jkowalleck Aug 5, 2026
35b417b
tests
jkowalleck Aug 5, 2026
4adea67
schema
jkowalleck Aug 5, 2026
af0a8c4
tests
jkowalleck Aug 5, 2026
640944f
tests
jkowalleck Aug 5, 2026
7717285
schema
jkowalleck Aug 5, 2026
4e8c558
test/validator
jkowalleck Aug 5, 2026
897d033
schema
jkowalleck Aug 5, 2026
17582a7
tests
jkowalleck Aug 5, 2026
8803aa7
tests
jkowalleck Aug 5, 2026
f4b3642
tests
jkowalleck Aug 5, 2026
079bc5c
schema
jkowalleck Aug 5, 2026
f4407ff
tests
jkowalleck Aug 5, 2026
bb38682
tests
jkowalleck Aug 5, 2026
828bb86
schema
jkowalleck Aug 5, 2026
1e5410e
helpers
jkowalleck Aug 5, 2026
3caad90
Merge remote-tracking branch 'origin/2.0-dev' into 2.0-tests-init-fixes
jkowalleck Aug 5, 2026
0d22d5e
refLinkType inheritance
jkowalleck Aug 5, 2026
046eb69
test-runner
jkowalleck Aug 5, 2026
35fff9e
test-runner
jkowalleck Aug 5, 2026
687815e
docs
jkowalleck Aug 5, 2026
bdd29d3
tests
jkowalleck Aug 5, 2026
9e4a414
tests
jkowalleck Aug 5, 2026
913f603
tests
jkowalleck Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions schema/2.0/cyclonedx-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
"specFormat",
"specVersion"
],
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string"
Expand Down Expand Up @@ -94,5 +93,6 @@
},
"allOf": [
{ "$ref": "model/cyclonedx-common-2.0.schema.json#/$defs/extensibleProperties" }
]
],
"unevaluatedProperties": false
}
1 change: 0 additions & 1 deletion schema/2.0/model/cyclonedx-ai-modelcard-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,6 @@
"description": "A description of the energy provider."
},
"organization": {
"type": "object",
"title": "Organization",
"description": "The organization that provides energy.",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/organizationalEntity"
Expand Down
20 changes: 8 additions & 12 deletions schema/2.0/model/cyclonedx-annotation-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,24 +53,20 @@
"description": "The organization, person, component, or service which created the textual content of the annotation.",
"oneOf": [
{
"required": [
"organization"
]
"properties": { "organization": true },
"required": [ "organization" ]
},
{
"required": [
"individual"
]
"properties": { "individual": true },
"required": [ "individual" ]
},
{
"required": [
"component"
]
"properties": { "component": true },
"required": [ "component" ]
},
{
"required": [
"service"
]
"properties": { "service": true },
"required": ["service"]
}
],
"additionalProperties": false,
Expand Down
20 changes: 16 additions & 4 deletions schema/2.0/model/cyclonedx-citation-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,24 @@
},
"required": ["timestamp"],
"anyOf": [
{ "required": ["attributedTo"] },
{ "required": ["process"] }
{
"properties": { "attributedTo": true },
"required": ["attributedTo"]
},
{
"properties": { "process": true },
"required": ["process"]
}
],
"oneOf": [
{ "required": ["pointers"] },
{ "required": ["expressions"] }
{
"properties": { "pointers": true },
"required": ["pointers"]
},
{
"properties": { "expressions": true },
"required": ["expressions"]
}
]
}
}
Expand Down
65 changes: 47 additions & 18 deletions schema/2.0/model/cyclonedx-common-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
},
"refLinkType": {
"description": "Descriptor for an element identified by the attribute 'bom-ref' in the same BOM document.\nIn contrast to `bomLinkElementType`.",
"$ref": "#/$defs/refType"
"allOf": [{ "$ref": "#/$defs/refType" }],
"$comment": "value-range is same as 'refType'"
},
"bomLinkDocumentType": {
"title": "BOM-Link Document",
Expand Down Expand Up @@ -414,7 +415,7 @@
}
},
"organizationalEntityOrContact": {

"$comment": "TODO"
},
Comment thread
jkowalleck marked this conversation as resolved.
"properties": {
"type": "array",
Expand Down Expand Up @@ -448,43 +449,70 @@
"extensibleProperties": {
"type": "object",
"title": "Extensible Properties",
"$comment": "This is a mixin. It intentionally does NOT restrict additional/unevaluated properties itself; schemas composing it via `allOf` are expected to close themselves with `unevaluatedProperties: false` so that both their own defined properties and these patternProperties remain usable.",
"patternProperties": {
"^ext:[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}:.+$": {
"description": "CycloneDX supports a structured and namespace-aware mechanism for extensibility through the use of extensible properties. This mechanism enables organizations, ecosystems, and tool vendors to safely introduce custom properties without conflicting with the core schema or other extensions.\n\nExtensible properties are defined as a JSON object whose keys must conform to a strict pattern that resembles a reverse domain name structure, prefixed with ext:. This pattern provides a namespacing convention that aligns with well-established practices in other structured formats (e.g., XML namespaces).",
"description": "CycloneDX supports a structured and namespace-aware mechanism for extensibility through the use of extensible properties. This mechanism enables organizations, ecosystems, and tool vendors to safely introduce custom properties without conflicting with the core schema or other extensions.\n\nExtensible properties are defined as a JSON object whose keys must conform to a strict pattern that resembles a reverse domain name structure, prefixed with ext:. This pattern provides a namespacing convention that aligns with well-established practices in other structured formats (e.g., XML namespaces).\n\nValues that are objects must declare the schema they conform to via `$schema`. This requirement applies recursively to objects contained in arrays, at any nesting depth.",
"examples": [
"ext:<domain>:<name>",
"ext:example.org:myExtension"
],
"$ref": "#/$defs/extensibleProperties/$defs/propertyValue"
}
},
"$defs": {
"propertyObject": {
"type": "object",
"title": "Extensible Property Object",
"$comment": "Internal helper for extensibleProperties. Not part of the public schema API — do not reference externally; may change without notice.\n\nadditionalProperties explicitly allowed for extensibility reasons.",
"required": ["$schema"],
"properties": {
"$schema": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": true
},
"propertyValue": {
"title": "Extensible Property Value",
"$comment": "Internal helper for extensibleProperties. Not part of the public schema API — do not reference externally; may change without notice.\nRecursive: objects must declare a `$schema`, arrays may nest arbitrarily deep with the same rule applied to every item, all other values are plain scalars.",
"if": {
"type": ["object", "array"]
"type": "object"
},
"then": {
"type": "object",
"required": ["$schema"],
"properties": {
"$schema": {
"type": "string",
"format": "uri"
}
}
"$ref": "#/$defs/extensibleProperties/$defs/propertyObject"
},
"else": {
"type": ["string", "number", "boolean", "null"]
"if": {
"type": "array"
},
"then": {
"type": "array",
"items": {
"$ref": "#/$defs/extensibleProperties/$defs/propertyValue"
}
},
"else": {
"type": ["string", "number", "boolean", "null"]
}
}
}
}
},
"baseObject": {
"type": "object",
"description": "Base object for all CycloneDX entities. Automatically includes support for extensible properties.",
"$comment": "This is a mixin. It intentionally does NOT set `unevaluatedProperties: false` — that keyword cannot see properties defined by schemas composing this one via `allOf`, and would reject them. Concrete (leaf) schemas composing this mixin must close themselves with `unevaluatedProperties: false`.",
"allOf": [
{ "$ref": "cyclonedx-common-2.0.schema.json#/$defs/extensibleProperties" }
{ "$ref": "#/$defs/extensibleProperties" }
],
"properties": {
"properties": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/properties"
"$ref": "#/$defs/properties"
},
"externalReferences": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/externalReferences"
"$ref": "#/$defs/externalReferences"
}
}
},
Expand All @@ -496,14 +524,14 @@
"description": "An RFC 3339-compliant UTC timestamp using Zulu time (i.e., ending with 'Z'). The format must be 'YYYY-MM-DDTHH:MM:SSZ' or include optional fractional seconds, e.g., 'YYYY-MM-DDTHH:MM:SS.sssZ'. Offsets such as '+00:00' are not allowed."
},
"lifecycle": {
"type": "object",
"title": "Lifecycle",
"description": "The product lifecycle(s) that this BOM represents.",
"oneOf": [
{
"$ref": "#/$defs/preDefinedLifecyclePhase"
},
{
"type": "object",
"title": "Custom Lifecycle Phase",
"required": ["name"],
"additionalProperties": false,
Expand All @@ -529,6 +557,7 @@
"items": { "$ref": "#/$defs/lifecycle"}
},
"preDefinedLifecyclePhase": {
"type": "object",
"title": "Pre-Defined Phase",
"required": ["phase"],
"additionalProperties": false,
Expand Down Expand Up @@ -777,4 +806,4 @@
"description": "Enveloped signatures in [JSON Signature Scheme (JSS/ITU-T X.590)](https://www.itu.int/epublications/publication/itu-t-x-590-2023-10-json-signature-scheme-jss)."
}
}
}
}
3 changes: 2 additions & 1 deletion schema/2.0/model/cyclonedx-component-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,9 @@
},
"allOf": [
{
"description": "Requirement: ensure that `version` and `versionRange` are not present simultaneously.",
"description": "Requirement: ensure that `version` and `versionRange` are mutually exclusive.",
"not": {
"properties": { "version": true, "versionRange": true },
"required": ["version", "versionRange"]
}
},
Expand Down
25 changes: 14 additions & 11 deletions schema/2.0/model/cyclonedx-cryptography-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -425,11 +425,11 @@
"title": "Certificate Lifecycle State",
"description": "The certificate lifecycle is a comprehensive process that manages digital certificates from their initial creation to eventual expiration or revocation. It typically involves several stages.",
"items": {
"type": "object",
"title": "State",
"description": "The state of the certificate.",
"oneOf": [
{
"type": "object",
"title": "Pre-Defined State",
"required": [
"state"
Expand Down Expand Up @@ -465,6 +465,7 @@
}
},
{
"type": "object",
"title": "Custom State",
"required": [
"name"
Expand Down Expand Up @@ -526,11 +527,11 @@
"title": "Certificate Extensions",
"description": "A certificate extension is a field that provides additional information about the certificate or its use. Extensions are used to convey additional information beyond the standard fields.",
"items": {
"type": "object",
"title": "Extension",
"description": "",
"oneOf": [
{
"type": "object",
"title": "Common Extensions",
"required": [
"commonExtensionName",
Expand Down Expand Up @@ -575,6 +576,7 @@
}
},
{
"type": "object",
"title": "Custom Extensions",
"description": "Custom extensions may convey application-specific or vendor-specific data not covered by standard extensions. The structure and semantics of custom extensions are typically defined outside of public standards. CycloneDX leverages properties to support this capability.",
"required": [
Expand Down Expand Up @@ -885,7 +887,7 @@
"title": "Related Algorithms",
"description": "A list of algorithms related to the cipher suite.",
"items": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand Down Expand Up @@ -955,7 +957,7 @@
"description": "The key length of the encryption algorithm."
},
"algorithm": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand All @@ -976,7 +978,7 @@
]
},
"algorithm": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand All @@ -997,7 +999,7 @@
]
},
"algorithm": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand All @@ -1015,7 +1017,7 @@
"description": "A group identifier for the key exchange algorithm."
},
"algorithm": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand All @@ -1033,7 +1035,7 @@
"description": "A name for the authentication method."
},
"algorithm": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Algorithm reference",
"description": "The bom-ref to algorithm cryptographic asset."
}
Expand Down Expand Up @@ -1111,18 +1113,18 @@
]
},
"ref": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType",
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType",
"title": "Reference to cryptographic asset",
"description": "The bom-ref to cryptographic asset."
}
}
},
"fingerprint": {
"type": "object",
"title": "Fingerprint",
"description": "The fingerprint is a cryptographic hash of the asset.",
"oneOf": [
{
"type": "object",
"title": "Standard Hash",
"description": "A fingerprint computed using a standard, well-known hash algorithm.",
"required": ["alg", "content"],
Expand All @@ -1137,6 +1139,7 @@
}
},
{
"type": "object",
"title": "Custom Fingerprint",
"description": "A fingerprint computed with a custom or non-standard algorithm not covered by the standard hash algorithms.",
"required": ["customAlg", "customContent"],
Expand Down Expand Up @@ -1179,7 +1182,7 @@
"title": "References",
"description": "The bom-refs to the assets securing this asset (e.g., algorithms, hardware, keys).",
"items": {
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType"
"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType"
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions schema/2.0/model/cyclonedx-data-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@
},
"oneOf":[
{
"properties": { "organization": true },
"required": ["organization"]
},
{
"properties": { "contact": true },
"required": ["contact"]
}
]
Expand Down
4 changes: 3 additions & 1 deletion schema/2.0/model/cyclonedx-declaration-2.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -346,9 +346,11 @@
"additionalProperties": false,
"oneOf": [
{
"required": ["signature"]
"properties": { "signatures": true },
"required": ["signatures"]
},
{
"properties": { "externalReference": true, "organization": true },
"required": ["externalReference", "organization"]
}
],
Expand Down
Loading