Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 17-09-2020
juramisa juramisa is offline
Miembro
 
Registrado: abr 2007
Posts: 54
Poder: 19
juramisa Va por buen camino
Buenos días
Como comente adquirimos SecureBlackBox 2020, y los componentes han cambiado respecto a la 16. Por si alguien se encuentra en la misma situación os dejo el código para la firma del TicketBai.


Código Delphi [-]
  T_Firmante = record
    r_Nombre_firma: String;
    r_ID: String;
    r_Metodo_Canonicalization: String;
    r_Hash_algorithm: String;
    // El fichero pdf en el que se encuentra en las políticas de firma. pulsando esa dirección
    // debería presentarnos dicho fichero pdf
    r_SigPolicyID: String; // https://ticketbai.eus/politicafirma
    // El fichero pdf completo calculamos su SHA256 y nos dará un valor hexadecimal, y otro en base64
    // Pasamos el valor hexadecimal
    r_SigPolicyHash: string; // 39D59C038EBB3B7DF6C61ED2F740B318F0C50F93ADCD35E26BE8FF8E76D21DA8
    // Algoritmo
    r_SigPolicyHashAlgorithm: string; //SHA256
    // Direccion URI de política de firma
    r_SigPolicyURI: string; //https://ticketbai.eus/politicafirma;



Código Delphi [-]
procedure p_firmar_xml(el_fichero : string; el_firmante : T_Firmante);
var
  CertificateStorage: TsbxCertificateStorage;  // Nuevo componente SecureBlackBox 2020
  sbxXAdESSigner1 : TsbxXAdESSigner;  // Nuevo componente SecureBlackBox 2020

  cert : TsbxCertificate;
  i : Integer;
  encontrado : Boolean;
  function bintostr(const bin: array of byte): string;
  const
    HexSymbols = '0123456789ABCDEF';
  var
    i: integer;
  begin
    SetLength(Result, 2 * Length(bin));
    for i := 0 to Length(bin) - 1 do
    begin
      Result[1 + 2 * i + 0] := HexSymbols[1 + bin[i] shr 4];
      Result[1 + 2 * i + 1] := HexSymbols[1 + bin[i] and $0F];
    end;
  end;
begin
  sbxXAdESSigner1 := TsbxXAdESSigner.Create(nil);
  sbxXAdESSigner1.InputFile := el_fichero;
  sbxXAdESSigner1.OutputFile := el_fichero;
  CertificateStorage := TsbxCertificateStorage.Create(nil);
  if CertificateStorage.Opened then
     CertificateStorage.Close(True);
  CertificateStorage.Open('system://currentuser@localhost/?store=MY');
  encontrado := False;
  for i := 0 to CertificateStorage.Certificates.Count - 1 do
  begin
    cert := CertificateStorage.Certificates[i];
    if bintostr(Cert.SerialNumber) = el_firmante.r_ID then
    begin
      sbxXAdESSigner1.SigningCertificate := cert;
      encontrado := True;
    end;
  end;
  if not encontrado then
  begin
    Application.MessageBox('Firma no encontrada',
      'Proceso de firma', MB_OK + MB_ICONWARNING
      + MB_DEFBUTTON2);
    Exit;
  end;

  sbxXAdESSigner1.SignatureType := cxstEnveloped;

  sbxXAdESSigner1.CanonicalizationMethod := cxcmCanon;

  sbxXAdESSigner1.HashAlgorithm := el_firmante.r_Hash_algorithm;  // SHA256

  sbxXAdESSigner1.XMLElement := '';  // Todo el documento

  sbxXAdESSigner1.EnableXAdES := True;

  sbxXAdESSigner1.XAdESVersion := xav132;

  sbxXAdESSigner1.XAdESForm := xafEPES;

  sbxXAdESSigner1.Config('SigPolicyID=' + el_firmante.r_SigPolicyID); // https://ticketbai.eus/politicafirma');

  sbxXAdESSigner1.Config('SigPolicyHash=' + el_firmante.r_SigPolicyHash); // 39D59C038EBB3B7DF6C61ED2F740B318F0C50F93ADCD35E26BE8FF8E76D21DA8; 
  sbxXAdESSigner1.Config('SigPolicyHashAlgorithm=' + el_firmante.r_SigPolicyHashAlgorithm); //=SHA256;

  sbxXAdESSigner1.Config('SigPolicyURI=' + el_firmante.r_SigPolicyURI); //https://ticketbai.eus/politicafirma;

  try
    sbxXAdESSigner1.Sign();
  except
      MessageDlg('Error en el proceso de firma', mtError, [mbOK], 0);
  end;
end;

Espero os sirva,

Saludos

Última edición por Neftali [Germán.Estévez] fecha: 17-09-2020 a las 09:09:41. Razón: Añadir TAG's al código
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3706 Hace 2 Semanas 09:38:43
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 13:45:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi