assinar xml

Boa dia a todos, por favor estou tentando fazer uma assinatura digital em um XML, e esta dando super certo com a ajuda do exemples que Chris Glazier e Altair Borges me enviaram, porem esta assinando com o algoritimo RSA-SHA1 mas eu preciso assinar com algoritimo RSA-SHA256, eu achei um exemplo que eu acredite que seja o que eu preciso conforme esta abaixo em C#, mas não estou conseguindo converter o Visual COBOL for Visual Studio, se alguém conseguir me ajudar ficarei muito agradecido.

 

atenciosamente

 

Renato Soares Vieira

 

using System; using System.Security.Cryptography; class RSASample { static void Main() { try { //Create a new instance of RSACryptoServiceProvider. using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { //The hash to sign. byte[] hash; using (SHA256 sha256 = SHA256.Create()) { byte[] data = new byte[] { 59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135 }; hash = sha256.ComputeHash(data); } //Create an RSASignatureFormatter object and pass it the //RSACryptoServiceProvider to transfer the key information. RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(rsa); //Set the hash algorithm to SHA256. RSAFormatter.SetHashAlgorithm("SHA256"); //Create a signature for HashValue and return it. byte[] SignedHash = RSAFormatter.CreateSignature(hash); } } catch (CryptographicException e) { Console.WriteLine(e.Message); } } }

Parents
  • This would look something like the following in COBOL:

     

          $set ilusing"System.Xml"
          $set ilusing"System.Security.Cryptography"
          $set ilusing"System.Security.Cryptography.Xml"
          $set ilusing"System.Security.Cryptography.X509Certificates"
          $set ilusing"System.Deployment.Internal.CodeSigning"
           class-id myclass.
           method-id SignDocument static.
           procedure division using doc as type XmlDocument
    		                  returning retdoc as type XmlDocument.
           
                declare signatureCanonicalizationMethod as string = "www.w3.org/.../xml-exc-c14n
                declare signatureMethod as string = "www.w3.org/.../xmldsig-more
                declare digestMethod as string = "www.w3.org/.../xmlenc
    	    declare signatureReferenceURI as string = "#_73e63a41-156d-4fda-a26c-8d79dcade713"
                invoke type CryptoConfig::AddAlgorithm(type of type RSAPKCS1SHA256SignatureDescription, signatureMethod)
    	    declare signingCertificate = self::GetCertificate
    	    declare signer as type SignedXml = new SignedXml(doc)
                set signer::SigningKey = signingCertificate::PrivateKey
                set signer::KeyInfo = new KeyInfo
                invoke signer::KeyInfo::AddClause(new KeyInfoX509Data(signingCertificate))
    	    set signer::SignedInfo::CanonicalizationMethod = signatureCanonicalizationMethod
                set signer::SignedInfo::SignatureMethod = signatureMethod
    	    declare envelopeTransform as type XmlDsigEnvelopedSignatureTransform = new XmlDsigEnvelopedSignatureTransform
                declare cn14Transform as type XmlDsigExcC14NTransform = new XmlDsigExcC14NTransform
                declare signatureReference as type Reference = new Reference
                set signatureReference::Uri = signatureReferenceURI
                invoke signatureReference::AddTransform(envelopeTransform)
                invoke signatureReference::AddTransform(cn14Transform)
                set signatureReference::DigestMethod = digestMethod
    	    invoke signer::AddReference(signatureReference)
    	    invoke signer::ComputeSignature
                declare signatureElement as type XmlElement = signer::GetXml
    	    invoke doc::DocumentElement::AppendChild(signer::GetXml())
    	    set retdoc to doc
            
    	    goback.
    
           end method.
           method-id GetCertificate private static.
           procedure division returning retcertificate as type X509Certificate2.
           
               declare store as type X509Store = new X509Store(type StoreName::My, type StoreLocation::LocalMachine)
               invoke store::Open(type OpenFlags::ReadOnly)
               declare card as type X509Certificate2 = null
               perform varying cert as type X509Certificate2 thru store::Certificates
                  if not cert::HasPrivateKey
                     exit perform cycle
                  end-if
                  if cert::Thumbprint::Equals("a_certain_thumb_print", type StringComparison::OrdinalIgnoreCase)
                     set card = cert
                     exit perform
    	      end-if
    	   end-perform
               invoke store::Close
    	   set retcertificate to card
               goback.
    
           end method.
           end class.
        	   
    
Reply
  • This would look something like the following in COBOL:

     

          $set ilusing"System.Xml"
          $set ilusing"System.Security.Cryptography"
          $set ilusing"System.Security.Cryptography.Xml"
          $set ilusing"System.Security.Cryptography.X509Certificates"
          $set ilusing"System.Deployment.Internal.CodeSigning"
           class-id myclass.
           method-id SignDocument static.
           procedure division using doc as type XmlDocument
    		                  returning retdoc as type XmlDocument.
           
                declare signatureCanonicalizationMethod as string = "www.w3.org/.../xml-exc-c14n
                declare signatureMethod as string = "www.w3.org/.../xmldsig-more
                declare digestMethod as string = "www.w3.org/.../xmlenc
    	    declare signatureReferenceURI as string = "#_73e63a41-156d-4fda-a26c-8d79dcade713"
                invoke type CryptoConfig::AddAlgorithm(type of type RSAPKCS1SHA256SignatureDescription, signatureMethod)
    	    declare signingCertificate = self::GetCertificate
    	    declare signer as type SignedXml = new SignedXml(doc)
                set signer::SigningKey = signingCertificate::PrivateKey
                set signer::KeyInfo = new KeyInfo
                invoke signer::KeyInfo::AddClause(new KeyInfoX509Data(signingCertificate))
    	    set signer::SignedInfo::CanonicalizationMethod = signatureCanonicalizationMethod
                set signer::SignedInfo::SignatureMethod = signatureMethod
    	    declare envelopeTransform as type XmlDsigEnvelopedSignatureTransform = new XmlDsigEnvelopedSignatureTransform
                declare cn14Transform as type XmlDsigExcC14NTransform = new XmlDsigExcC14NTransform
                declare signatureReference as type Reference = new Reference
                set signatureReference::Uri = signatureReferenceURI
                invoke signatureReference::AddTransform(envelopeTransform)
                invoke signatureReference::AddTransform(cn14Transform)
                set signatureReference::DigestMethod = digestMethod
    	    invoke signer::AddReference(signatureReference)
    	    invoke signer::ComputeSignature
                declare signatureElement as type XmlElement = signer::GetXml
    	    invoke doc::DocumentElement::AppendChild(signer::GetXml())
    	    set retdoc to doc
            
    	    goback.
    
           end method.
           method-id GetCertificate private static.
           procedure division returning retcertificate as type X509Certificate2.
           
               declare store as type X509Store = new X509Store(type StoreName::My, type StoreLocation::LocalMachine)
               invoke store::Open(type OpenFlags::ReadOnly)
               declare card as type X509Certificate2 = null
               perform varying cert as type X509Certificate2 thru store::Certificates
                  if not cert::HasPrivateKey
                     exit perform cycle
                  end-if
                  if cert::Thumbprint::Equals("a_certain_thumb_print", type StringComparison::OrdinalIgnoreCase)
                     set card = cert
                     exit perform
    	      end-if
    	   end-perform
               invoke store::Close
    	   set retcertificate to card
               goback.
    
           end method.
           end class.
        	   
    
Children
No Data