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); } }
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); } }
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); } }
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")); } }