Exemple #1
0
 /// <summary>
 /// Verifies a Digital Signature based on the encoding type
 /// </summary>
 /// <param name="encodingType"></param>
 /// <returns></returns>
 public bool VerifySignature(Encoding encodingType)
 {
     try
     {
         SignedData signedData = new SignedDataClass();
         Utilities  u          = new UtilitiesClass();
         if (_bDetached)
         {
             signedData.Content = u.ByteArrayToBinaryString(encodingType.GetBytes(Content));
             //signedData.set_Content(u.ByteArrayToBinaryString(encodingType.GetBytes(Content)));
         }
         signedData.Verify(SignedContent, Detached, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
         SignerCert = null;
         Signer s = (Signer)signedData.Signers[1];
         SignerCert = (Certificate)s.Certificate;
         if (!_bDetached)
         {
             //Content = encodingType.GetString((byte[])u.BinaryStringToByteArray(signedData.get_Content()));
             Content = encodingType.GetString((byte[])u.BinaryStringToByteArray(signedData.Content));
         }
         return(true);
     }
     catch (COMException e)
     {
         Console.WriteLine("{0}: {1}", e.Source, e.Message);
         return(false);
     }
 }
Exemple #2
0
        private byte[] CoSignBuffer(byte[] data, byte[] signdata)
        {
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                MessageBox.Show("не найден сертификат!");
                return(null);
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array = data;

            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            byte[] array2 = signdata;
            ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
            signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
            Store store2 = new StoreClass();

            store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
            for (int i = 1; i <= signedData.Signers.Count; i++)
            {
                Signer      signer2 = (Signer)signedData.Signers[i];
                Certificate pVal    = (Certificate)signer2.Certificate;
                store2.Add(pVal);
            }
            store2.Close();
            string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

            array3 = Convert.FromBase64String(s);
            return(array3);
        }
Exemple #3
0
        /// <summary>
        /// Signs the Data using a Digital Signature
        /// </summary>
        /// <param name="encodingType"></param>
        /// <returns></returns>
        public string SignData(Encoding encodingType)
        {
            //
            SignedData signedData = new SignedDataClass();
            Utilities  u          = new UtilitiesClass();

            //signedData.set_Content(u.ByteArrayToBinaryString(encodingType.GetBytes(Content)));
            signedData.Content = u.ByteArrayToBinaryString(encodingType.GetBytes(Content));
            //
            Signer signer = new CAPICOM.Signer();

            signer.Certificate = ClientCert;
            //
            DateTimeSigned(ref signer);
            //
            SignedContent = signedData.Sign(signer, Detached, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
            //
            return(SignedContent);
        }
Exemple #4
0
 protected override void Fill(ObjectWithId obj)
 {
     ExchangeRequest request = (ExchangeRequest) obj;
     LGREQ lgreq = Serializer.FromXml<LGREQ>(request.XmlIn);
     this.lastName.set_Text(lgreq.BODY_REQ.PERSON.LAST_NAME);
     this.firstName.set_Text(lgreq.BODY_REQ.PERSON.FIRST_NAME);
     this.middleName.set_Text(lgreq.BODY_REQ.PERSON.MIDDLE_NAME);
     this.birthDate.set_Text(lgreq.BODY_REQ.PERSON.BIRTH_DATE);
     this.phone.set_Text(lgreq.BODY_REQ.PERSON.PHONE);
     this.city.set_Text(lgreq.BODY_REQ.ADDRESS.CITY);
     this.street.set_Text(lgreq.BODY_REQ.ADDRESS.STREET_NAME);
     this.house.set_Text(lgreq.BODY_REQ.ADDRESS.HOUSE);
     this.flat.set_Text(lgreq.BODY_REQ.ADDRESS.FLAT);
     this.address.set_Text((request.Address == null) ? ((string) "не разобран") : request.Address.ToString());
     this.labelLgType.set_Text(lgreq.BODY_REQ.LGOTA.NAME);
     this.datePeriod.DateBegin = System.Convert.ToDateTime(lgreq.BODY_REQ.LGOTA.DATE_BEGIN);
     this.datePeriod.DateEnd = System.Convert.ToDateTime(lgreq.BODY_REQ.LGOTA.DATE_END);
     this.tbDocType.set_Text(lgreq.BODY_REQ.LGOTA_DOC.TYPE);
     this.tbDocSeries.set_Text(lgreq.BODY_REQ.LGOTA_DOC.SERIES);
     this.tbDocNumber.set_Text(lgreq.BODY_REQ.LGOTA_DOC.NUMBER);
     this.tbDocWhen.set_Text(lgreq.BODY_REQ.LGOTA_DOC.WHEN);
     this.tbDocWhere.set_Text(lgreq.BODY_REQ.LGOTA_DOC.WHERE);
     if (string.IsNullOrEmpty(lgreq.SIGNATURE))
     {
         this.labelSign.set_Text("В запросе не обнаружена цифровая подпись");
         this.labelSign.set_ForeColor(System.Drawing.Color.Red);
     }
     else
     {
         SignedData data = new SignedDataClass {
             Content = "Dio"
         };
         data.Verify(lgreq.SIGNATURE, false, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
         if (data.Content != lgreq.ORG.FIO)
         {
             this.labelSign.set_Text("Цифровая подпись не соответствует сертификату!");
             this.labelSign.set_ForeColor(System.Drawing.Color.Red);
         }
         else
         {
             this.labelSign.set_Text("Цифровая подпись найдена и успешно проверена для отправителя: " + lgreq.ORG.FIO);
             this.labelSign.set_ForeColor(System.Drawing.Color.Green);
         }
     }
 }
Exemple #5
0
        private byte[] SignBuffer(byte[] arr)
        {
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                MessageBox.Show("не найден сертификат!");
                return(null);
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array = arr;
            //using (FileStream fileStream = new FileStream(sFileIn, FileMode.Open, FileAccess.Read))
            //{
            //    array = new byte[fileStream.Length];
            //    fileStream.Position = 0L;
            //    fileStream.Read(array, 0, (int)fileStream.Length);
            //    fileStream.Close();
            //}
            //byte[] array2 = null;
            //bool flag = false;
            //if (File.Exists(sFileIn + ".sig"))
            //{
            //    flag = true;
            //    using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Open, FileAccess.Read))
            //    {
            //        array2 = new byte[fileStream.Length];
            //        fileStream.Position = 0L;
            //        fileStream.Read(array2, 0, (int)fileStream.Length);
            //        fileStream.Close();
            //    }
            //}
            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            //if (flag)
            //{
            //    ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
            //    signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
            //    Store store2 = new StoreClass();
            //    store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
            //    for (int i = 1; i <= signedData.Signers.Count; i++)
            //    {
            //        Signer signer2 = (Signer)signedData.Signers[i];
            //        Certificate pVal = (Certificate)signer2.Certificate;
            //        store2.Add(pVal);
            //    }
            //    store2.Close();
            //    string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
            //    array3 = Convert.FromBase64String(s);
            //}
//            else
            {
                //signedData.Content = utilities.ByteArrayToBinaryString(array);
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));

                string s = signedData.Sign(signer, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            return(array3);
            //using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Create, FileAccess.Write))
            //{
            //    fileStream.Write(array3, 0, array3.Length);
            //    fileStream.Close();
            //}
        }
Exemple #6
0
        private void SignFile(string sFileIn)
        {
            if (Path.GetExtension(sFileIn).ToUpper().Equals(".ZIP"))
            {
                SignZip(sFileIn);
                if (!cbExtSignZIP.Checked)
                {
                    return;
                }
            }
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                throw new ApplicationException("Сформировать ЭЦП невозможно: не найден действительный сертификат отправителя!");
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array;
            using (FileStream fileStream = new FileStream(sFileIn, FileMode.Open, FileAccess.Read))
            {
                array = new byte[fileStream.Length];
                fileStream.Position = 0L;
                fileStream.Read(array, 0, (int)fileStream.Length);
                fileStream.Close();
            }
            byte[] array2 = null;
            bool   flag   = false;

            if (File.Exists(sFileIn + ".sig"))
            {
                flag = true;
                using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Open, FileAccess.Read))
                {
                    array2 = new byte[fileStream.Length];
                    fileStream.Position = 0L;
                    fileStream.Read(array2, 0, (int)fileStream.Length);
                    fileStream.Close();
                }
            }
            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            if (flag)
            {
                // signedData.Content = "";

                //signedData.Content = Marshal.PtrToStringBSTR( utilities.ByteArrayToBinaryString(array));
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
                try
                {
                    signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
                }
                catch (Exception e)
                {
                    errlist.Add("Ошибка проверки подписи!" + sFileIn + ":" + e.Message);
                }
                Store store2 = new StoreClass();
                store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
                for (int i = 1; i <= signedData.Signers.Count; i++)
                {
                    Signer      signer2 = (Signer)signedData.Signers[i];
                    Certificate pVal    = (Certificate)signer2.Certificate;
                    store2.Add(pVal);
                }
                store2.Close();
                string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            else
            {
                //signedData.Content = utilities.ByteArrayToBinaryString(array);
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));

                string s = signedData.Sign(signer, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Create, FileAccess.Write))
            {
                fileStream.Write(array3, 0, array3.Length);
                fileStream.Close();
            }
        }