Signatures
Convert a signature between DER and raw r‖s
https://ecdsa.com/api/v1/convertDecodes 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.
- API 密钥
- 可选;密钥需要 api 范围
- 使用密钥时的配额消耗
- 每次调用 1 个单位
- 速率限制
- 每个 IP 每分钟 60 次请求
请求
JSON 请求体:ConvertRequest
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
| signature | string | 是 | DER or raw r‖s signature in hex, base64 or base64url (auto-detected). |
| curve | string | 否 | Curve for sizing and the high-S check; inferred from the length when omitted.
|
| normalize | "low-s" | 否 | Replace a high-S s with its low-S equivalent n − s. |
响应
200Both encodings of the signature.
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
| inputFormat | string | 是 |
|
| curve | string | 是 |
|
| der | object | 是 | |
| der.hex | string | 是 | |
| der.base64 | string | 是 | |
| raw | object | 是 | |
| raw.hex | string | 是 | |
| raw.base64 | string | 是 | |
| raw.base64url | string | 是 | |
| r | string | 是 | r as hex, zero-padded to the curve's component size. |
| s | string | 是 | s as hex (after normalization when requested). |
| highS | boolean | 是 | Whether the returned s is high-S. |
| warnings | string[] | 是 |
响应头: X-Request-Id · X-RateLimit-Limit · X-RateLimit-Remaining · X-RateLimit-Reset · X-Quota-Limit · X-Quota-Remaining · X-Quota-Reset
| 状态码 | 含义 | 错误码 |
|---|---|---|
| 400 | Bad 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. | |
| 401 | Unauthorized. | |
| 403 | Forbidden. | |
| 404 | Not found. | |
| 405 | Method not allowed. | |
| 413 | Payload too large. | |
| 429 | Too many requests. | |
| 500 | Internal server error. | |
| 503 | Service unavailable. | |
| 504 | Gateway timeout. |
每个错误响应都带有 JSON 信封;错误表说明了每个错误码的含义和处理方法。
示例
A DER signature (P-256 size)
curl -sS 'https://ecdsa.com/api/v1/convert' \
-H 'content-type: application/json' \
-d '{
"signature": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131"
}'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());import httpx
response = httpx.post(
"https://ecdsa.com/api/v1/convert",
json={
"signature": "3045022100df542bb71e0e3019086f1b1ba51f1aa0ec5e6afca05c3f5a7f4f02f5b7c39d24022030c59f1ac6d8c6893fb2a5ac8dfd9388d31ebd3382510dcfb7f28f9182eb1131",
},
timeout=30.0,
)
print(response.status_code, response.json()){
"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."
]
}这是 API 对此示例的响应,于2026年10月20日为本页生成;其中的相对时间和天数都以当天为准。
错误码
| 错误码 | 状态码 | 含义 |
|---|---|---|
| invalid_json | 400 | The 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_field | 400 | A required field is absent or empty. |
| invalid_input | 400 | A field could not be parsed — the message explains exactly why. |
| private_key_rejected | 400 | The 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. |
| unauthorized | 401 | The 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_scope | 403 | The API key is valid but lacks a scope this operation requires; the message names it. |
| not_found | 404 | No operation exists at this path. |
| method_not_allowed | 405 | The path exists but does not accept this HTTP method; see the Allow header. |
| payload_too_large | 413 | The body exceeds 100 KB. |
| rate_limited | 429 | Too many requests — see Retry-After. |
| quota_exceeded | 429 | A 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_error | 500 | Unexpected server error. |
| service_unavailable | 503 | API keys cannot be verified right now (the key store is unreachable); retry shortly. |
| timeout | 504 | The operation did not finish within its time budget. |
Schema
Error
The error envelope of every non-2xx response.
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
| error | object | 是 | |
| error.code | string | 是 | 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.message | string | 是 | Human-readable explanation (English). |
| error.requestId | string | 否 | The X-Request-Id of this request — quote it when reporting a problem. Sent since v1.1. |
| error.detail | object | 否 | Structured context for the error, such as the offending field; omitted when there is none.
|
| error.docs | string | 否 | Where the error codes are explained. Sent since v1.1.
|
所有操作都列在 API 参考中。