Skip to main content

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

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

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

}

}

}


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

The conversion for this program is as follows:

 

      $set ilusing"System""
      $set ilusing"System.Security.Cryptography" 
       class-id xmldigisign.RSASample.
       working-storage section.
       method-id main static.
       local-storage section.
       procedure division.
		   try 
              *> Create a new instance of RSACryptoServiceProvider.
		      perform using rsa as type RSACryptoServiceProvider = new RSACryptoServiceProvider
				 *>The hash to sign. 
				 declare hash as type Byte occurs any 
		         perform using sha256 as type SHA256 = type SHA256::Create
					declare #data as type Byte occurs 20 = table of
                      type Byte(59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135)
					set hash = sha256::ComputeHash(#data)
		         end-perform
 
              *> Create an RSASignatureFormatter object and pass it the               
			  *> RSACryptoServiceProvider to transfer the key information. 
				 declare RSAFormatter as type RSAPKCS1SignatureFormatter = new RSAPKCS1SignatureFormatter(rsa) 
			  *> Set the hash algorithm to SHA256. 

                 invoke RSAFormatter::SetHashAlgorithm("SHA256")
			  *> Create a signature for HashValue and return it. 
				 declare SignedHash as type Byte occurs any = RSAFormatter::CreateSignature(hash)
		      end-perform
		   catch e as type CryptographicException
		      display e::Message
		   end-try
		   goback.

       end method.

       end class.


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

Thank you Mr. Glazier, I'm going to test on my project.

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

Bom dia Mr. Glazier

Infelizmente não deu certo, acho que analisei errado ou estou fazendo alguma coisa errada no programa, no meu XML eu tenho que assinar com algoritmo RSA-SHA256, mas o programa esta assinando com algoritmo RSA-SHA1, por isso pensei que poderia ser aquele método que converteu para mim ontem, mas não deu certo, vou anexar o programa como estou fazendo , e o XML de como assinou e um de como deve assinar, se o Senhor poder me ajudar mais uma vez ficarei muito grato.

Atenciosamente

Renato Soares Vieira

      $set ilusing"System"
      *set ilusing"System.Windows.Forms"
      $set ilusing"System.Xml"
      $set ilusing"System.Security.Cryptography"
      $set ilusing"System.Security.Cryptography.Xml"
      $set ilusing"System.Security"
      $set ilusing"System.Security.Cryptography.X509Certificates"
      *class-id xmlsigning.Form1 is partial
      *          inherits type System.Windows.Forms.Form.
       class-id xmlsigning.SignXML.
      
       working-storage section.

       method-id main static.
       procedure division.
      
           declare XMLAssinado as string = "p:\\renato\\r1000-042018-assinado.xml"
           declare #XML as string = "p:\\renato\\r1000-042018.xml"
           declare #URI as string = "#ID1507391350000002018041911433600002"
           *>
           declare pCertificado as type X509Certificate2 = null
           try
              *> Verificar a possibilidade de passar certificado para assinatura, sem a necessidade
              *> de chamar a lista de certificado
              declare subject as string = type String::Empty
              if (pCertificado not = null)
                 set subject to pCertificado::Subject::ToString
              end-if
              declare x509Certificate as type X509Certificate2 = new X509Certificate2
              declare store as type X509Store = new X509Store("MY", type StoreLocation::CurrentUser)
              invoke store::Open(type OpenFlags::ReadOnly b-or type OpenFlags::OpenExistingOnly)
              declare collection as type X509Certificate2Collection = store::Certificates
                 as type X509Certificate2Collection
              declare collection1 as type X509Certificate2Collection
                 = collection::Find(type X509FindType::FindByTimeValid, type DateTime::Now, false)
                   as type X509Certificate2Collection
              declare collection2 as type X509Certificate2Collection
                 = collection::Find(type X509FindType::FindByKeyUsage,
                   type X509KeyUsageFlags::DigitalSignature, false) as type X509Certificate2Collection
              declare scollection as type X509Certificate2Collection
                 = type X509Certificate2UI::SelectFromCollection(collection2,
                   "Certificado(s) Digital(is) disponível(is)",
                   "Selecione o certificado digital para uso no aplicativo Perform",
                   type X509SelectionFlag::SingleSelection)
              if (scollection::Count <> 0)
            *>   invoke type MessageBox::Show("Nenhum certificado digital foi selecionado ou o "
            *>      & "certificado selecionado está com problemas.")
            *>else
                 set pCertificado to scollection[0]
                 declare documento as type XmlDocument = new XmlDocument
                 set documento::PreserveWhitespace to true
                 try
                    *> verificando elemento de referencia
                    invoke documento::Load(#XML)
                    try
                   perform using rsa as type RSACryptoServiceProvider = new RSACryptoServiceProvider
                   *>The hash to sign.
                   declare hash as type Byte occurs any
                         perform using sha256 as type SHA256 = type SHA256::Create
                        declare #data as type Byte occurs 20 = table of
                                                 type Byte(59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135)
                         set hash = sha256::ComputeHash(#data)
                         end-perform
                          *> Create an RSASignatureFormatter object and pass it the              
                    *> RSACryptoServiceProvider to transfer the key information.
                   declare RSAFormatter as type RSAPKCS1SignatureFormatter = new RSAPKCS1SignatureFormatter(rsa)
                    *> Set the hash algorithm to SHA256.
                          invoke RSAFormatter::SetHashAlgorithm("SHA256")
                    *> Create a signature for HashValue and return it.
                   declare SignedHash as type Byte occurs any = RSAFormatter::CreateSignature(hash)
                   end-perform
                       try
                          *> selecionando certificado digital baseado no subject
                          set x509Certificate to collection1[0]
                          declare docXML as type SignedXml = new SignedXml(documento)
                          set docXML::SigningKey to pCertificado::PrivateKey
                          *> Create a reference to be signed.
                          declare #reference as type Reference = new Reference()
                          set #reference::Uri to #URI
                          *> adicionando EnvelopedSignatureTransform a referencia
                          declare envelopedSigntature as type XmlDsigEnvelopedSignatureTransform
                             = new XmlDsigEnvelopedSignatureTransform
                          invoke #reference::AddTransform(envelopedSigntature)
                          declare c14Transform as type XmlDsigC14NTransform = new XmlDsigC14NTransform
                          invoke #reference::AddTransform(c14Transform)
                          invoke docXML::AddReference(#reference)
                          *> carrega o certificado em KeyInfoX509Data para adicionar a KeyInfo
                          declare keyInfo as type KeyInfo = new KeyInfo
                          invoke keyInfo::AddClause(new type KeyInfoX509Data(pCertificado))
                          set docXML::KeyInfo to keyInfo
                          invoke docXML::ComputeSignature
                          *> recuperando a representacao do XML assinado
                          declare xmlDigitalSignature as type XmlElement = docXML::GetXml
                          invoke documento::DocumentElement::AppendChild(documento::ImportNode(xmlDigitalSignature,
                             true))
                          set XMLAssinado to documento::OuterXml
                          invoke documento::Save("p:\\renato\\r1000-042018-assinado.xml")
                       catch ex as type Exception
                        *>invoke type MessageBox::Show("Erro: " & ex::Message)
                       end-try
                    catch ex as type Exception
                     *>invoke type MessageBox::Show("Erro: " & ex::Message)
                    end-try
                 catch caught as type Exception
                  *>invoke type MessageBox::Show("Erro ao assinar o documento - " & caught::Message)
                 end-try
              end-if
           catch caught as type Exception
            *>invoke type MessageBox::Show("XML mal formado - " & caught::Message)
           end-try.
           
       end method.
     
       end class.

 

r1000_2D00_042018_2D00_assinado.xml

r1000_2D00_042018_2D00_assinado.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); } } }

boa tarde, como eu converto o comanda abaixo em c# para o visual cobol?

CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription),signatureMethod);

e

signer.SignedInfo.CanonicalizationMethod = signatureCanonicalizationMethod;
signer.SignedInfo.SignatureMethod = signatureMethod;

obrigado

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

Acho melhor eu colocar o exemplo inteiro para entenderem

 

obrigado

exemplo.txt


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

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.
    	   

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

Thank you mr Glazier
 
Is now just giving an error in the line below, I have to include some method to accept this type?
 
invoke type CryptoConfig::AddAlgorithm(type of type RSAPKCS1SHA256SignatureDescription, signatureMethod)
 
erro:
 
Erro COBCH0845 Unknown type 'type RSAPKCS1SHA256SignatureDescription'
 
thank you
 
Renato
 

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

Which version of the .NET Framework are you using?
I had to change mine to 4.61 and then I added in the References for System.Deployment v4.0.30319 and Microsoft.Build.Tasks.v4.0 v4.0.30319 as well.

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

do not know how to tell you, we are using the visual cobol for visual studio 3.0, and I am running it by itself visual cobol for visual studio.
How can I see this?

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

Open up the Project Properties page and look on the Application tab. This is where you set the .NET Framework version. The list of supported Frameworks can change depending on which Visual Studio version you are using. I am using VS2017.

The actual assemblies need to be added as References in the References folder. If you expand this folder and select one of the assemblies you will see its properties if your property window is displayed.

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

Sorry but I did not understand this part "The actual assemblies need to be added as References in the References folder. If you expand this folder and select one of the assemblies you will see its properties if your property window is displayed."
I have to go to "project", "Add Reference", then open a screen, what do I need to do?

thank you

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

The example code that you provided makes use of .NET classes that are in non-default .NET assemblies.  In order to make these classes available you must reference the assemblies.

RSAPKCS1SHA256SignatureDescription is a class whose full name is System.Deployment.Internal.CodeSigning.RSAPKCS1SHA256SignatureDescription.

At the top of the class I set the following directive:

$set ilusing"System.Deployment.Internal.CodeSigning"

This allows us to reference the class as RSAPKCS1SHA256SignatureDescription instead of specifying the full namespace.

The RSAPKCS1SHA256SignatureDescription class is found in the .NET Assembly System.Deployment.dll. In order to find the class you have to add a reference to this assembly in your project. You can do this by right-clicking on the References folder in the project and selecting Add Reference and then navigate to System.Deployment in the list of .NET assemblies and select it and click on OK. It will then show up in the list as shown below:


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

Good afternoon, i´m completes the Project(in annex) and is working perfectly, but when compiling it is generating an executable .exe, I need to be generated .dll so I can call this routine from another program, how should I proceed to solve this.
thank you

RTP_2D00_SGN1.txt


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

Open up the Project Properties page and on the Application tab change the Output type from Console Application to Class Library. Then it will generate a .dll.

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

Hello Mr. Glazier, I have already done this, but I do not even get into the routines, because neither the "Stop" that I put in the beginning does not process, and also not of the error, I am using the attached example.
Thank you

LALA.txt


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

What error are you receiving on the call statement, a COBOL RTS 173?

Are you stepping thru the code in the debugger?

If the calling program is in a different project than the called program then you need to add a reference to the project containing the called program in the References folder of the project containing the calling program.

What is the project name of the project containing the called program, is it RTP-SGN1?

I suggest you take a look at the tutorial here:


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

Hello, it does not return any error, it simply does nothing, I only have this project of this routines I did to sign the xml, the calling program has no project, I just call the new routine by the command "call", the calling program does part of a system and is written in cobol and compiled by visual cobol for visual studio 3.0. It was a system in netExpress 3.1 that we recompiled in visual cobol for visual studio through command. cbllink -d -s -g xxx.cbl


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

What you appear to be trying to do is call a managed code .dll from a native code executable using the COBOL CALL statement. This will not work. If you compile the calling program as managed code then you can use the CALL statement to call a managed code .dll.

In order to call a managed code .dll from a native code executable you need to use CCW or COM Callable Wrapper, which means that you Register a COBOL class for use with COM Interop and then you can instantiate it and invoke its methods using the COM support in the native COBOL libraries. (OLE).

This is covered in the docs here:

There is also a KB article and demo here:


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

Good morning Mr. Glazier, thank you very much for the help that worked perfectly with your tips.
But I need to tease you a little bit with two things.
This is working perfectly on my machine, which is of unvoltage, but how should I proceed in the client, being that on my machine when compiling it records an item in the windows registry, but on the client I do not know how we should proceed;
another bestowal would be, these routines attached when I send the XML to sign, it shows the screen for me to choose the certificate, but I would need to do this only in the first XML, and the next one would be the same certificate, without the need to choose the certificate again , because several XMLs with the same certificate are signed, without the need to be choosing the certificate all the time, have that possibility?
thank you

8816.RTP_2D00_SGN1.txt


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

For your second question about displaying the Certificate selection screen only for the first invocation, I would think that you could control this by passing a flag as a parameter to the method which could be set by the client which would indicate whether or not the selection screen should be shown. Then the code logic in the server could bypass that function if required.

For your first question regarding registering the server on a client machine on which Visual Studio is not installed, you would have a couple of options.

1.  Register the assembly using the regasm.exe tool.
     You can find out more on the Microsoft site here:

2. Use Reg-free COM. This involves creating a manifest file for the client and server containing information about the properties of the COM component. If you use this approach then you do not have to use regasm.exe to register your COM server in production. I have uploaded an example Visual COBOL solution that contains a client and a server project along with instructions within a readme file for setting this up. You can also find out more information about this by Googling regfree COM.
One such link you will find is here.

VCCOMServerRegFree2.zip

   


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

Thank you Mr. Glazier, but I continue with two doubts.

In the first question, I understand that I can pass parameter, but I need to know if the instace can save the chosen certificate the first time I call it to use in the others, because I do not know how to process to save this certificate, so that in other times I just sign with the same certificate you chose the first time.

In the second second question, the question is, I need to do this process even if the calling program is compiled by the same compiler, ie I have this routine that subscribes to .NET which is a project, but the caller is a native cobol (no project ) but compiled by the same "Visual Cobol for Visual Studio" compiler.

Thank you.


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

For the first question, do you wish to save the certificate for long-term storage on disk or in memory for the next invocation of the method from the same instance of the application?

If you store the certificate in the working-storage of the class then this is instance data and will be available to all methods and all invocations of this instance.

If you wish to store it on disk so that you can access it again, you might look at using the export and import methods of the X509Certificate class. The docs can be found here:

I am not an expert on certificates or how to manipulate them so I will not comment further on how to achieve this.

On your second question, the requirement to call managed code from a native application using COM has nothing to do with the product version being used. It is part of the Interop functionality of using native and managed code together in the same application. You would need to do this if NX was used to compile the client or Visual COBOL was used.


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

Thank you very much Mr. Glazier, with your help and dedication, we were able to complete our signature project with digital certificate of the XMLs.

If you need anything, we are at your disposal.