Я хочу создать приложение Google Go, которое сможет DER кодировать и декодировать большие целые числа (а именно ECDSA signature r and s). Насколько я понимаю, я должен использовать asn1 package, но какие функции мне следует звонить?Go, DER и обработка больших целых чисел
Например, я хочу, чтобы закодировать
316eb3cad8b66fcf1494a6e6f9542c3555addbf337f04b62bf4758483fdc881d
и
bf46d26cef45d998a2cb5d2d0b8342d70973fa7c3c37ae72234696524b2bc812
, чтобы получить это:
30450220316eb3cad8b66fcf1494a6e6f9542c3555addbf337f04b62bf4758483fdc881d022100bf46d26cef45d998a2cb5d2d0b8342d70973fa7c3c37ae72234696524b2bc81201
и наоборот. Какую функцию я должен вызывать для кодирования, и которая для декодирования и как?
Хм, закодированное сообщение, кажется, отсутствует в 01 байт в конце. – ThePiachu
Действительно, вы правы. Я не заметил этого окончательного «01», но я не думаю, что это правильная кодировка ASN.1 DER. Закодированное сообщение начинается с «0x30 0x45»: 0x30 - это универсальная метка SEQUENCE, а 0x45 - длина последовательности (исключение тега и длины); если вы читаете 69 байтов (0x45 в десятичной форме) в последовательности, вы получаете все данные, кроме окончательного «01». – Jcs
Хм, может быть, это байт, специфичный для реализации, в котором используется кодировка. Уже обсуждая это здесь - http://bitcoin.stackexchange.com/questions/2376/ecdsa-rs-encoding-as-a-signature – ThePiachu