Приветствую! *** Искандаров Эдуард [2023-08-07 13:54]: >Хочется чтобы библиотека GoGOST предлагала функции для big-endian >систем тоже. По моему, вы что-то путаете в терминологии. GoGOST должен из коробки работать и на big-endian системах тоже. math/big.Int (вы пишете "int.Big", но, видимо, это опечатка) никакого отношения к endianness систем не имеет: это библиотека для работы с "большими" числами, варьируемой длины, выходящей за пределы размера машинного слова. Кроме того, текущая функция проверки подписи PublicKey.VerifyDigest как-раз и ожидает что и digest, и r и s будут big-endian (сериализованными) числами. >func NewPublicFromCoords(c *Curve, x *int.Big, y *int.Big) Это можно сделать так: gost3410.PublicKey{C: c, X: x, Y: y}. >func (pub *PublicKey) VerifyDigestByParams(digest *int.Big, r *int.Big, >s *int.Big) (bool, error) { > >В тоже время, это упростит клиентский код(в моем случае точно) тем, что >не придется провоить избыточную сериализацию и десериализацию. Вариант с передачей big.Int мне не нравится тем, что это всегда будет означать наличие дополнительного кода у клиента, ведь он должен же будет из байт получить big.Int. То есть, или мы заставляем клиента (пользователя библиотека) писать какой-то дополнительный код и добавляем больше функций в GoGOST. Или же, как это было до сих пор, мы не трогаем библиотеку и клиента опционально (возможно ему не нужно будет делать никакого преобразования endiannes/форматов) заставляем писать код для верчения байт. Ваш вариант позволяет только сэкономить на верчении нескольких десятков байт, что сущие доли копеек по сравнению с тысячами куда более тяжёлых инструкций затрачиваемых при создании/проверке подписи. Когда-то я добавлял PrivateKeyReverseDigest и PrivateKeyReverseDigestAndSignature обёртки, которые удовлетворяли интерфейсу crypto.Signer и могли сразу же использоваться для разных задач. Сегодня выпустил GoGOST 5.13.0 релиз, в котором добавил gost3410.PublicKeyReverseDigest и gost3410.PublicKeyReverseDigestAndSignature, упрощающие проверку подписи если необходимо "перевернуть" или хэш и подпись. Это не покрывает кучу всех возможных вариаций подписи ( LE digest + LE RS, LE digest + LE SR, LE digest + BE RS, LE digest + BE SR BE digest + LE RS, BE digest + LE SR, BE digest + BE RS, BE digest + BE SR), но для задач X.509+TLS 1.3 оказалось достаточно. Если эти функции не подойдут, то я не вижу проблем перетасовать несколько десятков байт. http://www.git.cypherpunks.ru/?p=gostls13.git;a=commitdiff;h=99b9696abaa2f8c999c5f438013b9083503c32ce Также добавил NewPublicKeyLE/BE, NewPrivateKeyLE/BE и RawLE/BE методы у этих объектов. -- Sergey Matveev (http://www.stargrave.org/) OpenPGP: 12AD 3268 9C66 0D42 6967 FD75 CB82 0563 2107 AD8A