Skip to content
Open
Changes from all commits
Commits
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
132 changes: 131 additions & 1 deletion softbinding-algorithm-list.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,21 @@
],
"dateEntered": "2025-01-01T00:00:00Z",
"contact": "contact@example.com",
"informationalUrl": "https://example.com/softbinding/alg1"
"informationalUrl": "https://example.com/softbinding/alg1",
"benchmarkingInformation": [

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Calling it externalValidation could be confusing (because of the term "validation" which has a defined meaning in C2PA).
I also think there is virtue in calling it a benchmark since it is what it actually is. Either we provide benchmarking information or we do not I would argue.

{
"description": "Robustness benchmark covering common image transformations",
"coveredMediaTypes": [
"image"
],
"benchmarkDate": "2026-07-10",
"results": {
"url": "https://example.com/softbinding/alg1/benchmark",
"alg": "sha256",
"hash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
}
}
]
},
"softBindingResolutionApis": [
"https://resolver.example.com/alg1"
Expand Down Expand Up @@ -106,6 +120,122 @@
"type": "string",
"format": "uri",
"description": "A web page containing more details about the algorithm"
},
"benchmarkingInformation": {
"type": "array",
"minItems": 1,
"description": "A list of benchmarking records that help explain the algorithm's measured capabilities",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Human readable description of the algorithm"
},
"coveredMediaTypes": {
"type": "array",
"minItems": 1,
"items": {
"enum": [
"application",
"audio",
"image",
"model",
"text",
"video"
],
"description": "IANA top level media type addressed by this benchmark"
}
},
"benchmarkDate": {
"type": "string",
"format": "date",
"description": "The date the benchmark was performed"
},
"results": {
"type": "object",
"description": "A link to the benchmark results and an optional content digest, using the alg and hash fields of the C2PA hashed-ext-uri-map with hexadecimal encoding for JSON",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "A URL containing the benchmark results"
},
"alg": {
"enum": [
"sha256",
"sha384",
"sha512"
],
"description": "Hash algorithm identifier from the C2PA hash algorithm identifier list"
},
"hash": {
"type": "string",
"pattern": "^[A-Fa-f0-9]+$",
"description": "Digest of the benchmark results content computed using alg, encoded as hexadecimal rather than the CBOR byte string used in the C2PA specification"
}
},
"dependentRequired": {
"alg": [
"hash"
],
"hash": [
"alg"
]
},
"allOf": [
{
"if": {
"properties": {
"alg": { "const": "sha256" }
},
"required": ["alg"]
},
"then": {
"properties": {
"hash": { "minLength": 64, "maxLength": 64 }
}
}
},
{
"if": {
"properties": {
"alg": { "const": "sha384" }
},
"required": ["alg"]
},
"then": {
"properties": {
"hash": { "minLength": 96, "maxLength": 96 }
}
}
},
{
"if": {
"properties": {
"alg": { "const": "sha512" }
},
"required": ["alg"]
},
"then": {
"properties": {
"hash": { "minLength": 128, "maxLength": 128 }
}
}
}
],
"required": [
"url"
]
}
},
"required": [
"description",
"coveredMediaTypes",
"benchmarkDate",
"results"
]
}
}
},
"required": [
Expand Down
Loading