Skip to content

Migrate enveloped signature support from JSF to JSS#858

Open
stevespringett wants to merge 6 commits into
2.0-devfrom
2.0-dev-x590
Open

Migrate enveloped signature support from JSF to JSS#858
stevespringett wants to merge 6 commits into
2.0-devfrom
2.0-dev-x590

Conversation

@stevespringett
Copy link
Copy Markdown
Member

Migrate enveloped signature support from JSF to JSS (ITU-T X.590)

Summary

  • Replaced legacy JSON Signature Format (JSF) with JSON Signature Scheme (JSS) per ITU-T X.590 (10/2023). Added CycloneDX 2.0 model schema that implements JSS
  • Updated all schema files referencing signatures to use the new signatures array (JSS) instead of singular signature object (JSF)
  • Removed old JSF test (valid-signatures-2.0.json) and added 18 targeted JSS test cases (8 valid, 10 invalid)

This PR closes #851

All tests are structural validations only. Keys, certificates, thumbprints, and signature values are illustrative and may not be cryptographically valid. No content validation is performed.

… number of valid and invalid use cases.

Signed-off-by: Steve Springett <steve@springett.us>
Copy link
Copy Markdown

@j28smith j28smith left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took a quick look at this @stevespringett and it looks good at a high level. I noted a number of places where the descriptions still reference JSF instead of the updated JSS.

For the core change/update, is this the main file to look more closely at to ensure it references the JSS spec correctly?

schema/2.0/model/cyclonedx-jss_X590_2023_10-2.0.schema.json

Comment thread schema/2.0/model/cyclonedx-annotation-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-component-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-composition-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-declaration-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-declaration-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-declaration-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-declaration-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-declaration-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-service-2.0.schema.json Outdated
Comment thread schema/2.0/model/cyclonedx-standard-2.0.schema.json Outdated
@j28smith
Copy link
Copy Markdown

j28smith commented Mar 9, 2026

@jordan2175 if possible, would you be able to take a look at this PR? Or perhaps you can suggest someone else who worked closely on the JSS technical standardization process that could lend assistance with a review of Steve's PR here?

Note the key thing to look at is the schema definition for JSS in this file:

schema/2.0/model/cyclonedx-jss_X590_2023_10-2.0.schema.json

Thanks.

@j28smith
Copy link
Copy Markdown

@jordan2175, here is the PR that I mentioned on our call today. Would appreciate your review if you could also take a look.

Thanks!

…the various models.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
@stevespringett stevespringett added request for comment RFC notice sent A public RFC notice was distributed to the CycloneDX mailing list for consideration labels May 4, 2026
@jkowalleck
Copy link
Copy Markdown
Member

RFC notice sent on May 04, 2026

Public RFC period ends June 01, 2026

Copy link
Copy Markdown
Member

@jkowalleck jkowalleck left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My initial review was AI-assisted, so please treat this as a first-pass, skeptical read rather than a definitive standards-conformance assessment. I’ll need more time to do a deeper manual review against the actual X.590/JSS text.

That said, I’m not yet convinced that schema/2.0/model/cyclonedx-jss_X590_2023_10-2.0.schema.json really implements X.590/JSS as claimed, as opposed to a looser CycloneDX-flavored approximation of it.

A few things make me hesitate:

  • The schema root is type: "null" and seems to exist only as a $defs container. That may be fine as an internal helper schema, but it weakens the claim that this file itself “implements” JSS in a direct or normative sense.

  • algorithmVocabulary is defined with an enum, but algorithm is not constrained to it. So the schema documents a vocabulary without actually enforcing it.

  • Several fields that appear to have normative formatting requirements are only typed as generic strings:

    • value
    • thumbprint
    • public_key
    • hash_algorithm

    If X.590 is prescriptive here, this schema is currently much more permissive than the spec text suggests.

  • Important semantic constraints seem to be described only in prose, not enforced by the schema. For example:

    • modified should be >= created
    • valid_until should be > valid_from

    I realize JSON Schema cannot express every cross-field rule cleanly, but then we should be careful not to overstate conformance.

  • unevaluatedProperties: true makes the schema intentionally open-ended. That may be pragmatic, but it also means this is not acting as a strict validator of a tightly bounded signature object.

  • The signatures array modeling may match CycloneDX’s desired embedding, but I’m not convinced that this fully captures the actual structural and semantic requirements of X.590 rather than just borrowing its terminology.

So my concern is not that this schema is useless — it may be perfectly reasonable as a CycloneDX profile/adaptation — but that the wording currently suggests a stronger level of standards conformance than the schema appears to enforce.

I want to come back with a deeper manual review once I’ve had time to compare this more carefully against X.590 itself.


I will continue research about the topic, and might come up with yet another review.

Comment thread schema/2.0/model/cyclonedx-common-2.0.schema.json
Signed-off-by: Steve Springett <steve@springett.us>
…d value. All JSS unit tests continue to pass.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
@jkowalleck
Copy link
Copy Markdown
Member

jkowalleck commented Jun 1, 2026

Important semantic constraints seem to be described only in prose, not enforced by the schema. For example:

* `modified` should be `>= created`

* `valid_until` should be `> valid_from`

@stevespringett , doees somethink like this work here?

{
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "type": "object",
  "properties": {
    "p1": { "type": "string", "format": "date-time" },
    "p2": { "type": "string", "format": "date-time" }
  },
  "required": ["p1", "p2"],
  "allOf": [
    {
      "properties": {
        "p2": {
          "exclusiveMinimum": { "$data": "1/p1" }
        }
      }
    }
  ]
}

PS: we decided to not incorporate this for now - might do in the future.
we are not quite sure if this exclusiveMinimum works with dynamic data - especially for strings in custom zulu time-format

@jkowalleck
Copy link
Copy Markdown
Member

re: #858 (review)

was addressed in

@stevespringett stevespringett added RFC vote accepted promote to tc54 Promote to Ecma Technical Committee 54 labels Jun 1, 2026
"description": "Public key material referenced by a base64URL-encoded SHA-256 certificate thumbprint."
}
],
"unevaluatedProperties": true,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remark: we might want to use the "extensiveProperties" approach instead ...
see

"extensibleProperties": {
"type": "object",
"title": "Extensible Properties",
"patternProperties": {
"^ext:[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}:.+$": {

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

promote to tc54 Promote to Ecma Technical Committee 54 proposed core enhancement request for comment RFC notice sent A public RFC notice was distributed to the CycloneDX mailing list for consideration RFC vote accepted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE]: Update signatures to use formal standard X.590 (JSS) instead of JSF

3 participants