Обработчик, формирующий подписи (signer)

Обработчик, формирующий подписи используется для получения подписи(ей) транзакции при тратах с виртуальных адресов.
Входящие данные:
cryptocurrencyapi.net - номер версии (больше или равен 3)
chain
currency
type - тип заявки отправки
from
to
amount
fee
label
*raw - сформированная перед подписью транзакция в hex виде
toSign - массив хешей и адресов для подписи
{
hash1 = address1
..
hashN = addressN
}
sign - подпись (хеш данных) для проверки подлинности (см. Алгоритм проверки данных IPN)

Пример входящих данных:
[cryptocurrencyapi.net] = 3
[chain] = ethereum
[currency] = ETH
[type] = out
[from] = 0xdb0dc469696762a517bcaf451b5e3a1cd0a62d5b
[to] = 0xa74311ce794c5d443e6b6d3954b73cc82d0e720f
[amount] = 0.010000
[fee] = 0.00040719
[label] = manually
[raw] = eb80850483bbeb8082520894a74311ce794c5d443e6b6d3954b63cc82d0e730f872386f26fc1000080018080
[toSign] = {
   [a52e0c04e44a193c4bc95642a8d629527049194f63339c515c5cdf5c277cee3e] = 0xdb0dc469696762a517bcaf451b5e3a1cd0a62d5b
}
[sign] = d81211c019e9918c7410b54d946a27a5480df614


Ответ массив хешей и подписей: (в формате JSON)
{
hash1 = sign1
..
hashN = signN
}

Пример ответа:
{"a52e0c04e44a193c4bc95642a8d629527049194f63339c515c5cdf5c277cee3e":"68c13ebe5353f8f6c40c2bb95cddd9dd78624f8623cdf6e8e88e572d437f00d2557d7465da80b70126d60a148a50acd4f816298a38b5ad7babcdf7a0d39f27cb1b"}

Для Bitcoin-like блокчейнов используется короткая или длинная подпись.
Формат короткой подписи (65 байт): R . S . Recovery (0x1B или 0x1С).
Формат длинной подписи (70-72 байта): 0x30 . LD . 0x02 . LR . R . 0x02 . LS . S
Пример:
toSign: 9ec7a7252413a8822c06a9f6d7e072c53f96cb936cd9ee5dd966f398b0bfcc75
privateKey #1: 48e6222b8ea1122557da2dc6ee2f97ca9f63d47013ab024f75e8b2caf79363b2
Sign #1: 298717114ed0c21c3cd9e6c3725f3fdec86402df5d14643a5fad5e6379e6b62c634f880f4e1c65c93c159bbf5d13fb3877266257e32a1aff708dd510f401d6f81c
SignLong #1: 30440220298717114ed0c21c3cd9e6c3725f3fdec86402df5d14643a5fad5e6379e6b62c0220634f880f4e1c65c93c159bbf5d13fb3877266257e32a1aff708dd510f401d6f8

Как видно, длинная подпись содержит те же данные R и S, только в другом формате.
Короткая подпись:
R: 298717114ed0c21c3cd9e6c3725f3fdec86402df5d14643a5fad5e6379e6b62c
S: 634f880f4e1c65c93c159bbf5d13fb3877266257e32a1aff708dd510f401d6f8
Recovery: 1c (1+27)

Длинная подпись:
0x30 - сигнатура DER подписи
0x44 - длина данных (LD)
0x02 - сигнатура R
0x20 - длина R (LR)
R: 298717114ed0c21c3cd9e6c3725f3fdec86402df5d14643a5fad5e6379e6b62c
0x02 - сигнатура S
0x20 - длина S (LS)
S: 634f880f4e1c65c93c159bbf5d13fb3877266257e32a1aff708dd510f401d6f8


Для остальных блокчейнов [Ethereum] [Polygon] [Binance Smart Chain] [TRON] используется только короткая подпись.
Пример:
toSign: 9ec7a7252413a8822c06a9f6d7e072c53f96cb936cd9ee5dd966f398b0bfcc75
privateKey #2: cda83775ba48e7721c44d1d1418fc11cc15807b2036cb946f1d9b4e4415f13e0
Sign #2: fdf109b4c7d1e13c505602c83418cc1d5692507e8605cb995d00de0f10c24b65552c28a59aec292e6a7f4b1d560bd48e761f8a89cb661a3ef6054d68fc44be891b