Firma embedded di un file pdf. Questa firma usa il formato PKCS# e dal 30 giugno 2011 non va quindi usata per la firma Legale a norme di legge. Utilizzare invece dmtSigningPdfFileWithCadesAttributes
definizione C
int WINAPI dmtSigningPdfFile(
HDMTOBJ hDmt,
CHAR *szFileName,
CHAR *szAlgHash = szOID_OIWSEC_sha1, // Algoritmo di Hash
CHAR *szPin = "", // Pin della smart-card
BOOL fAddDsiTimeRef = FALSE, //
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
);
hDmt - Handle dell'oggetto DiMaTek
szFileName- File pdf da firmare
szAlgHash - Identificativo dell'algoritmo di hash da utilizzare [vedi Algoritmi di hash e di cifratura]
szPin - Pin della smart-card
fAddDsiTimeRef - Usa il riferimento temporale di dataflex
szSigningTimeFormat - Formattazione del riferimento temporale proprio
fAddSignatureTimeStamp - se true aggiunge una marca temporale contestualmente alla firma
pDatiServerTimeStamp - Struttura contenente le informazioni del Server di Marcatura temporale da utilizzare da generare e inserire contestualmente alla firma. Questi dati sono utilizzati solo se fAddSignatureTimeStamp è true
DMT_OK in caso di successo, altrimenti un codice di errore
Nota:
La funzione genera un nuovo File PDF con la firma embedded aggiungendo l'estensione .Signed.pdf al nome del file originale
Esempio C:
// ============================================================================
// ============================================================================
int FirmaFilePdf(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 = dmtSigningPdfFile(
hDmt,
FileDaFirmare,
"1.3.14.3.2.26", // szOID_OIWSEC_sha1 - 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;
}