Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.64 KB | None | 0 0
  1. public static X509Certificate2Collection SelecionarCertificado(string serial)
  2. {
  3. X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
  4. var Key = new RSACryptoServiceProvider();
  5. store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
  6. X509Certificate2Collection collection = store.Certificates;
  7. X509Certificate2Collection fcollection = collection.Find(X509FindType.FindBySerialNumber, serial, true);
  8.  
  9. return fcollection;
  10. }
  11.  
  12. public static RSACryptoServiceProvider LerDispositivo(RSACryptoServiceProvider key, string PIN)
  13. {
  14. CspParameters csp = new CspParameters(key.CspKeyContainerInfo.ProviderType, key.CspKeyContainerInfo.ProviderName);
  15. SecureString ss = new SecureString();
  16. foreach (char a in PIN)
  17. {
  18. ss.AppendChar(a);
  19. }
  20. csp.ProviderName = key.CspKeyContainerInfo.ProviderName;
  21. csp.ProviderType = key.CspKeyContainerInfo.ProviderType;
  22. csp.KeyNumber = key.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange ? 1 : 2;
  23. csp.KeyContainerName = key.CspKeyContainerInfo.KeyContainerName;
  24. csp.KeyPassword = ss;
  25. csp.Flags = CspProviderFlags.NoPrompt | CspProviderFlags.UseDefaultKeyContainer;
  26.  
  27. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
  28. return rsa;
  29. }
  30.  
  31. X509Certificate2Collection collection = Certificados.SelecionarCertificado(serial);
  32.  
  33. if (collection.Count == 1)
  34. {
  35. X509Certificate2 x509Cert = collection[0];
  36.  
  37. StreamReader SR = null;
  38.  
  39. try
  40. {
  41. SR = System.IO.File.OpenText(arquivo);
  42. string xmlString = SR.ReadToEnd();
  43. SR.Close();
  44. SR = null;
  45.  
  46. XmlDocument doc = new XmlDocument();
  47.  
  48. doc.PreserveWhitespace = false;
  49.  
  50. doc.LoadXml(xmlString);
  51.  
  52. if (doc.GetElementsByTagName(tagAssinatura).Count == 0)
  53. {
  54. resultado.Result = false;
  55. resultado.Mensagem = $"A tag de assinatura {tagAssinatura.Trim()} não existe no XML. (Código do Erro: 5)";
  56.  
  57. Console.WriteLine(resultado.Mensagem);
  58.  
  59. return resultado;
  60. //throw new Exception($"A tag de assinatura {tagAssinatura.Trim()} não existe no XML. (Código do Erro: 5)");
  61. }
  62. else if (doc.GetElementsByTagName(tagAtributoId).Count == 0)
  63. {
  64. resultado.Result = false;
  65. resultado.Mensagem = $"A tag de assinatura {tagAtributoId.Trim()} não existe no XML. (Código do Erro: 4)";
  66.  
  67. Console.WriteLine(resultado.Mensagem);
  68.  
  69. return resultado;
  70. //throw new Exception($"A tag de assinatura {tagAtributoId.Trim()} não existe no XML. (Código do Erro: 4)");
  71. }
  72. else
  73. {
  74. XmlDocument XMLDoc;
  75.  
  76. XmlNodeList lists = doc.GetElementsByTagName(tagAssinatura);
  77. foreach (XmlNode nodes in lists)
  78. {
  79. foreach (XmlNode childNodes in nodes.ChildNodes)
  80. {
  81. if (!childNodes.Name.Equals(tagAtributoId))
  82. continue;
  83.  
  84. if (childNodes.NextSibling != null && childNodes.NextSibling.Name.Equals("Signature"))
  85. continue;
  86.  
  87. Reference reference = new Reference("");
  88. reference.Uri = "";
  89.  
  90. XmlElement childElemen = (XmlElement)childNodes;
  91. if (childElemen.GetAttributeNode("Id") != null)
  92. {
  93. reference.Uri = "#" + "RPS" + numeroRPS.ToString().PadLeft(15, '0');
  94. }
  95. else if (childElemen.GetAttributeNode("id") != null)
  96. {
  97. reference.Uri = "#" + childElemen.GetAttributeNode("id").Value;
  98. }
  99.  
  100. SignedXml signedXml = new SignedXml(doc);
  101.  
  102.  
  103. KeyInfo keyInfo = new KeyInfo();
  104.  
  105. signedXml.KeyInfo = keyInfo;
  106. //signedXml.SigningKey = x509Cert.PrivateKey;
  107. RSACryptoServiceProvider Key = new RSACryptoServiceProvider();
  108. Key = (System.Security.Cryptography.RSACryptoServiceProvider)x509Cert.PrivateKey;
  109. signedXml.SigningKey = x509Cert.PrivateKey;
  110. signedXml.SigningKey = Certificados.LerDispositivo(Key, PIN);
  111. signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url;
  112. reference.DigestMethod = SignedXml.XmlDsigSHA1Url;
  113.  
  114.  
  115. XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
  116. reference.AddTransform(env);
  117. XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
  118. reference.AddTransform(c14);
  119.  
  120. signedXml.AddReference(reference);
  121.  
  122. keyInfo.AddClause(new KeyInfoX509Data(x509Cert));
  123.  
  124. signedXml.KeyInfo = keyInfo;
  125. signedXml.ComputeSignature();
  126.  
  127. XmlElement xmlDigitalSignature = signedXml.GetXml();
  128.  
  129. nodes.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
  130.  
  131. }
  132. }
  133.  
  134. XMLDoc = new XmlDocument();
  135. XMLDoc.PreserveWhitespace = false;
  136. XMLDoc = doc;
  137. string conteudoXMLAssinado = XMLDoc.OuterXml;
  138. using (StreamWriter sw = System.IO.File.CreateText(arquivo))
  139. {
  140. sw.Write(conteudoXMLAssinado);
  141. sw.Flush();
  142. sw.Close();
  143. }
  144.  
  145. resultado.Result = true;
  146. resultado.Mensagem = $"Procecesso de assinatura efetuado com sucesso!!!";
  147.  
  148. Console.WriteLine(resultado.Mensagem);
  149.  
  150. return resultado;
  151. }
  152.  
  153. var assinarL = await client.AssinarXmlAsync(empresa.Caminho + "\NFSe-LOTE" + model.IdLote.ToString().PadLeft(15, '0') + ".xml", "EnviarLoteRpsSincronoEnvio", "LoteRps", empresa.Serial, model.IdLote.ToString(), empresa.Pin);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement