Я работаю через деталь байт уровня Bitcoin операций и мне нужна помощь по DER-кодировке.
Я понимаю, как (вручную) подписать сделку, чтобы определить пару сигнатуры (г, s), но я не понимаю, как я беру эти два 256-битных числа и упаковать их в правильном порядке и с правильной прокладкой для DER ,
Например, вот два входа в сделке, что я думаю, что должен иметь сценарии подписи одинаковой длины, но они этого не делают. Разница обведены красным (есть 33 байта в первом компоненте подписи для входа 2 вместо 32).
я нашел это отличная статья сырых сделки Bitcoin Кена Shirriff. Вот таблица, Кен сделал объяснить упаковку на уровне байтов:
Хотя это было очень полезно, я думаю, что некоторые вещи, которые не ясны. Например:
- Вы не может думать о подписи в качестве точки кривой (х, у), не так ли? Подпись представляет собой пару 256-битные числа (R, S), а не точка на secp256k1.
- Разве я наценка изображения правильно (г предшествует с)?
- Если я знаю, г и с, как 256-битными целыми числами (большие числа), как в точку я DER кодировать их?
В стороне: Кроме DER быть стандартным форматом OpenSSL, действительно ли есть какие-либо преимущества для кодирования DER? Мне кажется, мы могли бы просто упаковать г и с и имеют все подписи длинные ровно 64 байт.