Example #1
0
        public void VerifyLastError()
        {
            CCypher.enumErrorClass errCls;
            int    errCod;
            string errDes;

            oDigest.GetLastError(out errCls, out errCod, out errDes);
            if (errCls > 0)
            {
                throw new Exception("CompEd err: " + errCls.ToString() + "," + errCod.ToString() + "," + errDes);
            }
        }
Example #2
0
        public String RecGetAllExpiryDate(int lev, byte[] p7m, ref SimplyCert firstExp, ref Hashtable SimCrtLst)
        {
            string LastErr = "";

            try
            {
                int nHandle = 0, nCountSignature = 0, nCountTimeStamp = 0, nCountSignaturePDF = 0;
                int nHandlePDF = 0, nP7KHandle = 0;

                oDigest.PADES_OpenFromBuf(p7m, out nHandlePDF);
                if (nHandlePDF > 0)
                {
                    nCountSignaturePDF = oDigest.PADES_GetSignatureCount(nHandlePDF);
                    for (int j = 0; j < nCountSignature; j++)
                    {
                        int    nHandleX509 = 0;
                        Object vtCertBuf   = null;

                        oDigest.PADES_GetSignatureObject(nHandlePDF, j, out nP7KHandle);

                        CCypher.enumHashType nEnumHashType = CCypher.enumHashType.HTC_SHA1;
                        CCypher.enumASN1Type cct;
                        object obj;
                        oDigest.P7kGetSignAttribute(nP7KHandle, 0, j, "unstructuredName", out cct, out obj);
                        string tmpHeader = obj as string;
                        oDigest.P7kGetSignerInfo(nP7KHandle, j, out nEnumHashType, out vtCertBuf);
                        oDigest.x509LoadFromBuf(vtCertBuf, out nHandleX509);

                        string sRetInfo = "", Name = "", fc = "", des = "", role = "", iss = "", org = "", email = "", serial = "", vers = "", id = "";
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VALID_TO, out sRetInfo);
                        DateTime dt = new DateTime(int.Parse(sRetInfo.Substring(6, 4)), int.Parse(sRetInfo.Substring(3, 2)), int.Parse(sRetInfo.Substring(0, 2)));
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VALID_FROM, out sRetInfo);
                        DateTime dtvf = new DateTime(int.Parse(sRetInfo.Substring(6, 4)), int.Parse(sRetInfo.Substring(3, 2)), int.Parse(sRetInfo.Substring(0, 2)));
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_NAME, out Name);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_FISCALCODE, out fc);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_ISSUER, CCypher.enumCertInfoItem.CI_NAME, out iss);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_ALL, CCypher.enumCertInfoItem.CI_DESCRIPTION, out des);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_ROLE, out role);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_EMAIL, out email);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_SERIALNUMBER, out serial);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VERSION, out vers);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_ID, out id);

                        if ((DateTime.Compare(firstExp.Expiry, dt) > 0 || j == 0) && firstExp.Type != TOK_TypeTS)
                        {
                            firstExp.Level        = lev;
                            firstExp.Type         = TOK_TypeSign;
                            firstExp.Name         = Name;
                            firstExp.Expiry       = dt;
                            firstExp.FiscalCode   = fc;
                            firstExp.Role         = role;
                            firstExp.Description  = des;
                            firstExp.Issuer       = iss;
                            firstExp.eMail        = email;
                            firstExp.ValidFrom    = dtvf;
                            firstExp.HeaderInfo   = tmpHeader;
                            firstExp.SerialNumber = serial;
                            firstExp.Version      = vers;
                            firstExp.Id           = id;
                        }

                        SimplyCert sc = new SimplyCert();
                        sc.Level        = lev;
                        sc.Type         = TOK_TypeSign;
                        sc.Name         = Name;
                        sc.Expiry       = dt;
                        sc.FiscalCode   = fc;
                        sc.ValidFrom    = dtvf;
                        sc.Description  = des;
                        sc.Issuer       = iss;
                        sc.Role         = role;
                        sc.eMail        = email;
                        sc.HeaderInfo   = tmpHeader;
                        sc.SerialNumber = serial;
                        sc.Version      = vers;
                        sc.Id           = id;
                        SimCrtLst.Add((ele++).ToString(), (object)sc);

                        oDigest.x509Free(nHandleX509);
                        oDigest.P7kFree(nP7KHandle);

                        // nei PDF non c'รจ ricorsione sui contenuti
                    }

                    if (nHandlePDF != 0)
                    {
                        oDigest.PADES_Free(nHandlePDF);
                    }
                }

                // Inizio CAdES
                oDigest.P7kLoadFromBuf(p7m, 1, out nHandle);
                if (nHandle > 0)
                {
                    oDigest.P7kGetSignatureCount(nHandle, out nCountSignature);

                    for (int j = 0; j < nCountSignature; j++)
                    {
                        int    nHandleX509 = 0;
                        Object vtCertBuf   = null;
                        CCypher.enumHashType nEnumHashType = CCypher.enumHashType.HTC_SHA1;
                        CCypher.enumASN1Type cct;
                        object obj;
                        oDigest.P7kGetSignAttribute(nHandle, 0, j, "unstructuredName", out cct, out obj);
                        string tmpHeader = obj as string;
                        oDigest.P7kGetSignerInfo(nHandle, j, out nEnumHashType, out vtCertBuf);
                        oDigest.x509LoadFromBuf(vtCertBuf, out nHandleX509);

                        string sRetInfo = "", Name = "", fc = "", des = "", role = "", iss = "", org = "", email = "", serial = "", vers = "", id = "";
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VALID_TO, out sRetInfo);
                        DateTime dt = new DateTime(int.Parse(sRetInfo.Substring(6, 4)), int.Parse(sRetInfo.Substring(3, 2)), int.Parse(sRetInfo.Substring(0, 2)));
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VALID_FROM, out sRetInfo);
                        DateTime dtvf = new DateTime(int.Parse(sRetInfo.Substring(6, 4)), int.Parse(sRetInfo.Substring(3, 2)), int.Parse(sRetInfo.Substring(0, 2)));
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_NAME, out Name);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_FISCALCODE, out fc);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_ISSUER, CCypher.enumCertInfoItem.CI_NAME, out iss);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_ALL, CCypher.enumCertInfoItem.CI_DESCRIPTION, out des);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_ROLE, out role);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_EMAIL, out email);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_SERIALNUMBER, out serial);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_VERSION, out vers);
                        oDigest.x509GetInfo(nHandleX509, CCypher.enumCertInfoCategory.CC_GENERAL, CCypher.enumCertInfoItem.CI_ID, out id);

                        if ((DateTime.Compare(firstExp.Expiry, dt) > 0 || j == 0) && firstExp.Type != TOK_TypeTS)
                        {
                            firstExp.Level        = lev;
                            firstExp.Type         = TOK_TypeSign;
                            firstExp.Name         = Name;
                            firstExp.Expiry       = dt;
                            firstExp.FiscalCode   = fc;
                            firstExp.Role         = role;
                            firstExp.Description  = des;
                            firstExp.Issuer       = iss;
                            firstExp.eMail        = email;
                            firstExp.ValidFrom    = dtvf;
                            firstExp.HeaderInfo   = tmpHeader;
                            firstExp.SerialNumber = serial;
                            firstExp.Version      = vers;
                            firstExp.Id           = id;
                        }

                        SimplyCert sc = new SimplyCert();
                        sc.Level        = lev;
                        sc.Type         = TOK_TypeSign;
                        sc.Name         = Name;
                        sc.Expiry       = dt;
                        sc.FiscalCode   = fc;
                        sc.ValidFrom    = dtvf;
                        sc.Description  = des;
                        sc.Issuer       = iss;
                        sc.Role         = role;
                        sc.eMail        = email;
                        sc.HeaderInfo   = tmpHeader;
                        sc.SerialNumber = serial;
                        sc.Version      = vers;
                        sc.Id           = id;

                        SimCrtLst.Add((ele++).ToString(), (object)sc);
                        oDigest.x509Free(nHandleX509);
                    }
                    object OutBuf;
                    oDigest.P7kContentReadToBuf(nHandle, out OutBuf, 0);
                    oDigest.P7kFree(nHandle);
                    RecGetAllExpiryDate(lev + 1, (byte[])OutBuf, ref firstExp, ref SimCrtLst);
                }

                // marche temporali
                oDigest.P7xLoadFromBuf(p7m, out nHandle);
                if (nHandle > 0)
                {
                    oDigest.P7xGetTSCount(nHandle, out nCountTimeStamp);
                    //SimCrtLst=new SimplyCert[nCountTimeStamp];

                    for (int j = 0; j < nCountTimeStamp && LastErr.Length == 0; j++)
                    {
                        int nHandleTS = 0;

                        oDigest.P7xGetTS(nHandle, j, out nHandleTS);
                        if (nHandleTS == 0)
                        {
                            int ErrCode;
                            CCypher.enumErrorClass ErrClass;
                            oDigest.GetLastError(out ErrClass, out ErrCode, out LastErr);
                        }
                        else
                        {
                            object DaT;
                            oDigest.tsGetDateAndTime(nHandleTS, out DaT);
                            DateTime dt = (DateTime)DaT;
                            oDigest.tsGetExpieryDateAndTime(nHandleTS, out DaT);
                            DateTime dte = (DateTime)DaT;

                            if ((DateTime.Compare(firstExp.Expiry, dte) > 0 || j == 0) && firstExp.Type != TOK_TypeTS)
                            {
                                firstExp.Level  = lev;
                                firstExp.Type   = TOK_TypeTS;
                                firstExp.Name   = (j + 1).ToString();
                                firstExp.Expiry = dte;
                            }

                            SimplyCert sc = new SimplyCert();
                            sc.Level = lev;
                            sc.Type  = TOK_TypeTS;
                            oDigest.tsGetTSPInfo(nHandleTS, CCypher.enumCertInfoCategory.CC_SUBJECT, CCypher.enumCertInfoItem.CI_NAME, out sc.Name);
                            oDigest.tsGetTSPInfo(nHandleTS, CCypher.enumCertInfoCategory.CC_ISSUER, CCypher.enumCertInfoItem.CI_NAME, out sc.Issuer);
                            oDigest.tsGetTSPInfo(nHandleTS, CCypher.enumCertInfoCategory.CC_ALL, CCypher.enumCertInfoItem.CI_NAME, out sc.Description);
                            //sc.Name=(j+1).ToString();
                            sc.Expiry    = dte;
                            sc.ValidFrom = dt;
                            SimCrtLst.Add((ele++).ToString(), (object)sc);

                            oDigest.tsFree(nHandleTS);
                        }
                    }
                    object OutBuf;
                    oDigest.P7xContentReadToBuf(nHandle, out OutBuf, 0);
                    oDigest.P7xFree(nHandle);
                    RecGetAllExpiryDate(lev + 1, (byte[])OutBuf, ref firstExp, ref SimCrtLst);
                }
            }
            catch (Exception e)
            {
                LastErr = e.Message;
            }
            return(LastErr);
        }