Exemplo n.º 1
0
        /// <exception cref="System.IO.IOException"></exception>
        public virtual Stream ToBeSigned(Document document, SignatureParameters parameters
                                         )
        {
            if (parameters.SignaturePackaging != SignaturePackaging.ENVELOPING && parameters
                .SignaturePackaging != SignaturePackaging.DETACHED)
            {
                throw new ArgumentException("Unsupported signature packaging " + parameters.SignaturePackaging);
            }
            //jbonilla - No aplica para C#
            //SignatureInterceptorProvider provider = new SignatureInterceptorProvider();
            //Security.AddProvider(provider);
            //string jsAlgorithm = parameters.GetSignatureAlgorithm().GetJavaSignatureAlgorithm
            //    (parameters.GetDigestAlgorithm());
            //PreComputedContentSigner contentSigner = new PreComputedContentSigner(jsAlgorithm
            //    );
            PreComputedSigner signer = new PreComputedSigner();
            //CmsSignedDataGenerator generator = CreateCMSSignedDataGenerator(contentSigner, digestCalculatorProvider
            //    , parameters, GetSigningProfile(parameters), false, null);
            CmsSignedDataGenerator generator = CreateCMSSignedDataGenerator
                                                   (signer, parameters, GetSigningProfile(parameters), false, null);

            byte[] toBeSigned = Streams.ReadAll(document.OpenStream());
            CmsProcessableByteArray content = new CmsProcessableByteArray(toBeSigned);

            try
            {
                bool includeContent = true;
                if (parameters.SignaturePackaging == SignaturePackaging.DETACHED)
                {
                    includeContent = false;
                }
                CmsSignedData signed = generator.Generate(content, includeContent);

                //jbonilla - El ISigner devuelve el mismo hash sin firmar para permitir
                //la generación de la firma por un medio externo, como un token.
                /*return new ByteArrayInputStream(contentSigner.GetByteOutputStream().ToByteArray());*/
                return(new MemoryStream(signer.CurrentSignature()));
            }
            catch (CmsException e)
            {
                throw new IOException("CmsException", e);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Devuelve los datos finales que deberán ser firmados
        /// </summary>
        /// <param name="content"></param>
        /// <param name="parameters"></param>
        /// <param name="signedData"></param>
        /// <param name="isCounterSignature"></param>
        /// <returns></returns>
        private byte[] ToBeSigned(CmsProcessable content, SignatureParameters parameters, CmsSignedData signedData, bool isCounterSignature)
        {
            PreComputedSigner            preComputedSigner = new PreComputedSigner();
            CustomCMSSignedDataGenerator generator         = CreateSignedGenerator(preComputedSigner, parameters, signedData);

            if (parameters.PreCalculatedDigest != null)
            {
                generator.PreCalculatedDigest = parameters.PreCalculatedDigest;
            }
            else if (content == null)
            {
                // Si el contenido es nulo se intenta buscar el valor de la huella del contenido en las otras firmas
                generator.PreCalculatedDigest = GetDigestValue(signedData.GetSignerInfos(), parameters.DigestMethod);

                if (generator.PreCalculatedDigest == null)
                {
                    throw new Exception("No se ha podido obtener la huella del contenido");
                }
            }

            generator.PreGenerate(!isCounterSignature ? CmsObjectIdentifiers.Data.Id : null, content);

            return(preComputedSigner.CurrentSignature());
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns the final data that must be signed
        /// </summary>
        /// <param name="content"></param>
        /// <param name="parameters"></param>
        /// <param name="signedData"></param>
        /// <param name="isCounterSignature"></param>
        /// <returns></returns>
        private byte[] ToBeSigned(CmsProcessable content, SignatureParameters parameters, CmsSignedData signedData, bool isCounterSignature)
        {
            PreComputedSigner            preComputedSigner = new PreComputedSigner();
            CustomCMSSignedDataGenerator generator         = CreateSignedGenerator(preComputedSigner, parameters, signedData);

            if (parameters.PreCalculatedDigest != null)
            {
                generator.PreCalculatedDigest = parameters.PreCalculatedDigest;
            }
            else if (content == null)
            {
                // If the content is null, try to find the value of the content footprint in the other firms
                generator.PreCalculatedDigest = GetDigestValue(signedData.GetSignerInfos(), parameters.DigestMethod);

                if (generator.PreCalculatedDigest == null)
                {
                    throw new Exception("Could not get the footprint of the content");
                }
            }

            generator.PreGenerate(!isCounterSignature ? CmsObjectIdentifiers.Data.Id : null, content);

            return(preComputedSigner.CurrentSignature());
        }