Skip to content
Merged
27 changes: 23 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
# Soft Binding Algorithm List

C2PA specifies a mechanism for recovering a C2PA Manifest for an asset, for example when the metadata containing the C2PA Manifest has been stripped. This mechanism is a [soft binding](https://c2pa.org/specifications/specifications/2.0/specs/C2PA_Specification.html#_soft_binding) (for example an invisible watermark or content fingerprint). The soft binding is used to look-up the C2PA Manifest within a Manifest Repository. The soft binding is described by the [soft binding assertion](https://c2pa.org/specifications/specifications/2.0/specs/C2PA_Specification.html#_soft_bindings).
C2PA specifies a mechanism for recovering a C2PA Manifest for an asset, for example when the metadata containing the C2PA Manifest has been stripped. This mechanism is a [soft binding](https://c2pa.org/specifications/specifications/2.0/specs/C2PA_Specification.html#_soft_binding), for example an invisible watermark or content fingerprint. The soft binding is used to look-up the C2PA Manifest within a Manifest Repository. The soft binding is described by the [soft binding assertion](https://c2pa.org/specifications/specifications/2.0/specs/C2PA_Specification.html#_soft_bindings).

The soft binding assertion contains a field `alg` which uniquely identifies the algorithm used to compute the soft binding. The Soft Binding Algorithm List is an authoritative list of soft binding algorithm names that should be used as identifiers within the `alg` field. Entries in the list also contain additional information on the algorithms.

## Guidelines for submitting a new entry

### Pull request
Developers of soft binding algorithms may request these be added as new entries in the soft binding algorithm list. Developers may also request amendments to their entries. These requests are made by submitting a Pull Request (PR) that adds to, or edits, the [softbinding-algorithm-list JSON array](softbinding-algorithm-list.json) in this repository and following the [schema](softbinding-algorithm-list-schema.json).

### Selection rules

The C2PA Technical Working Group will approve and merge PRs in accordance with its prevailing processes for approving technical contributions to the C2PA specification.

C2PA's Technical Working Group may also decide to remove malicious or non-conformant entries from the list of approved soft binding algorithms.

For an entry to be approved the following criteria are important:
- The entry has to comply with the [schema](softbinding-algorithm-list-schema.json) and include all the mendatory fields.
For a PR (new entry or update) to be approved the following criteria are important:
- The entry has to conform with the [schema](softbinding-algorithm-list-schema.json) and include all the mandatory fields.
- The entry should not be malicious (e.g., spam) or harmful.
- The PR has to be submitted by an individual affiliated with the company owning the submitted proprietary algorithm or a maintainer of the submitted open source algorithm or its fork.
- The provided URLs have to successfully resolve (e.g., `softBindingResolutionApis`, `informationalUrl`)


The soft binding assertion contains a field `alg` that serves to uniquely identify the algorithm used to compute the soft binding. The Soft Binding Algorithm List is an authoritative list of soft binding algorithm names that may be used as identifiers within the `alg` field. Entries in the list also contain additional information on the algorithms.

Developers of soft binding algorithms may request these be added as new entries in the soft binding algorithm list. Developers may also request amendments to their entries. These requests may be made by submitting a pull request (PR) adding to or editing the [softbinding-algorithm-list JSON array](softbinding-algorithm-list.json) in this repository and following the [entry schema](softbinding-algorithm-entry-schema.json).

The C2PA Technical Working Group may approve and merge PRs in accordance with its prevailing processes for approving technical contributions to the C2PA specification. C2PA's Technical Working Group may also decide to remove malicious or non-conformant algorithms from the list of approved soft binding algorithms.
4 changes: 2 additions & 2 deletions softbinding-algorithm-list.json
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@
"informationalUrl": "https://arxiv.org/abs/2308.12770"
}
},
{
{
"identifier": 21,
"alg": "ai.contentlens.image.basewmk",
"type": "watermark",
Expand Down Expand Up @@ -367,4 +367,4 @@
"informationalUrl": "https://api.contentlens.tech/audio/docs"
}
}
]
]
52 changes: 42 additions & 10 deletions softbinding-algorithm-list.schema.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,32 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html",
"$id": "https://spec.c2pa.org/specifications/specifications/2.3/specs/C2PA_Specification.html",
"title": "Soft Binding Algorithm List",
"description": "Authoritative list of soft binding algorithms to be used by C2PA implementations for the purpose of recovering C2PA Manifests via soft bindings",
"examples": [
[
{
"identifier": 1,
"alg": "com.example.watermark.alg1",
"type": "watermark",
"decodedMediaTypes": [
"image"
],
"entryMetadata": {
"description": "Example watermarking algorithm",
"categories": [
"org.example.watermarking"
],
"dateEntered": "2025-01-01T00:00:00Z",
"contact": "contact@example.com",
"informationalUrl": "https://example.com/softbinding/alg1"
},
"softBindingResolutionApis": [
"https://resolver.example.com/alg1"
]
}
]
],
"type": "array",
"items": {
"type": "object",
Expand All @@ -9,12 +35,12 @@
"type": "integer",
"minimum": 0,
"maximum": 65535,
"description": "This identifier will be assigned when the soft binding algorithm is added to the list."
"description": "This identifier will be assigned when the soft binding algorithm is added to the list"
},
"deprecated": {
"type": "boolean",
"default": false,
"description": "Indicates whether this soft binding algorithm is deprecated. Deprecated algorithms shall not be used for creating soft bindings. Deprecated algorithms may be used for resolving soft bindings but this behaviour is discouraged."
"description": "Indicates whether this soft binding algorithm is deprecated. Deprecated algorithms shall not be used for creating soft bindings. Deprecated algorithms may be used for resolving soft bindings but this behaviour is discouraged"
},
"alg": {
"type": "string",
Expand All @@ -26,7 +52,7 @@
"watermark",
"fingerprint"
],
"description": "Type of soft binding implemented by this algorithm."
"description": "Type of soft binding implemented by this algorithm"
},
"decodedMediaTypes": {
"type": "array",
Expand All @@ -40,7 +66,7 @@
"text",
"video"
],
"description": "IANA top level media type (rendered) for which this soft binding algorithm applies."
"description": "IANA top level media type (rendered) for which this soft binding algorithm applies"
}
},
"encodedMediaTypes": {
Expand All @@ -57,7 +83,7 @@
"properties": {
"description": {
"type": "string",
"description": "Human readable description of the algorithm."
"description": "Human readable description of the algorithm"
},
"categories": {
"type": "array",
Expand All @@ -70,7 +96,7 @@
"dateEntered": {
"type": "string",
"format": "date-time",
"description": "Date of entry for this algorithm."
"description": "Date of entry for this algorithm"
},
"contact": {
"type": "string",
Expand All @@ -79,7 +105,7 @@
"informationalUrl": {
"type": "string",
"format": "uri",
"description": "A web page containing more details about the algorithm."
"description": "A web page containing more details about the algorithm"
}
},
"required": [
Expand All @@ -95,7 +121,7 @@
"type": "string",
"format": "uri"
},
"description": "A list of Soft Binding Resolution APIs supporting this algorithm."
"description": "A list of Soft Binding Resolution APIs supporting this algorithm"
}
},
"required": [
Expand All @@ -110,6 +136,9 @@
"decodedMediaTypes"
],
"not": {
"properties": {
"encodedMediaTypes": {}
},
"required": [
"encodedMediaTypes"
]
Expand All @@ -120,11 +149,14 @@
"encodedMediaTypes"
],
"not": {
"properties": {
"decodedMediaTypes": {}
},
"required": [
"decodedMediaTypes"
]
}
}
]
}
}
}