Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Дмитрий007007  
#1 Оставлено : 2 июня 2023 г. 15:00:07(UTC)
Дмитрий007007

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.05.2023(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 2 раз
Добрый день
Пытаюсь подписать pdf документ средствами libcore
Код:

      public byte[] Sign(string thumbprint, byte[] bytes, int signatureFieldNumber, bool silent = true,
            CancellationToken token = default)
        {
            var certCollection = _store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);

            if (!certCollection.Any())
                throw new CryptoProException($"Не найден сертификат {thumbprint}");

            var cert = certCollection[0];

            
            if (cert is null)
                throw new CryptoProException($"Не найден сертификат {thumbprint}");

            using (MemoryStream output = new())
            {
                using (var reader = new PdfReader(bytes))
                {
                    PdfStamper st = PdfStamper.CreateSignature(reader, output, '\0', null, true);

                    PdfSignatureAppearance sap = st.SignatureAppearance;

                    // Формируем штампик
                    X509CertificateParser parser = new X509CertificateParser();
                    Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] {
                        parser.ReadCertificate(cert.RawData)
                    };

                    sap.Certificate = parser.ReadCertificate(cert.RawData);
                    sap.Layer2Text = GetSignText(cert);
                    sap.Layer2Font = GetFont();
                    sap.Image = GetImage();
                    sap.SetVisibleSignature(GetRectangle(signatureFieldNumber), reader.NumberOfPages,
                        signatureFieldNumber.ToString());

                    IExternalSignature exSig = new MainSignature(cert.PrivateKey);

                    MakeSignature.SignDetached(sap, exSig, chain, null, null, null, 0, CryptoStandard.CMS);

                    return output.ToArray();
                }
            }
        }


Код:

public class MainSignature : IExternalSignature
        {
            private AsymmetricAlgorithm _alg;
            public MainSignature(AsymmetricAlgorithm alg)
            {
                _alg = alg;
            }

            public byte[] Sign(byte[] message)
            {
                var privateKey = _alg as Gost3410_2012_256CryptoServiceProvider;

                return privateKey.SignData(
                    message,
                    CpHashAlgorithmName.Gost3411_2012_256);
            }

            public String GetHashAlgorithm()
            {
                return "GOST3411";
            }

            public String GetEncryptionAlgorithm()
            {
                return "RSA";
            }
        }

В результате получаю подписанный документ, но с ошибками signEr.jpg (61kb) загружен 7 раз(а).

Скрин сертификата:
scrin.png (12kb) загружен 7 раз(а).
Подскажите, в чем может быть ошибка?
Offline Артём Макаров  
#2 Оставлено : 5 июня 2023 г. 18:27:57(UTC)
Артём Макаров

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Добрый день.

Что делает функция "SignDetached"? Как используется "MainSignature"? Судя по коду он формирует "сырую" подпись, для pdf нужна только cms подпись, если только вы не собираете сами ASN1 структуру.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.