- Overview
- Reference Guide
- Setup & Architecture
- Release Notes
- API Reference
-
Integration Guides
-
Signing Capabilities
- Supported Formats and Platforms
- Timestamping
- Windows Signing - SignTool
- Apple Signing
- AppX & MSIX Signing
- Visual Studio ClickOnce
- Jar Signing
- Sign HLK/HCK using CodeSign Secure
- NuGet Signing
- Mage Signing
- Sign OVA/OVF using Encryption Consulting’s Utility Tool
- Utility Tool for code signing
- Container Signing
- PKCS11 Wrapper
- Reproducible Build
- CI/CD Integration
-
Signing Capabilities
Signing
The Signing endpoints sign hashes and verify signatures, serve the PKCS#11 client channel, list client certificate and signing-user mappings, manage reproducible-build signing projects, and accept source code for analysis.
For the corresponding user interface, refer to the Signing Tools section.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /signing/p12_user/ | List client certificate mappings |
| GET | /signing/p12_user_list/ | List client certificates with user detail |
| POST | /signing/pkcs11-api/ | PKCS#11 client channel |
| POST | /signing/sign/ | Sign a hash |
| GET | /signing/signingProjects | List reproducible-build projects |
| POST | /signing/signingProjects | Create a reproducible-build project |
| GET | /signing/signingProjects/{id} | Get a reproducible-build project |
| PUT | /signing/signingProjects/{id} | Replace a reproducible-build project |
| PATCH | /signing/signingProjects/{id} | Update a reproducible-build project |
| GET | /signing/signuser/ | List signing-user mappings |
| POST | /signing/v1/code-submission/ | Submit source code for analysis |
| POST | /signing/verify/ | Verify a signature |
GET /signing/p12_user/
Returns the client authentication certificates registered for signing, with the account each is mapped to.
Example Request
curl -X GET "https://<your domain>/api/signing/p12_user/" \
-H "Authorization: Bearer <token>"
Responses
| Status Code | Description |
|---|---|
| 200 | The requested records. |
GET /signing/p12_user_list/
As the client certificate mapping list, with the account details of each mapped user included.
Example Request
curl -X GET "https://<your domain>/api/signing/p12_user_list/" \
-H "Authorization: Bearer <token>"
Responses
| Status Code | Description |
|---|---|
| 200 | The requested records. |
POST /signing/pkcs11-api/
Transport endpoint for the PKCS#11 client library. Requests are issued by the supplied wrapper rather than composed by hand, and results are reported in the response body, so this endpoint is not usefully exercised from this page.
Note: This endpoint requires a client certificate. It is served over mutual TLS, so it can’t be called from the Swagger API page. Refer to Securing API Access.
Example Request
curl -X POST \
--cert-type P12 --cert client.pfx:CERT_PASSWORD \
-H "Authorization: Bearer YOUR_TOKEN" \
https://<your domain>/api/signing/pkcs11-api/
Responses
| Status Code | Description |
|---|---|
| 200 | The operation completed. |
POST /signing/sign/
Signs a document hash with a managed signing certificate and returns the signature. The hash is computed on the client, so file contents never leave your machine.
Note: This endpoint requires a client certificate. It is served over mutual TLS, so it can’t be called from the Swagger API page. Refer to Securing API Access.
Request Body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
| certificate_name | string | Yes | Name of the signing certificate to use. A key alias may be sent instead. |
| hash | string | Yes | Hash of the content to be signed. |
| codesign_signing_project_id | string | No | Reproducible-build project this signature belongs to. |
| codesign_build_job_id | string | No | Build job reference. |
| signingRequestId | integer | No | Identifier of an approved signing request to sign against. |
Example Request
curl -X POST \
--cert-type P12 --cert client.pfx:CERT_PASSWORD \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"certificate_name":"YOUR_CERTIFICATE","hash":"BASE64_HASH"}' \
https://<your domain>/api/signing/sign/
Responses
| Status Code | Description |
|---|---|
| 200 | The signature, returned as the raw response body rather than as JSON. |
GET /signing/signingProjects
Returns the configured reproducible-build signing projects.
Example Request
curl -X GET "https://<your domain>/api/signing/signingProjects" \
-H "Authorization: Bearer <token>"
Responses
| Status Code | Description |
|---|---|
| 200 | The requested records. |
POST /signing/signingProjects
Registers a signing project and the source repository or build server it builds from. The repository and build server are checked with the credentials supplied before the project is saved. Credentials are stored securely and are never returned by the API. source_code_management_type must currently be git and build_server_type must be jenkins.
Request Body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
| project_name | string | Yes | Project name |
| source_code_management_type | string | Yes | Source code management type |
| git_repository_url | string | Yes | Git repository url |
| git_username | string | Yes | Git username |
| git_allowed_branches | object | No | Git allowed branches |
| environmental_variables | object | No | Environmental variables |
| build_command | string | Yes | Build command |
| build_signer_type | string | Yes | Build signer type |
| build_file_path | string | Yes | Build file path |
| build_server_type | string | Yes | Build server type |
| jenkins_project_url | string | Yes | Jenkins project url |
| jenkins_username | string | Yes | Jenkins username |
| email_recipients | string | Yes | Email recipients |
| created_user | integer | No | Created user |
| created_date | string (date-time) | No | Created date |
| modified_by | integer | No | Modified by |
| git_password | string | Yes | Password or access token for the repository. |
| jenkins_password | string | Yes | Password or API token for the build server. |
Example Request
curl -X POST "https://<your domain>/api/signing/signingProjects" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"project_name":"string","source_code_management_type":"string","git_repository_url":"string","git_username":"string","build_command":"string","build_signer_type":"string","build_file_path":"string","build_server_type":"string","jenkins_project_url":"string","jenkins_username":"string","email_recipients":"string","git_password":"string","jenkins_password":"string"}'
Responses
| Status Code | Description |
|---|---|
| 201 | The operation completed. |
GET /signing/signingProjects/{id}
Returns a single signing project by identifier.
Request Parameters
| Name | Located In | Type | Required | Description |
|---|---|---|---|---|
| id | Path | integer | Yes | A unique integer value identifying this signing project_ table. |
Example Request
curl -X GET "https://<your domain>/api/signing/signingProjects/<id>" \
-H "Authorization: Bearer <token>"
Responses
| Status Code | Description |
|---|---|
| 200 | The requested records. |
PUT /signing/signingProjects/{id}
Replaces a signing project's configuration. Send the full set of fields. The repository and build server are checked again before the change is saved. source_code_management_type must currently be git and build_server_type must be jenkins.
Request Parameters
| Name | Located In | Type | Required | Description |
|---|---|---|---|---|
| id | Path | integer | Yes | A unique integer value identifying this signing project_ table. |
Request Body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
| project_name | string | Yes | Project name |
| source_code_management_type | string | Yes | Source code management type |
| git_repository_url | string | Yes | Git repository url |
| git_username | string | Yes | Git username |
| git_allowed_branches | object | No | Git allowed branches |
| environmental_variables | object | No | Environmental variables |
| build_command | string | Yes | Build command |
| build_signer_type | string | Yes | Build signer type |
| build_file_path | string | Yes | Build file path |
| build_server_type | string | Yes | Build server type |
| jenkins_project_url | string | Yes | Jenkins project url |
| jenkins_username | string | Yes | Jenkins username |
| email_recipients | string | Yes | Email recipients |
| created_user | integer | No | Created user |
| created_date | string (date-time) | No | Created date |
| modified_by | integer | No | Modified by |
| git_password | string | No | New repository password or access token. Omit to keep the stored repository credentials, username included. |
| jenkins_password | string | No | New build server password or API token. Omit to keep the stored build server credentials, username included. |
Example Request
curl -X PUT "https://<your domain>/api/signing/signingProjects/<id>" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"project_name":"string","source_code_management_type":"string","git_repository_url":"string","git_username":"string","build_command":"string","build_signer_type":"string","build_file_path":"string","build_server_type":"string","jenkins_project_url":"string","jenkins_username":"string","email_recipients":"string"}'
Responses
| Status Code | Description |
|---|---|
| 200 | The record after the update. |
PATCH /signing/signingProjects/{id}
Updates selected fields of a signing project. Send only the fields to change.
Request Parameters
| Name | Located In | Type | Required | Description |
|---|---|---|---|---|
| id | Path | integer | Yes | A unique integer value identifying this signing project_ table. |
Request Body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
| project_name | string | Yes | Project name |
| source_code_management_type | string | Yes | Source code management type |
| git_repository_url | string | Yes | Git repository url |
| git_username | string | Yes | Git username |
| git_allowed_branches | object | No | Git allowed branches |
| environmental_variables | object | No | Environmental variables |
| build_command | string | Yes | Build command |
| build_signer_type | string | Yes | Build signer type |
| build_file_path | string | Yes | Build file path |
| build_server_type | string | Yes | Build server type |
| jenkins_project_url | string | Yes | Jenkins project url |
| jenkins_username | string | Yes | Jenkins username |
| email_recipients | string | Yes | Email recipients |
| created_user | integer | No | Created user |
| created_date | string (date-time) | No | Created date |
| modified_by | integer | No | Modified by |
Example Request
curl -X PATCH "https://<your domain>/api/signing/signingProjects/<id>" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"project_name":"string","source_code_management_type":"string","git_repository_url":"string","git_username":"string","build_command":"string","build_signer_type":"string","build_file_path":"string","build_server_type":"string","jenkins_project_url":"string","jenkins_username":"string","email_recipients":"string"}'
Responses
| Status Code | Description |
|---|---|
| 200 | The record after the update. |
GET /signing/signuser/
Returns the mapping between signing client identities and user accounts.
Example Request
curl -X GET "https://<your domain>/api/signing/signuser/" \
-H "Authorization: Bearer <token>"
Responses
| Status Code | Description |
|---|---|
| 200 | The requested records. |
POST /signing/v1/code-submission/
Submits a source archive, and the repository it came from, for vulnerability analysis ahead of signing. Send as multipart/form-data.
Request Body (multipart/form-data)
| Field | Type | Required | Description |
|---|---|---|---|
| github_url | string (uri) | Yes | Repository URL. |
| github_username | string | Yes | Repository account name. |
| github_password | string | Yes | Repository access token. |
| github_email | string (email) | Yes | Repository account email. |
| vulnerability_percentage | number | Yes | Maximum tolerated vulnerability percentage. |
| source_code_zip | file | Yes | Zipped source code. |
| allowed_branch | string | No | Branch to analyse. Defaults to main. |
Example Request
curl -X POST "https://<your domain>/api/signing/v1/code-submission/" \
-H "Authorization: Bearer <token>" \
-F "github_url=<github_url>" \
-F "github_username=<github_username>" \
-F "github_password=<github_password>" \
-F "github_email=<github_email>" \
-F "vulnerability_percentage=<vulnerability_percentage>" \
-F "source_code_zip=@<source_code_zip file>"
Responses
| Status Code | Description |
|---|---|
| 200 | The operation completed. |
POST /signing/verify/
Checks a signature against the content it was produced from and reports whether it is valid.
Note: This endpoint requires a client certificate. It is served over mutual TLS, so it can’t be called from the Swagger API page. Refer to Securing API Access.
Request Body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
| certificate_name | string | Yes | Certificate the signature was produced with. |
| signature | string | Yes | Signature to verify. |
| hash | string | No | Hash of the signed content. |
| content | string | No | Signed content, if a hash is not supplied. |
Example Request
curl -X POST \
--cert-type P12 --cert client.pfx:CERT_PASSWORD \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"certificate_name":"YOUR_CERTIFICATE","hash":"BASE64_HASH","signature":"BASE64_SIGNATURE"}' \
https://<your domain>/api/signing/verify/
Responses
| Status Code | Description |
|---|---|
| 200 | The verification result, returned as the raw response body rather than as JSON. |