Exemple #1
0
        /// <summary>
        /// Generazione timestamp con il vecchio metodo di IT
        /// </summary>
        /// <param name="TimeStampQuery">Struttura contente le informazioni per la generazione della marca</param>
        /// <returns>Struttura contente le informazioni della marca generata</returns>
        public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery)
        {
            logger.Debug("Chiamato DocsPa_TSAuthority_InfoTN");
            OutputResponseMarca resultMarca = new OutputResponseMarca();

            marcatura.InputMarca          inputMarca = new DocsPa_TSAuthority_InfoTN.marcatura.InputMarca();
            marcatura.OutputResponseMarca outMarca   = new DocsPa_TSAuthority_InfoTN.marcatura.OutputResponseMarca();
            marcatura.marcatura           Marca      = new DocsPa_TSAuthority_InfoTN.marcatura.marcatura();

            string urlTSA = string.Empty;

            if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"]))
            {
                urlTSA    = ConfigurationManager.AppSettings["URL_TSA"].ToString();
                Marca.Url = urlTSA;
            }

            inputMarca.applicazione = TimeStampQuery.applicazione;
            inputMarca.file_p7m     = TimeStampQuery.file_p7m;
            inputMarca.riferimento  = TimeStampQuery.riferimento;
            outMarca = Marca.getTSR(inputMarca);
            //mapping del risultato sull'oggetto di DocsPa
            resultMarca.descrizioneErrore = outMarca.descrizioneErrore;
            resultMarca.docm               = outMarca.docm;
            resultMarca.dsm                = outMarca.dsm;
            resultMarca.esito              = outMarca.esito;
            resultMarca.fhash              = outMarca.fhash;
            resultMarca.marca              = outMarca.marca;
            resultMarca.sernum             = outMarca.sernum;
            resultMarca.TSA                = new TSARFC2253();
            resultMarca.TSA.TSARFC2253Name = outMarca.TSA;

            return(resultMarca);
        }
Exemple #2
0
        /// <summary>
        /// Funzione di generazione della marca temporale.
        /// </summary>
        /// <param name="inMarca">Struttura contente le informazioni per la generazione della marca</param>
        /// <param name="svcUrl">Url del webservice tibco della marca temporale</param>
        /// <returns></returns>
        public OutputResponseMarca getMarcaByFile(InputMarca inMarca, string svcUrl)
        {
            logger.DebugFormat("INIZIO {0}  - {1}", inMarca.file_p7m, svcUrl);
            byte[] fileContent = String_To_Bytes(inMarca.file_p7m);  //System.IO.File.ReadAllBytes(inMarca.file_p7m);

            OutputResponseMarca retval = new OutputResponseMarca();

            retval.TSA = new TSARFC2253();
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            MarcaturaTemporale.MarcaturaTemporalePortTypeClient client = createClient(svcUrl);

            try
            {
                MarcaturaTemporale.MarcaType mt = client.EmissioneMarcaTemporale(fileContent);
                retval.marca              = Convert.ToBase64String(mt.marca);
                retval.sernum             = mt.serialNumber.ToString();
                retval.TSA.TSARFC2253Name = mt.timestampAuthority;
                retval.docm_date          = mt.dataOraMarca.ToString();
                retval.esito              = "OK";
                logger.DebugFormat("Generazione Marca per file  MarcaBase64 len:{2} Val [{0}] DATATA {1}", retval.marca, retval.docm_date.ToString(), mt.marca.Length);


                //Per la generazione del fhash.. ma non è richiesto per il funzionamento
                SHA256Managed sha256 = new SHA256Managed();
                byte[]        hash   = sha256.ComputeHash(fileContent);

                string hexHash = BitConverter.ToString(hash);
                hexHash = hexHash.Replace("-", "");

                retval.fhash = hexHash;
            }
            catch (FaultException <MarcaturaTemporale.FaultType> f)
            {
                logger.Error(String.Format("Errore {0} code {1}", f.Detail.userMessage, f.Code));
                //Console.WriteLine(String.Format("Errore {0} code {1}", f.Detail.userMessage, f.Code));
                retval.descrizioneErrore = f.Detail.userMessage;
                retval.esito             = "KO";
            }
            catch (Exception e)
            {
                logger.Error(String.Format("Errore {0} code {1}", e.Message, e.Data));
                // Console.WriteLine(String.Format("Errore {0} code {1}", pe.Message, pe.Data));
                retval.descrizioneErrore = e.Message;
                retval.esito             = "KO";
            }


            return(retval);
        }
Exemple #3
0
        public OutputResponseMarca getTSR(InputMarca richiesta, InfoUtente utente)
        {
            OutputResponseMarca resultMarca = new OutputResponseMarca();

            //Se l'oggetto infoUtente non è valorizzato non eseguo alcuna operazione e restituisco solo
            //il messaggio di errore dell'oggetto OutputResponseMarca
            if (utente == null)
            {
                logger.Debug("InfoUtente nullo o non valido.");
                resultMarca.esito             = "KO";
                resultMarca.descrizioneErrore = "Utente nullo o non autorizzato!";
                return(resultMarca);
            }

            try
            {
                //Scelta del tipo di implementazione per la richiesta della marca temporale
                string typeName = System.Configuration.ConfigurationManager.AppSettings["TYPE_TSA"];

                Type instanceType = Type.GetType(typeName, false);
                if (instanceType == null)
                {
                    throw new ApplicationException(string.Format("Tipo non valido per la configurazione '{0}'", "TYPE_TSA"));
                }

                DocsPa_I_TSAuthority.I_TSR_Request instance = (DocsPa_I_TSAuthority.I_TSR_Request)Activator.CreateInstance(instanceType);

                //ottengo una marca temporale in base alla specifica implementazione settata nel web.config
                resultMarca = instance.getTimeStamp(richiesta);

                //genero l'array di byte per il file p7m e TSR
                byte[] p7m = String_To_Bytes(richiesta.file_p7m);
                byte[] TSR = Convert.FromBase64String(resultMarca.marca);

                //verifico la marca e completo l'oggetto OutputResponseMarca
                resultMarca = VerificaMarca(p7m, TSR);
            }
            catch (Exception eMarca)
            {
                resultMarca.esito             = "KO";
                resultMarca.descrizioneErrore = "richiesta della marca fallita: " + eMarca.Message;
                logger.Debug("richiesta della marca fallita: " + eMarca.Message);
            }

            return(resultMarca);
        }
Exemple #4
0
        /// <summary>
        /// Generazione timestamp con il nuovo metodo di IT
        /// </summary>
        /// <param name="TimeStampQuery">Struttura contente le informazioni per la generazione della marca</param>
        /// <returns>Struttura contente le informazioni della marca generata</returns>
        public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery)
        {
            logger.Debug("Chiamato DocsPa_TSAuthority_InfoTN_V2");
            string urlTSA = string.Empty;

            if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"]))
            {
                urlTSA = ConfigurationManager.AppSettings["URL_TSA"].ToString();
            }
            DocsPa_TSAuthority_InfoTN.MarcaWCF m = new DocsPa_TSAuthority_InfoTN.MarcaWCF();

            InputMarca inputMarca = new DocsPaVO.areaConservazione.InputMarca();

            inputMarca.applicazione = TimeStampQuery.applicazione;
            inputMarca.file_p7m     = TimeStampQuery.file_p7m;
            inputMarca.riferimento  = TimeStampQuery.riferimento;

            DocsPaVO.areaConservazione.OutputResponseMarca outVal = m.getMarcaByFile(inputMarca, urlTSA);
            return(outVal);
        }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="TimeStampQuery"></param>
        /// <returns></returns>
        public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery)
        {
            OutputResponseMarca outputMarca = new OutputResponseMarca();


            byte[] dati = String_To_Bytes(TimeStampQuery.file_p7m);
            //SHA1 sha1 = SHA1CryptoServiceProvider.Create();
            //byte[] hash = sha1.ComputeHash(dati);

            SHA256Managed sha256 = new SHA256Managed();

            byte[] hash = sha256.ComputeHash(dati);

            TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();

            reqGen.SetCertReq(true);


            //Funzione randomica per il Nonce.
            //RandomNumberGenerator nRand = new RNGCryptoServiceProvider();
            long casuale = (long)nRandom.Next();
            //TimeStampRequest tsReq = reqGen.Generate(TspAlgorithms.Sha1, hash, BigInteger.ValueOf(casuale));
            TimeStampRequest tsReq = reqGen.Generate(TspAlgorithms.Sha256, hash, BigInteger.ValueOf(casuale));

            byte[] tsData = tsReq.GetEncoded();

            string urlTSA = string.Empty;

            if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"]))
            {
                urlTSA = ConfigurationManager.AppSettings["URL_TSA"].ToString();
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlTSA);
                req.Method      = "POST";
                req.ContentType = "application/timestamp-query";

                //Username e password per accedere alla Time Stamping Authority
                string pwd = string.Empty;
                if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["PASSWORD_UTENTE_TSA"]))
                {
                    pwd = ConfigurationManager.AppSettings["PASSWORD_UTENTE_TSA"].ToString();
                    req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(pwd)));
                }

                req.ContentLength = tsData.Length;

                Stream reqStream = req.GetRequestStream();
                reqStream.Write(tsData, 0, tsData.Length);
                reqStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                if (res == null)
                {
                    outputMarca.esito             = "KO";
                    outputMarca.descrizioneErrore = "Impossibile contattare la TSA o autorizzazione negata";
                    return(outputMarca);
                }
                else
                {
                    Stream            resStream = new BufferedStream(res.GetResponseStream());
                    TimeStampResponse tsRes     = new TimeStampResponse(resStream);
                    resStream.Close();
                    BusinessLogic.Documenti.DigitalSignature.VerifyTimeStamp checkMarca = new BusinessLogic.Documenti.DigitalSignature.VerifyTimeStamp();
                    outputMarca = checkMarca.Verify(tsReq, tsRes);
                }
            }
            else
            {
                outputMarca.esito             = "KO";
                outputMarca.descrizioneErrore = "Impossibile contattare la TSA o url configurata errata!";
                return(outputMarca);
            }

            return(outputMarca);
        }