public SignerInfoGeneratorBuilder NewBuilder()
        {
            SignerInfoGeneratorBuilder builder = new SignerInfoGeneratorBuilder();

            builder.WithSignedAttributeGenerator(signedGen);
            builder.WithUnsignedAttributeGenerator(unsignedGen);
            builder.SetDirectSignature(isDirectSignature);
            return(builder);
        }
        public static string SignCmsGost2012(string data, string tlsNumber, int pin, byte[] rawCertificate, byte[] key)
        {
            var requestBytes = Encoding.UTF8.GetBytes(data);
            var typedData    = new CmsProcessableByteArray(requestBytes);
            var gen          = new CmsSignedDataGenerator();
            var signerInfoGeneratorBuilder = new SignerInfoGeneratorBuilder();

            var attrs      = GetSigningParameters(tlsNumber, pin);
            var parameters = new DefaultSignedAttributeTableGenerator(attrs);

            signerInfoGeneratorBuilder.WithSignedAttributeGenerator(parameters);

            var factory = new Asn1SignatureFactory(SingingAlgorithm, GetKey(key));

            var bcCertificate = GetBankCertificate(rawCertificate);

            gen.AddSignerInfoGenerator(signerInfoGeneratorBuilder.Build(factory, bcCertificate));
            gen.AddCertificates(MakeCertStore(bcCertificate));

            var signed      = gen.Generate(typedData, false);
            var signedBytes = signed.GetEncoded();

            return(Convert.ToBase64String(signedBytes));
        }