Я не знаю, как вы получили полученный результат, но ожидаемый результат выглядит как стандартная ECDSA подпись в ASN.1 / DER кодирование.
Чтобы разбить его:
30
: указывает, что ASN.1 SEQUENCE
будет следовать 44
: длина последовательности, в данном случае 68 байтов 02
: указывает, что ASN.1 INTEGER
будет следовать 20
: указывает длину целого числа, в данном случае 32 байта 55 ... 43
: 32 байта сигнатуры r
значение 02
: указывает, что ASN.1 INTEGER
будет следовать 20
: указывает длину целого числа, в данном случае 32 байта 04 ... 36
: 32 байта значения s
Как я уже сказал, я не уверен, какой тип кодирования используется для того результата, который у вас есть в настоящее время. Кажется, он содержит минимальную информацию, необходимую для извлечения значений r
и s
из байтового массива, но отбрасывает все остальное. (Я подозреваю, что это может быть какой-то вариант кодировки PER или пользовательской схемы кодирования.)
Особенно интересным является тот факт, что индикатор длины для целого числа r
(20
) присутствует в вашем результате. Помимо фактических значений r
и s
, это единственная дополнительная информация, которая строго необходима для успешного анализа подписи. Поскольку r
и s
могут иметь длину 32 или 33 байта, вам нужен один индикатор длины, чтобы знать, где заканчивается r
и начинается s
.