Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ComputeSignature не формирует cades-bes подпись #41

Open
mshamito opened this issue Jan 13, 2021 · 5 comments
Open

ComputeSignature не формирует cades-bes подпись #41

mshamito opened this issue Jan 13, 2021 · 5 comments
Labels
enhancement New feature or request

Comments

@mshamito
Copy link

debian 10, csp 5.0.11998
при использовании ComputeSignature в подписи отсутствуют необходимые обязательные подписанные аттрибуты cades-bes.
время подписания можно добавить указав
cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
но для добавления подписанного аттрибута Signing certificate V2 (1.2.840.113549.1.9.16.2.47) нет удобных способов

@maxdm
Copy link
Collaborator

maxdm commented Jan 13, 2021

Спасибо, за замечание.
Мы начали перенос в capilite магии из Windows, думаю, через пару месяцев будет готово для Linux в рамках предварительной версии КриптоПро CSP 5r3.

@tolyanich
Copy link

Создание аттрибутов нужно в сам Net Core добавлять. Т.к. из нативного кода там вызывается CryptSignHash и он не знает ни чего про CMS.

@maxdm
Copy link
Collaborator

maxdm commented Jan 13, 2021

Да, родной .NET меня ввёл в заблуждение. В .NET Core работа с CMS сделана не через CryptMsg, поэтому магия не срабатывает. В capilite она уже есть.

@mshamito
Copy link
Author

спасибо. единственное рабочее решение которое нашел: делать cades-bes через p/invoke libcades.so
но кол-во кода выростает в разы. особенно если нужно только cades-bes.
было бы удобно если бы существовал интерфейс от Крипто-Про который к примеру возвращал объекты AsnEncodedData/CryptographicAttributeObject для последующего добавления их в cmsSigner.SignedAttributes.Add()

@tolyanich tolyanich added the enhancement New feature or request label Jan 13, 2021
@mshamito
Copy link
Author

Удобнее кодировать аттрибут через Bouncy Castle.
если не ветвить код на алгоритмы, то примерно выглядит так:

        static AsnEncodedData SigningCertV2(X509Certificate2 cert)
        {
            var bouncyCert = new Org.BouncyCastle.X509.X509CertificateParser().ReadCertificate(cert.GetRawCertData());
            HashAlgorithm gost = new Gost3411_2012_256CryptoServiceProvider();
            byte[] hashValue = gost.ComputeHash(cert.RawData);
            EssCertIDv2 essCertIDv2 = new EssCertIDv2(
                //P.S. using AlgorithmIdentifier = Org.BouncyCastle.Asn1.X509.AlgorithmIdentifier;
                new AlgorithmIdentifier("1.2.643.7.1.1.2.2"), //szOID_CP_GOST_R3411_12_256
                hashValue,
                new IssuerSerial(
                    new GeneralNames(new GeneralName(bouncyCert.IssuerDN)),
                    new DerInteger(new BigInteger(bouncyCert.SerialNumber.ToString()))
                    )
            );
            SigningCertificateV2 signingCertificateV2 = new SigningCertificateV2(essCertIDv2);
            return new AsnEncodedData(new Oid("1.2.840.113549.1.9.16.2.47"), signingCertificateV2.GetEncoded());
        }

будет ли в будущем использоваться BC как в JCP?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants