dmtSigningPdfFileWithCadesAttributes

Firma embedded di un file pdf secondo lo standard PAdES-BES. Questa funzione va usata per realizzare firme legali a Norme di legge dal 30 giugno 2011.

 

definizione C:

int  WINAPI dmtSigningPdfFileWithCadesAttributes(

HDMTOBJ hDmt,

CHAR *szFileName,

CHAR *szAlgHash = szOID_NIST_sha256,  // Algoritmo di Hash

CHAR *szPin = "", // Pin della smart-card

BOOL fAddDsiTimeRef = FALSE, // Usa il riferimento temporale di dataflex

CHAR *szSigningTime = "", // Valore di un riferimento temporale proprio da includere

CHAR *szSigningTimeFormat = "", // Formattazione del riferimento temporale proprio

BOOL fAddSignatureTimeStamp = FALSE,

DATI_SERVER_TIMESTAMP *pDatiServerTimeStamp = NULL

);

 

Parametri di input:
Valore di ritorno:

DMT_OK in caso di successo, altrimenti un codice di errore

 

Note:

con il flag fAddSignatureTimeStamp si abilita la funzionalità di poter aggiungere il TimeStampToken all'elenco di attributi non autenticati della firma. Ttale attributo viene letto correttamente da Adobe Pdf Reader identificando l'ente autenticatore del token (Infocert, Postecom, Aruba, ecc...).ù

Se il flag è impostato a TRUE durante la fase di firma verrà richiesto il TimeStamp al server indicato tra i parametri della struttura DATI_SERVER_TIMESTAMP a seconda del server interpellato verranno letti alcuni parametri.

Ad esempio per richiedere il TimeStamp ad un server di PosteCom hai bisogno di leggere un certificato di autenticazione e la relativa password per poter aprire il file .p12 da cui leggere il certificato di autenticazione,  per Infocert hai bisogno di leggere i parametri szUsername o szPassword, per un server free hai solo bisogno di leggere i parametri szAlgHash e szHttpServerUrl

 

 

Esempio in C:

// ============================================================================

int FirmaFilePdf_CADES(char *FileDaFirmare, char *Pin)

{

int ret;

// Creo l'oggetto Dimatek

HDMTOBJ hDmt = dmtCreate(

0,

"MY",

PKCS11_DLL,

CRYPTO_PROVIDER_TYPE,

PKCS11_LOW_LEVEL_ENABLED);

if (hDmt < 0)

goto end;

ret = dmtLoadCertificate(hDmt,"Franco Spinella",FALSE);

if (ret != DMT_OK)

return ret;

ret = dmtSetDefaultCertificate(

hDmt,

0,

FALSE);

if (ret != DMT_OK)

return ret;

 

DATI_SERVER_TIMESTAMP DatiServerTimeStamp;

memset((PVOID)&DatiServerTimeStamp, 0, sizeof(DATI_SERVER_TIMESTAMP));

 

//SERVER FREE

//DatiServerTimeStamp.TipoServerTimeStamp = SERVER_FREE;

//DatiServerTimeStamp.szAlgHash = szOID_OIWSEC_sha1;

//DatiServerTimeStamp.szHttpServerUrl = "http://www.edelweb.fr/cgi-bin/service-tsp";

//DatiServerTimeStamp.szUsername = NULL;

//DatiServerTimeStamp.szPassword = NULL;

 

//SERVER INFOCERT

//DatiServerTimeStamp.TipoServerTimeStamp = SERVER_INFOCERT;

//DatiServerTimeStamp.szAlgHash = szOID_OIWSEC_sha1;

//DatiServerTimeStamp.szHttpServerUrl = "https://marte.infocert.it/cdie/DtsService";

//DatiServerTimeStamp.szUsername = "franco-s@dataflex.net";

//DatiServerTimeStamp.szPassword = "dataflex92";

 

//SERVER ARUBA

//DatiServerTimeStamp.TipoServerTimeStamp = SERVER_ARUBA;

//DatiServerTimeStamp.szAlgHash = szOID_NIST_sha256;

//DatiServerTimeStamp.szHttpServerUrl = "https://servizi.arubapec.it/tsa/ngrequest.php";

//DatiServerTimeStamp.szUsername = "test.fidatek";

//DatiServerTimeStamp.szPassword = "12345";

 

//SERVER POSTECOM

DatiServerTimeStamp.TipoServerTimeStamp = SERVER_POSTECOM;

DatiServerTimeStamp.szAlgHash = szOID_OIWSEC_sha1;

DatiServerTimeStamp.szHttpServerUrl = "https://62.241.224.224/servletN_TSS/TSReqServlet";

DatiServerTimeStamp.szCertificateFile = "C:\\Alessio\\dimatek4src\\Test\\Spinella_test.p12";

DatiServerTimeStamp.szCertificatePassword = "Spinella1,";

DatiServerTimeStamp.szUsername = NULL;

DatiServerTimeStamp.szPassword = NULL;

 

ret = dmtSigningPdfFileWithCadesAttributes(

hDmt,

FileDaFirmare,

"2.16.840.1.101.3.4.2.1", // szOID_NIST_sha256 - Algoritmo di Hash

Pin, // Pin della smart-card

FALSE, // Aggiungi il TimeStamp

"", // Time-Stamp da aggiungere

"", // Formato del Time-Stamp

FALSE,

&DatiServerTimeStamp

);

 

if (ret != DMT_OK)

goto end;

end:

if ((ret == DMT_OK) && (hDmt > 0))

MessageBox(NULL, "Funzione eseguita con successo", "DimatecTest", MB_OK);

else if (ret == -1)

dmtGetLastError(true);

else

{

char ErrorBuffer[200];

if (hDmt < 0)

sprintf(ErrorBuffer, "Funzione eseguita con ERRORE: %i", hDmt);

else

sprintf(ErrorBuffer, "Funzione eseguita con ERRORE: %i", ret);

MessageBox(NULL, ErrorBuffer, "DimatecTest", MB_OK);

}

if (hDmt > 0)

dmtRelease(hDmt);

return ret;

}