/// <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); } }
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); }
/// <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); }
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); } } }
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(); //} }
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(); } }