/// <summary> /// Verifica la marca ottenuta in risposta ed estrae tutti i dati dalla marca completando i dati dell'oggetto OutputResponseMarca con quelli letti direttamente dalla marca! /// </summary> /// <param name="filep7m"></param> /// <param name="fileTSR"></param> /// <returns></returns> private static DocsPaVO.areaConservazione.OutputResponseMarca VerificaMarca(byte[] filep7m, byte[] fileTSR) { DocsPaVO.areaConservazione.OutputResponseMarca outputMarca = new DocsPaVO.areaConservazione.OutputResponseMarca(); DigitalSignature.VerifyTimeStamp checkMarca = new DigitalSignature.VerifyTimeStamp(); outputMarca = checkMarca.Verify(filep7m, fileTSR); return(outputMarca); }
/// <summary> /// Crea una nuova versione da un documento acquisito, se è associato un TSR, verrà unito al documento per creare un TSD /// </summary> /// <param name="infoUtente"></param> /// <param name="fileRequest"></param> /// <returns></returns> public static DocsPaVO.documento.FileRequest CreateTSDVersion(DocsPaVO.utente.InfoUtente infoUtente, DocsPaVO.documento.FileRequest fileRequest) { byte [] lastTSR = BusinessLogic.Interoperabilità.InteroperabilitaUtils.GetTSRForDocument(infoUtente, fileRequest); if (lastTSR == null) { return(null); } //Conversione in TSD DocsPaVO.documento.FileDocumento docFile = FileManager.getFileFirmato(fileRequest, infoUtente, false); BusinessLogic.Documenti.DigitalSignature.VerifyTimeStamp vts = new DigitalSignature.VerifyTimeStamp(); if (vts.Verify(docFile.content, lastTSR).esito != "OK") { return(null); } try { BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.tsd tsdMgr = new BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.tsd(); BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile file = new BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile { Content = docFile.content, Name = docFile.name, MessageFileType = BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.fileType.Binary }; List <BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile> tsrLst = new List <BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile>(); BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile tsrfile = new BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.CryptoFile { Content = lastTSR, MessageFileType = BusinessLogic.Documenti.DigitalSignature.PKCS_Utils.fileType.Binary }; tsrLst.Add(tsrfile); docFile.content = tsdMgr.create(file, tsrLst.ToArray()).Content; docFile.estensioneFile = "tsd"; docFile.fullName = docFile.fullName + ".tsd"; docFile.length = (int)docFile.content.Length; docFile.name = docFile.name + ".tsd"; docFile.nomeOriginale = docFile.nomeOriginale + ".tsd"; } catch (Exception e) { logger.ErrorFormat("Errore creando il TSD!! {0},{1}", e.Message, e.StackTrace); return(null); } DocsPaVO.documento.FileRequest tsdFileReq; if (fileRequest.GetType() == typeof(DocsPaVO.documento.Allegato)) { tsdFileReq = new DocsPaVO.documento.Allegato(); (tsdFileReq as DocsPaVO.documento.Allegato).numeroPagine = (fileRequest as DocsPaVO.documento.Allegato).numeroPagine; } else { tsdFileReq = new DocsPaVO.documento.Documento(); } tsdFileReq.docNumber = fileRequest.docNumber; tsdFileReq.descrizione = "Versione creata per conversione in TSD"; tsdFileReq.firmato = fileRequest.firmato; tsdFileReq = BusinessLogic.Documenti.VersioniManager.addVersion(tsdFileReq, infoUtente, false); if (tsdFileReq != null) { BusinessLogic.UserLog.UserLog.WriteLog(infoUtente, "DOCUMENTOAGGIUNGIVERSIONE", tsdFileReq.docNumber, string.Format("{0}{1}{2}{3}", "Aggiunta al N.ro Doc.: ", tsdFileReq.docNumber, " la Ver. ", tsdFileReq.version + " di tipo TSD"), DocsPaVO.Logger.CodAzione.Esito.OK); } else { BusinessLogic.UserLog.UserLog.WriteLog(infoUtente, "DOCUMENTOAGGIUNGIVERSIONE", tsdFileReq.docNumber, string.Format("{0}{1}{2}{3}", "Aggiunta al N.ro Doc.: ", tsdFileReq.docNumber, " la Ver. ", tsdFileReq.version + " di tipo TSD"), DocsPaVO.Logger.CodAzione.Esito.KO); } tsdFileReq = BusinessLogic.Documenti.FileManager.putFile(tsdFileReq, docFile, infoUtente); List <DocsPaVO.LibroFirma.FirmaElettronica> firmaE = LibroFirma.LibroFirmaManager.GetFirmaElettronicaDaFileRequest(fileRequest); bool isFirmatoElettonicamente = firmaE != null && firmaE.Count > 0; if (isFirmatoElettonicamente) { string impronta = string.Empty; DocsPaDB.Query_DocsPAWS.Documenti docInfoDB = new DocsPaDB.Query_DocsPAWS.Documenti(); docInfoDB.GetImpronta(out impronta, tsdFileReq.versionId, tsdFileReq.docNumber); foreach (DocsPaVO.LibroFirma.FirmaElettronica firma in firmaE) { firma.UpdateXml(impronta, tsdFileReq.versionId, tsdFileReq.version); LibroFirma.LibroFirmaManager.InserisciFirmaElettronica(firma); } } return(tsdFileReq); }