Пример #1
0
        public async Task <object> SignCMSAsync(string accessToken, string base_URL, InputSignatureAdvanced inputSignatureAdvanced)
        {
            SBUtils.Unit.SetLicenseKey("03D250F599AFD170E8A7410AFE3EAAC635E687187762F9936518B7FA6AEDDB215DF3177560DD647433BEE43711D31EC2B6818C0797C464E7F077467EABB466DE8F21CE77A054C9D3B04B0BA859B4BE8E8B7FCD50D07E2A4CD96240FA1468D8F03CBDE4EB1D2070A4294D2426881EEFBDFFAA7A76747B30A2E0564CA06CD673089318BFBA530E88A26F6FF76E46FE2A5A65C0FBAACB09F9804BC287412E49EE832058643D8A59B8398C7637C3EDE91660E6B696F32AD416F606DB215A2FFF214B5DF58DE27687362740B591D7F3D2D33CE6A3D1601521408511476FA81D374CA32D0443BD710D4D732A8C398A953047EEAB4A62237813DA11FC5E0EBFF1E69A9D");
            pin = inputSignatureAdvanced.PIN; otp = inputSignatureAdvanced.OTP; credentialsID = inputSignatureAdvanced.credentialsID; access_token = accessToken; baseURL = base_URL; hashAlgo = inputSignatureAdvanced.hashAlgo; signAlgo = inputSignatureAdvanced.signAlgo;

            OutputError error = new OutputError()
            {
                error             = "error_pades_signature",
                error_description = "error"
            };

            var filePath = Path.GetTempFileName();

            if (inputSignatureAdvanced.documentStream.Length > 0)
            {
                using (Stream stream = new FileStream(filePath, FileMode.Create))
                {
                    Stream memoryStream = new MemoryStream(inputSignatureAdvanced.documentStream);

                    await memoryStream.CopyToAsync(stream);

                    var msg = new TElSignedCMSMessage();
                    msg.CreateNew(stream, 0, stream.Length);
                    int sigIndex = msg.AddSignature();

                    SBPKCS7Utils.TElPKCS7Attributes pKCS7Attributes = new SBPKCS7Utils.TElPKCS7Attributes();

                    TElCMSSignature signature = msg.get_Signatures(sigIndex);

                    TElX509Certificate certificate = LoadCertificate(credentialsID, access_token);

                    if (hashAlgo == "2.16.840.1.101.3.4.2.1")
                    {
                        signature.DigestAlgorithm = SBConstants.Unit.SB_ALGORITHM_DGST_SHA256;
                    }
                    else
                    {
                        signature.DigestAlgorithm = SBConstants.Unit.SB_ALGORITHM_DGST_SHA1;
                    }

                    signature.SigningOptions = SBCMS.__Global.csoInsertMessageDigests |
                                               SBCMS.__Global.csoIncludeCertToAttributes |
                                               SBCMS.__Global.csoIncludeCertToMessage |
                                               SBCMS.__Global.csoInsertContentType |
                                               SBCMS.__Global.csoInsertSigningTime |
                                               SBCMS.__Global.csoUsePlainContentForTimestampHashes;


                    signature.SigningTime = DateTime.Now;

                    int cID = signature.SigningCertificate.AddCertID();
                    TElCMSSignerIdentifier signerIdentifier = signature.SigningCertificate.get_CertIDs(cID);
                    signerIdentifier.Import(certificate, SBConstants.Unit.SB_ALGORITHM_DGST_SHA1);

                    signature.SigningCertificate.SigningCertificateType = TSBCMSSigningCertificateType.sctESSSigningCertificateV2;
                    signature.SigningCertificate.Included = true;


                    TElCAdESSignatureProcessor processor = new TElCAdESSignatureProcessor();
                    processor.RemoteSigningMode            = true;
                    processor.AllowPartialValidationInfo   = true;
                    processor.ForceCompleteChainValidation = false;
                    processor.ForceSigningCertificateV2    = false;
                    processor.IgnoreChainValidationErrors  = true;
                    processor.OfflineMode = false;
                    processor.SkipValidationTimestampedSignatures = true;


                    processor.Signature     = signature;
                    processor.OnRemoteSign += new TSBCAdESRemoteSignEvent(CAdES_Handler);
                    processor.CreateBES(certificate);



                    var result = new MemoryStream();
                    msg.Save(result);

                    OutputAdvancedSignature output = new OutputAdvancedSignature()
                    {
                        signedDocument = result.GetBuffer()
                    };
                    return(output);
                }
            }
            else
            {
                return(error);
            }
        }
Пример #2
0
        public async Task <object> SignPDFAsync(string accessToken, string base_URL, InputSignatureAdvanced inputSignatureAdvanced)
        {
            SBUtils.Unit.SetLicenseKey("03D250F599AFD170E8A7410AFE3EAAC635E687187762F9936518B7FA6AEDDB215DF3177560DD647433BEE43711D31EC2B6818C0797C464E7F077467EABB466DE8F21CE77A054C9D3B04B0BA859B4BE8E8B7FCD50D07E2A4CD96240FA1468D8F03CBDE4EB1D2070A4294D2426881EEFBDFFAA7A76747B30A2E0564CA06CD673089318BFBA530E88A26F6FF76E46FE2A5A65C0FBAACB09F9804BC287412E49EE832058643D8A59B8398C7637C3EDE91660E6B696F32AD416F606DB215A2FFF214B5DF58DE27687362740B591D7F3D2D33CE6A3D1601521408511476FA81D374CA32D0443BD710D4D732A8C398A953047EEAB4A62237813DA11FC5E0EBFF1E69A9D");
            pin = inputSignatureAdvanced.PIN; otp = inputSignatureAdvanced.OTP; credentialsID = inputSignatureAdvanced.credentialsID; access_token = accessToken; baseURL = base_URL; hashAlgo = inputSignatureAdvanced.hashAlgo; signAlgo = inputSignatureAdvanced.signAlgo;

            OutputError error = new OutputError()
            {
                error             = "error_pades_signature",
                error_description = "error"
            };
            TElPDFDocument document = new TElPDFDocument();

            try
            {
                var filePath = Path.GetTempFileName();
                if (inputSignatureAdvanced.documentStream.Length > 0)
                {
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        Stream memoryStream = new MemoryStream(inputSignatureAdvanced.documentStream);

                        await memoryStream.CopyToAsync(stream);

                        document.Open(stream);
                        try
                        {
                            int index = document.AddSignature();

                            TElPDFSignature signature = document.get_Signatures(index);

                            signature.SigningTime = DateTime.Now;

                            TElPDFAdvancedPublicKeySecurityHandler handler = new TElPDFAdvancedPublicKeySecurityHandler();

                            handler.CustomName = "Adobe.PPKLite";
                            handler.IgnoreChainValidationErrors = true;
                            handler.CertStorage        = LoadCertificate(credentialsID, access_token);
                            handler.PAdESSignatureType = TSBPAdESSignatureType.pastEnhanced;
                            if (hashAlgo == "2.16.840.1.101.3.4.2.1")
                            {
                                handler.HashAlgorithm = SBConstants.__Global.SB_ALGORITHM_DGST_SHA256;
                            }
                            else
                            {
                                handler.HashAlgorithm = SBConstants.__Global.SB_ALGORITHM_DGST_SHA1;
                            }
                            handler.RemoteSigningMode               = true;
                            handler.RemoteSigningCertIndex          = 0;
                            handler.SignatureType                   = TSBPDFPublicKeySignatureType.pstPKCS7SHA1;
                            handler.SignatureSizeEstimationStrategy = TSBPAdESSignatureSizeEstimationStrategy.psesSmart;
                            handler.OnRemoteSign += new TSBPDFRemoteSignEvent(PAdESHandler_OnRemoteSign);

                            signature.Handler = handler;

                            document.Close(true);

                            document.Dispose();
                            stream.Close();
                            stream.Dispose();

                            memoryStream.Close();
                            memoryStream.Dispose();


                            var signedMemory = new MemoryStream();
                            using (FileStream signedStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                            {
                                await signedStream.CopyToAsync(signedMemory);

                                byte[] result = signedMemory.GetBuffer();

                                OutputAdvancedSignature output = new OutputAdvancedSignature()
                                {
                                    signedDocument = result
                                };

                                return(output);
                            }
                        }

                        catch (Exception ex) { return(error); }
                    }
                }
                else
                {
                    return(error);
                }
            }
            catch (Exception ex)
            {
                return(error);
            }
        }
Пример #3
0
        public async Task <object> SignXMLAsync(string accessToken, string base_URL, InputSignatureAdvanced inputSignatureAdvanced)
        {
            SBUtils.Unit.SetLicenseKey("03D250F599AFD170E8A7410AFE3EAAC635E687187762F9936518B7FA6AEDDB215DF3177560DD647433BEE43711D31EC2B6818C0797C464E7F077467EABB466DE8F21CE77A054C9D3B04B0BA859B4BE8E8B7FCD50D07E2A4CD96240FA1468D8F03CBDE4EB1D2070A4294D2426881EEFBDFFAA7A76747B30A2E0564CA06CD673089318BFBA530E88A26F6FF76E46FE2A5A65C0FBAACB09F9804BC287412E49EE832058643D8A59B8398C7637C3EDE91660E6B696F32AD416F606DB215A2FFF214B5DF58DE27687362740B591D7F3D2D33CE6A3D1601521408511476FA81D374CA32D0443BD710D4D732A8C398A953047EEAB4A62237813DA11FC5E0EBFF1E69A9D");
            pin = inputSignatureAdvanced.PIN; otp = inputSignatureAdvanced.OTP; credentialsID = inputSignatureAdvanced.credentialsID; access_token = accessToken; baseURL = base_URL; hashAlgo = inputSignatureAdvanced.hashAlgo; signAlgo = inputSignatureAdvanced.signAlgo;

            OutputError error = new OutputError()
            {
                error             = "error_pades_signature",
                error_description = "error"
            };

            TElXMLDOMDocument document       = new TElXMLDOMDocument();
            TElXMLDOMDocument signedDocument = new TElXMLDOMDocument();

            try
            {
                var filePath = Path.GetTempFileName();
                if (inputSignatureAdvanced.documentStream.Length > 0)
                {
                    using (Stream stream = new FileStream(filePath, FileMode.Create))
                    {
                        Stream memoryStream = new MemoryStream(inputSignatureAdvanced.documentStream);

                        await memoryStream.CopyToAsync(stream);

                        stream.Position = 0;
                        document.LoadFromStream(stream, "ISO-8859-1", true);

                        TElXMLSigner          Signer   = new TElXMLSigner(null);
                        TElXMLKeyInfoX509Data X509Data = new TElXMLKeyInfoX509Data(false);
                        try
                        {
                            Signer.SignatureType          = SBXMLSec.Unit.xstEnveloped;
                            Signer.CanonicalizationMethod = SBXMLDefs.Unit.xcmCanon;
                            Signer.SignatureMethodType    = SBXMLSec.Unit.xmtSig;

                            TElXMLReference Ref = new TElXMLReference();

                            Ref.URI     = "";
                            Ref.URINode = document.DocumentElement;
                            Ref.TransformChain.AddEnvelopedSignatureTransform();

                            if (hashAlgo == "2.16.840.1.101.3.4.2.1")
                            {
                                Signer.SignatureMethod = SBXMLSec.Unit.xsmRSA_SHA256;
                                Ref.DigestMethod       = SBXMLSec.Unit.xdmSHA256;
                            }
                            else
                            {
                                Signer.SignatureMethod = SBXMLSec.Unit.xsmRSA_SHA1;
                                Ref.DigestMethod       = SBXMLSec.Unit.xdmSHA1;
                            }

                            Signer.References.Add(Ref);

                            TElX509Certificate Cert = LoadCertificate(credentialsID, accessToken);
                            X509Data.Certificate = Cert;
                            Signer.KeyData       = X509Data;

                            Signer.UpdateReferencesDigest();
                            Signer.OnRemoteSign += new TSBXMLRemoteSignEvent(XAdESHandler_OnRemoteSign);
                            Signer.GenerateSignature();
                            TElXMLDOMNode node = document.ChildNodes.get_Item(0);

                            Signer.SaveEnveloped(document.DocumentElement);
                            var signedMemory = new MemoryStream();
                            document.SaveToStream(signedMemory);

                            OutputAdvancedSignature output = new OutputAdvancedSignature()
                            {
                                signedDocument = signedMemory.GetBuffer()
                            };

                            Signer.Dispose();
                            X509Data.Dispose();
                            return(output);
                        }
                        catch (Exception ex)
                        {
                            return(error);
                        }
                    }
                }
                else
                {
                    return(error);
                }
            }

            catch (Exception ex)
            {
                return(error);
            }
        }
Пример #4
0
        public async Task <IActionResult> SignData(SignatureModel data, int?cades)
        {
            try
            {
                var filePath = Path.GetTempFileName();
                if (data.inputFile.Length > 0)
                {
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        //METODELE DE SEMNARE DIN API
                        await data.inputFile.CopyToAsync(stream);

                        MemoryStream memoryStream = new MemoryStream();
                        await data.inputFile.CopyToAsync(memoryStream);

                        string hash_algorithm = ""; string sign_algorithm = ""; int signature_type;
                        if (data.algorithm == 1)
                        {
                            hash_algorithm = "2.16.840.1.101.3.4.2.1";
                            sign_algorithm = "1.2.840.113549.1.1.11";
                        }
                        else
                        {
                            hash_algorithm = "1.3.14.3.2.26";
                            sign_algorithm = "1.3.14.3.2.29";
                        }
                        if (data.inputFile.ContentType == "application/pdf")
                        {
                            signature_type = 1;
                        }
                        else if (data.inputFile.ContentType == "text/xml")
                        {
                            signature_type = 2;
                        }
                        else
                        {
                            signature_type = 3;
                        }

                        if (cades == 1)
                        {
                            signature_type = 3;
                        }
                        InputSignatureAdvanced inputSignatureAdvanced = new InputSignatureAdvanced()
                        {
                            credentialsID  = data.credentialsID,
                            hashAlgo       = hash_algorithm,
                            signAlgo       = sign_algorithm,
                            OTP            = data.otp,
                            PIN            = data.pin,
                            signatureType  = signature_type,
                            documentStream = memoryStream.GetBuffer()
                        };
                        var            ceva        = Encoding.UTF8.GetBytes(memoryStream.GetBuffer().ToString());
                        JsonSerializer serializer  = new JsonSerializer();
                        ErrorLogger    errorLogger = new ErrorLogger();
                        string         baseURL     = _configuration.GetSection("CSC_API").GetSection("BaseURL").Value;

                        MyHttpClient myHttpClient = new MyHttpClient(serializer, errorLogger, baseURL);
                        var          response     = myHttpClient.PAdES(_accessToken.GetAccessToken().access_token, inputSignatureAdvanced);
                        if (response == null || response.Contains("error"))
                        {
                            return(RedirectToAction("Index"));
                        }
                        else
                        {
                            //eu primesc byte array
                            OutputAdvancedSignature output = serializer.Deserialize <OutputAdvancedSignature>(response);

                            MemoryStream signedMemory = new MemoryStream(output.signedDocument);

                            signedMemory.Position = 0;
                            if (signature_type == 1)
                            {
                                return(File(signedMemory, "application/pdf", "signed-pdf.pdf"));
                            }
                            else if (signature_type == 2)
                            {
                                return(File(signedMemory, "text/xml", "signed-xml.xml"));
                            }
                            else
                            {
                                return(File(signedMemory, "application/pkcs7-signature", "signed-cms.p7s"));
                            }
                        }
                        //METODELE DE SEMNARE DIN CLIENT

                        // bool flag = false;
                        // MemoryStream memoryxml = new MemoryStream();
                        //if (cades == 1)
                        //{
                        //    MemoryStream memory = new MemoryStream();
                        //    if (data.algorithm == 1)
                        //    {
                        //        //SHA256 RSA
                        //        memory = SBBSignCMS(stream, data.credentialsID, "2.16.840.1.101.3.4.2.1", "1.2.840.113549.1.1.11", data.otp, data.pin);

                        //    }
                        //    else
                        //    {
                        //        //SHA1 RSA
                        //        memory = SBBSignCMS(stream, data.credentialsID, "1.3.14.3.2.26", "1.3.14.3.2.29", data.otp, data.pin);
                        //    }
                        //    if (memory != null)
                        //    {
                        //        memory.Position = 0;
                        //        return File(memory, "application/pkcs7-signature", "test.p7s");
                        //    }
                        //}
                        //else
                        //{
                        //    if (data.inputFile.ContentType == "application/pdf")
                        //    {
                        //        if (data.algorithm == 1)
                        //        {
                        //            //SHA256 RSA
                        //            flag = SBBSignPDF(stream, data.credentialsID, "2.16.840.1.101.3.4.2.1", "1.2.840.113549.1.1.11", data.otp, data.pin);

                        //        }
                        //        else
                        //        {
                        //            //SHA1 RSA
                        //            flag = SBBSignPDF(stream, data.credentialsID, "1.3.14.3.2.26", "1.3.14.3.2.29", data.otp, data.pin);

                        //        }
                        //        stream.Close();
                        //        stream.Dispose();
                        //    }
                        //    else if (data.inputFile.ContentType == "text/xml")
                        //    {
                        //        if (data.algorithm == 1)
                        //        {
                        //            //SHA
                        //            memoryxml = SBBSignXML(stream, data.credentialsID, "2.16.840.1.101.3.4.2.1", "1.2.840.113549.1.1.11", data.otp, data.pin);

                        //        }
                        //        else
                        //        {

                        //            memoryxml = SBBSignXML(stream, data.credentialsID, "1.3.14.3.2.26", "1.3.14.3.2.29", data.otp, data.pin);

                        //        }
                        //    }

                        //    if (flag == true)
                        //    {
                        //        var memory = new MemoryStream();

                        //        using (FileStream signedStrem = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                        //        {
                        //            await signedStrem.CopyToAsync(memory);
                        //        }
                        //        memory.Position = 0;
                        //        return File(memory, "application/pdf", "lorena-signed.pdf");
                        //    }

                        //    if (memoryxml != null)
                        //    {

                        //        memoryxml.Position = 0;
                        //        return File(memoryxml, "text/xml", "lorena-signed.xml");
                        //    }
                        //}
                    }
                }


                else
                {
                    return(RedirectToAction("Index"));
                }
                return(RedirectToAction("Index"));
            }
            catch (Exception ex) { return(RedirectToAction("Index")); }
        }