ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Assinar XML varias vezes

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
NewCvf
Novato
Novato


Registrado: Quarta-Feira, 15 de Mai de 2013
Mensagens: 41

MensagemEnviada: Sex Jul 18, 2014 3:03 pm    Assunto: Assinar XML varias vezes Responder com Citação

Alguém sabe como assina o xml varias vezes em locais diferente?
hoje estou utilizando essa rotina:(abaixo), mas ela só assina uma unica vez, e sempre no mesmo lugar ou seja ele procura a tag "Signature" so que eu tenho varias tag Signature no XML, e preciso assinalas todas,

Código:

function assinar(var AXMLEntrada,ARetorno: String): Boolean;
var
  bResult       : Boolean;
  xmldoc        : IXMLDOMDocument3;
  xmldsig       : IXMLDigitalSignature;
  dsigKey       : IXMLDSigKey;
  signedKey     : IXMLDSigKey;
  PrivateKey    : IPrivateKey;
  CertStore     : IStore3;
  CertStoreMem  : IStore3;
  Certs         : ICertificates2;
  Cert          : ICertificate2;
  iFor          : Integer;
begin

  try

    xmldoc                    := CoDOMDocument50.Create;
    xmldoc.async              := False;
    xmldoc.validateOnParse    := False;
    xmldoc.preserveWhiteSpace := True;

    xmldsig := CoMXDigitalSignature50.Create;
    xmldoc.loadXML(AXMLEntrada);

    xmldoc.setProperty('SelectionNamespaces', DSIGNS);
    xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature');


    CertStore := CoStore.Create;
    CertStore.Open(CAPICOM_CURRENT_USER_STORE, 'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
    CertStoreMem := CoStore.Create;
    CertStoreMem.Open(CAPICOM_MEMORY_STORE, 'Memoria', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
    Certs := CertStore.Certificates as ICertificates2;
    for iFor := 1 to Certs.Count do begin
      Cert := IInterface(Certs.Item[iFor]) as ICertificate2;
      if ( Cert.SerialNumber = FNroCertificado ) then begin
        OleCheck(IDispatch(Certs[iFor].PrivateKey).QueryInterface(IPrivateKey,PrivateKey));
        CertStoreMem.Add(Cert);
      end;
    end;
    xmldsig.store := (CertStoreMem);
    dsigKey   := xmldsig.createKeyFromCSP(PrivateKey.ProviderType, PrivateKey.ProviderName, PrivateKey.ContainerName, 0);
    signedKey := xmldsig.sign(dsigKey, $00000002);
    AXMLEntrada:= xmldoc.xml;
    bResult   := True;
    ARetorno:= 'Documento XML assinado com sucesso.';

  except on E : Exception do
    begin
      bResult := False;
      ARetorno:= 'Assinar: '+E.Message;
    end;
  end;

  if ( not bResult ) then begin
    if ( Pos('A Propriedade ou o objeto não foi encontrado',ARetorno)>0 ) then begin
      ARetorno:= ARetorno+#$D#$A+'Verifique se o certificado digital está instalado corretamente para o usuário atual do Windows.'
    end;
  end;

  Result := bResult;

end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
flexsistemas
Aprendiz
Aprendiz


Registrado: Terça-Feira, 29 de Outubro de 2013
Mensagens: 121
Localização: Caxias do Sul

MensagemEnviada: Ter Ago 18, 2015 8:48 am    Assunto: Responder com Citação

Olá,

gostaria de saber se você pode me ajudar. Estou com um problema ao assinar documentos, no meu caso, arquivos XML. Estou assinando de uma forma muito parecida com a sua porém ele está retornando a seguinte mensagem de erro:



Poderia me dar alguma idéia do problema?

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB