Saltar al contenido
ecdsa.com

Signatures

Convert a signature between DER and raw r‖s

POSThttps://ecdsa.com/api/v1/convert

Decodes a signature (DER or raw, auto-detected; hex/base64/base64url) and returns both encodings plus r, s and the high-S flag. normalize: "low-s" replaces a high-S s with n − s. Warnings list DER canonicality deviations (BER lengths, missing 0x00 pads, trailing bytes) and curve-ambiguity notes.

Clave de API
Opcional; una clave necesita el ámbito api
Consumo de cuota con clave
1 unidad por llamada
Límite de frecuencia
60 solicitudes/min por IP

Solicitud

Cuerpo JSON: ConvertRequest

CampoTipoObligatorioDescripción
signaturestringsí

DER or raw r‖s signature in hex, base64 or base64url (auto-detected).

curvestringno

Curve for sizing and the high-S check; inferred from the length when omitted.

  • uno de "P-256", "secp256k1", "P-384" o "P-521"
normalize"low-s"no

Replace a high-S s with its low-S equivalent n − s.

Respuestas

200Both encodings of the signature.

CampoTipoObligatorioDescripción
inputFormatstringsí
  • uno de "der" o "raw"
curvestringsí
  • uno de "P-256", "secp256k1", "P-384" o "P-521"
derobjectsí
der.hexstringsí
der.base64stringsí
rawobjectsí
raw.hexstringsí
raw.base64stringsí
raw.base64urlstringsí
rstringsí

r as hex, zero-padded to the curve's component size.

sstringsí

s as hex (after normalization when requested).

highSbooleansí

Whether the returned s is high-S.

warningsstring[]sí

Encabezados: X-Request-Id · X-RateLimit-Limit · X-RateLimit-Remaining · X-RateLimit-Reset · X-Quota-Limit · X-Quota-Remaining · X-Quota-Reset

EstadoSignificadoCódigos
400Bad request. Input limits: a request body of at most 100 KB (a larger one is answered with 413) and arrays and objects nested at most 64 levels deep, JSON documents inside string fields included.
401Unauthorized.
403Forbidden.
404Not found.
405Method not allowed.
413Payload too large.
429Too many requests.
500Internal server error.
503Service unavailable.
504Gateway timeout.

Todas las respuestas de error incluyen el sobre JSON; la tabla de errores explica qué significa cada código y qué hacer.

Ejemplo

A DER signature (P-256 size)

curl
curl -sS 'https://ecdsa.com/api/v1/convert' \
  -H 'content-type: application/json' \
  -d '{
  "signature": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131"
}'
JavaScript (fetch)
const response = await fetch("https://ecdsa.com/api/v1/convert", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    "signature": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131"
  }),
});
console.log(response.status, await response.json());
Python (httpx)
import httpx

response = httpx.post(
    "https://ecdsa.com/api/v1/convert",
    json={
        "signature": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131",
    },
    timeout=30.0,
)
print(response.status_code, response.json())
Respuesta 200
{
  "inputFormat": "der",
  "curve": "P-256",
  "der": {
    "hex": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131",
    "base64": "MEUCIQDfVCu3Hg4wGQhvGxulHxqg7F5q/KBcP1p/TwL1t8OdJAIgMMWfGsbYxok/sqWsjf2TiNMevTOCUQ3Pt/KPkYLrETE="
  },
  "raw": {
    "hex": "df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d2430c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131",
    "base64": "31Qrtx4OMBkIbxsbpR8aoOxeavygXD9af08C9bfDnSQwxZ8axtjGiT+ypayN/ZOI0x69M4JRDc+38o+RgusRMQ==",
    "base64url": "31Qrtx4OMBkIbxsbpR8aoOxeavygXD9af08C9bfDnSQwxZ8axtjGiT-ypayN_ZOI0x69M4JRDc-38o-RgusRMQ"
  },
  "r": "df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24",
  "s": "30c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131",
  "highS": false,
  "warnings": [
    "The DER components fit P-256 and secp256k1; P-256 was assumed for the high-S check — pass \"curve\" to be explicit."
  ]
}

La respuesta de la API a este ejemplo, generada para esta página el 20 de octubre de 2026; los tiempos relativos y los recuentos de días que contiene se refieren a ese día.

Códigos de error

CódigoEstadoSignificado
invalid_json400The body is not valid JSON or not a JSON object; or the input nests arrays and objects more than 64 levels deep (JSON documents inside string fields count too), or is too complex to inspect for private keys.
missing_field400A required field is absent or empty.
invalid_input400A field could not be parsed — the message explains exactly why.
private_key_rejected400The request contains private-key material (a PEM PRIVATE KEY block, an OpenSSH, SSH2 or PuTTY private key, or a JWK with "d"). Never send private keys anywhere.
unauthorized401The Authorization or X-API-Key header is malformed, the API key is not valid (wrong checksum, unknown, revoked or expired), or the operation needs a key.
forbidden_scope403The API key is valid but lacks a scope this operation requires; the message names it.
not_found404No operation exists at this path.
method_not_allowed405The path exists but does not accept this HTTP method; see the Allow header.
payload_too_large413The body exceeds 100 KB.
rate_limited429Too many requests — see Retry-After.
quota_exceeded429A daily or monthly quota of the API key's account is used up. X-Quota-Reset (and Retry-After) say when it starts over; retrying earlier cannot succeed.
internal_error500Unexpected server error.
service_unavailable503API keys cannot be verified right now (the key store is unreachable); retry shortly.
timeout504The operation did not finish within its time budget.

Esquemas

Error

The error envelope of every non-2xx response.

CampoTipoObligatorioDescripción
errorobjectsí
error.codestringsí

Machine-readable error code. Each response lists the codes it can carry; new codes may be added within v1, so treat an unknown code by its HTTP status.

error.messagestringsí

Human-readable explanation (English).

error.requestIdstringno

The X-Request-Id of this request — quote it when reporting a problem. Sent since v1.1.

error.detailobjectno

Structured context for the error, such as the offending field; omitted when there is none.

  • cualquier nombre de miembro
error.docsstringno

Where the error codes are explained. Sent since v1.1.

  • formato uri

Todas las operaciones aparecen en la referencia de la API.