public bool KartveOkuyucuKontrol() { // ilk giriste terminal sayisini degiskene kaydet, sertifikayi goster ve degiskene kaydet String[] terminals = SmartOp.getCardTerminals(); Program.TerminalSayisi = terminals.Length; if (terminals == null || terminals.Length == 0) { MesajiIsle("Kart takılı bir kart okuyucu bulunamadı. E-İmza programına girmeden evvel imza için kullanacağınız kartı takmalısınız.", 1); // eskiden bundan sonra cikartmiyordum, eimza kısmında kart değiştigi veya sonradan takıldığı ortaya cikiyordu. // orada uyari alip cikiyordu (karti programa girdikten sonra degistirmeyin veya onceden takiniz gibi...) // Bir tus konulup kartlari Oku diye girdikten sonra manuel olarak kart bilgisi almasi saglanabilir ama gerekli oldugunu sanmiyorum. //MessageBox.Show("Kart takılı kart okuyucu bulunamadı", "", MessageBoxButtons.OK, // System.Windows.Forms.MessageBoxIcon.Error, // System.Windows.Forms.MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); return(false); // throw new SmartCardException("Kart takılı kart okuyucu bulunamadı"); } SmartCardManager scmgr = SmartCardManager.getInstance(); { ECertificate signingCert = scmgr.getSignatureCertificate(true, false); lbSertifikaSahibi.Text = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); Program.SertifikaBilgisi = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); //lbTCKimlikNo.Text = TerminalSayisi } return(true); }
public ECertificate getSignatureCertificate(bool checkIsQualified, bool checkBeingNonQualified) { if (mSignatureCert == null) { List <byte[]> allCerts = bsc.getSignatureCertificates(); mSignatureCert = selectCertificate(checkIsQualified, checkBeingNonQualified, allCerts); // tcno ve adsoyad alma denemesi string AdiSoyadi, TCKimlikNo = mSignatureCert.ToString(); AdiSoyadi = TCKimlikNo; int startIndex = TCKimlikNo.IndexOf("SERIALNUMBER="); TCKimlikNo = TCKimlikNo.Substring(startIndex + 13, 11); startIndex = AdiSoyadi.IndexOf("CN="); int endIndex = AdiSoyadi.IndexOf(",", startIndex); AdiSoyadi = AdiSoyadi.Substring(startIndex + 3, endIndex - (startIndex + 3)); // tcno ve adsoyad alma denemesi } return(mSignatureCert); }
public bool KartveOkuyucuKontrol() { String[] terminals = SmartOp.getCardTerminals(); Program.TerminalSayisi = terminals.Length; if (terminals == null || terminals.Length == 0) { return(false); } SmartCardManager scmgr = SmartCardManager.getInstance(); { ECertificate signingCert = scmgr.getSignatureCertificate(true, false); LBLTCKIMLIK.Text = Bul(signingCert.ToString(), "SERIALNUMBER=", ","); LBLADISOYADI.Text = Bul(signingCert.ToString(), "CN=", ","); LBLSERIAL.Text = Bul(signingCert.ToString(), "Serial:", "Valid from").TrimStart(' '); LBLBASTARIH.Text = Bul(signingCert.ToString(), "Valid from", "to").TrimStart(' ').TrimEnd(' '); LBLBITTARIH.Text = Bul(signingCert.ToString(), " to", "Ca:").TrimStart(' ').TrimEnd(' '); DateTime bitis_tarihi = DateTime.Parse(LBLBITTARIH.Text); DateTime baslangic_tarihi = DateTime.Parse(LBLBASTARIH.Text); DateTime simdi = DateTime.Now; int kalangun = GunFarkikBul(simdi, bitis_tarihi); if (bitis_tarihi < simdi) { LBLKALANGUN.Text = "- " + kalangun.ToString(); LBLKALANGUN.ForeColor = Color.Red; } else { LBLKALANGUN.Text = kalangun.ToString(); } Program.SertifikaBilgisi = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); } return(true); }
public string eReceteImzala(string eReceteSourceFilePath, string eReceteDestFilePath, string GelenXML, Boolean DosyayaYaz) { string retSignedXmlPath = null; //Load license from file //LisansHelper.loadFreeLicenseBase64(); //LisansHelper.loadFullTestLicense(); // LisansHelper.loadFreeLicense(); // LisansHelper.loadLicense(); try { // create context with working dir string currentDirectory = Directory.GetCurrentDirectory(); Context context = new Context(currentDirectory); // create signature according to context, // with default type (XADES_BES) XMLSignature signature = new XMLSignature(context); signature.SigningTime = DateTime.Now; if (GelenXML != "") { InMemoryDocument inMMDoc = new InMemoryDocument(System.Text.Encoding.UTF8.GetBytes(GelenXML), "", null, null); signature.addDocument(inMMDoc); } else { // add document as reference, and keep BASE64 version of data // in an <Object tag, in a way that reference points to // that <Object // (embed=true) null signature.addDocument(eReceteSourceFilePath, "text/plain", true); } // bu kismin alternatifi TestEnvelopingSignature dosyasinda var // if (Program.ParamTCKimlikNo != "") if (Program.ParamOto == "1") { SmartCardManagerKimlikNodanSec smc = SmartCardManagerKimlikNodanSec.getInstance(0); // 0 server version // sanirim smc nesnesi getInstance icinde uygun karta gore olusuyor... altta masaustu icin de uygula... 10.12.2015 if (Program.KartOkuyucuYok == 1) { return(null); } ECertificate signingCert = smc.getSignatureCertificate(true, false); //İlk parameter Kart Pin BaseSigner baseSigner = smc.getSigner(Program.PinKodu, signingCert); // "12345" bool validCertificate = isValidCertificate(signingCert); if (!validCertificate) { MesajiIsle("İmza atılmak istenen sertifika geçerli değil." + Program.HataMesaji, 1); return(null); } // add certificate to show who signed the document signature.addKeyInfo(signingCert); //Signer Oluşturma signature.sign(baseSigner); } else { // 1 desktop version // imzalama oncesi kartta instance acma SmartCardManagerKimlikNodanSec smc = SmartCardManagerKimlikNodanSec.getInstance(1); // 1 desktop version // smc nesnesi getInstance icinde uygun karta gore olusacak if (Program.KartOkuyucuYok == 1) { return(null); } ECertificate signingCert = smc.getSignatureCertificate(true, false); //İlk parameter Kart Pin BaseSigner baseSigner = smc.getSigner(Program.PinKodu, signingCert); // "12345" if (baseSigner == null) { return(null); } bool validCertificate = isValidCertificate(signingCert); if (!validCertificate) { MesajiIsle("İmza atılmak istenen sertifika geçerli değil." + Program.HataMesaji, 1); return(null); } if (Program.SertifikaBilgisi != "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString()) { if (Program.SertifikaBilgisi == "Sertifika ve Sahiplik Bilgisi: ") { MesajiIsle("Akıllı kartı, imza ekranına girmeden evvel takınız." + Program.HataMesaji, 1); return(null); } MesajiIsle("Akıllı kart, imza ekranına girildikten sonra değiştirilmiş, işlemi kart değiştirmeden yapınız." + Program.HataMesaji, 1); return(null); } // add certificate to show who signed the document signature.addKeyInfo(signingCert); //Signer Oluşturma signature.sign(baseSigner); // eski yontem //if (Program.KartOkuyucuYok == 1) return null; //ECertificate signingCert = smc.getSignatureCertificate(true, false); //BaseSigner baseSigner = smc.getSigner(Program.PinKodu, signingCert); // "12345" //bool validCertificate = isValidCertificate(signingCert); //if (!validCertificate) //{ // MesajiIsle("İmza atılmak istenen sertifika geçerli değil." + Program.HataMesaji, 1); // return null; //} //// add certificate to show who signed the document //signature.addKeyInfo(signingCert); ////Signer Oluşturma //signature.sign(baseSigner); } //FileInfo sourceFileInfo = new FileInfo(eReceteSourceFilePath); //string destDirPath = sourceFileInfo.Directory.FullName; if (DosyayaYaz) { retSignedXmlPath = eReceteDestFilePath.Replace(".xml", ".xsig"); FileStream signatureFileStream = new FileStream(retSignedXmlPath, FileMode.Create); signature.write(signatureFileStream); signatureFileStream.Close(); // mesaji main'de button click sonundan buraya aldim if (retSignedXmlPath != null) { // tBoxSignedERecetePath.Text = signedFilePath; MesajiIsle(retSignedXmlPath + " konumunda imzalı E-Reçete oluşturuldu.", 0); } } else { MesajiIsle("E-Reçete imza verisi hazır", 0); } // return retSignedXmlPath; return(signature.Document.OuterXml); } catch (XMLSignatureRuntimeException exc) { // cant create signature MesajiIsle("Hata Oluştu." + exc.Message, 1); } catch (XMLSignatureException exc) { // cant create signature MesajiIsle("Hata Oluştu." + exc.Message, 1); } catch (Exception exc) { // probably couldn't write to the file MesajiIsle("Hata Oluştu." + exc.Message, 1); } // return retSignedXmlPath; return(""); }
/* * * @throws SmartCardException */ /** * BaseSigner interface for the requested certificate. Do not forget to logout after your crypto * operation finished * @param aCardPIN * @param aCert * @return * @throws SmartCardException */ public SmartCardManagerKimlikNodanSec(int desktop) { try { LOGGER.Debug("New SmartCardManager will be created"); String[] terminals = SmartOp.getCardTerminals(); if (terminals == null || terminals.Length == 0) { MesajiIsle("İçinde kart takılı bir kart okuyucu bulunamadı-SmartCardManagerKimlikNodanSec", 1); Program.KartOkuyucuYok = 1; return; // throw new SmartCardException("Kart takılı kart okuyucu bulunamadı"); } LOGGER.Debug("Kart okuyucu sayısı : " + terminals.Length); if (terminals.Length != Program.TerminalSayisi && Program.TerminalSayisi != 0) { MesajiIsle("Kart seçildikten sonra imzalama aşamasında yeni kart okuyucu takıldı.", 1); Program.KartOkuyucuYok = 1; return; } if (desktop == 0) { //******************************* // sadece parametre ile gelen slotID & karttipine session ac //******************************* // dbden oku MesajiIsle("ParamSQLServer:" + Program.ParamSQLServer + " " + Program.ParamSlotID, 0); String SqlCumlesi = ""; SqlCumlesi = "select * from AkilliKartlar where TCKimlikNo = '" + Program.ParamTCKimlikNo + "' and SlotID = " + Program.ParamSlotID; SqlConnection SQLFormVeriBaglantisi = new SqlConnection(); SQLFormVeriBaglantisi.ConnectionString = "server=" + Program.ParamSQLServer + ";user="******";pwd=" + Program.ParamSQLPassword + ";database=konur;"; SQLFormVeriBaglantisi.Open(); SqlCommand qryVeriOku = new SqlCommand(SqlCumlesi, SQLFormVeriBaglantisi); SqlDataReader reader = qryVeriOku.ExecuteReader(); string KayitliKartTipi = "", KayitliAdiSoyadi = "", KayitliPinKodu = ""; //while ( reader.Read(); KayitliKartTipi = reader["KartTipi"].ToString().Trim(); KayitliAdiSoyadi = reader["AdiSoyadi"].ToString().Trim(); reader.Close(); // ikinci veri okuma kismi // PIN kodunun teyidi SqlCumlesi = "select EimzaPin from TnmPersonel where TCKimlikNo = '" + Program.ParamTCKimlikNo + "' and isnull(EimzaPin,'') <> '' and CalismaDurumu = 'E' "; qryVeriOku.CommandText = SqlCumlesi; reader = qryVeriOku.ExecuteReader(); reader.Read(); KayitliPinKodu = reader["EimzaPin"].ToString().Trim(); reader.Close(); // baglantiyi kapat SQLFormVeriBaglantisi.Close(); if (KayitliKartTipi == "") { MesajiIsle("Kart Tipi kaydı AkilliKartlar tablosunda bulunamadı", 1); } if (KayitliPinKodu == "") { MesajiIsle("PIN Kodu kaydı Personel tablosunda bulunamadı. TCKimlikNo: " + Program.ParamTCKimlikNo, 1); } if (KayitliPinKodu != Program.ParamPin) { MesajiIsle("Bulunan PIN Kodu kaydı gelen PIN kodu ile eşleşmiyor. TnmPersonel PIN: " + KayitliPinKodu + " Param.PIN: " + Program.ParamPin + " TCKimlikNo: " + Program.ParamTCKimlikNo, 1); } MesajiIsle("KayitliKartTipi Okundu:" + KayitliKartTipi + " " + KayitliAdiSoyadi + "SlotID: " + Program.ParamSlotID, 0); // MesajiIsle("Secili SlotID:" + PTerminal, 0); try { bsc = new P11SmartCard(CardTypeConverter.AsCardType(KayitliKartTipi)); MesajiIsle("new P11SmartCard ok: " + KayitliKartTipi, 0); bsc.openSession(Convert.ToInt64(Program.ParamSlotID)); } catch { MesajiIsle("Kartı otomatik açmada hata oluştu:" + KayitliKartTipi + " " + KayitliAdiSoyadi, 0); //// etugra //bsc = new P11SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.SAFESIGN); //bsc.openSession(52481); ////MessageBox.Show(index.ToString() + " nolu terminal serino"); ////MessageBox.Show(StringUtil.ToString(bsc.getSerial())); ////MessageBox.Show("Serino gösterdi"); //// continue; } mSerialNumber = StringUtil.ToString(bsc.getSerial()); mSlotCount = terminals.Length; getSignatureCertificate(true, false); String Temp = mSignatureCert.ToString(); int startIndex1 = Temp.IndexOf("SERIALNUMBER="); //TC = Temp.Substring(startIndex1 + 13, 11); // adsoyad alma int startIndex2 = Temp.IndexOf("CN="); int endIndex = Temp.IndexOf(",", startIndex2); //Ad=Temp.Substring(startIndex2 + 3, endIndex - (startIndex2 + 3)); if (Program.ParamTCKimlikNo == Temp.Substring(startIndex1 + 13, 11) && Program.ParamAdiSoyadi == Temp.Substring(startIndex2 + 3, endIndex - (startIndex2 + 3))) { MesajiIsle("Otomatik olarak dogru karta konumlandi", 0); } else {// MesajiIsle("Dogru karta konumlanamadi. Karttaki TCNo ve Isim:" + // Temp.Substring(startIndex1 + 13, 11) +" "+ Temp.Substring(startIndex2 + 3, endIndex - (startIndex2 + 3))+ // ", Recetedeki Doktor TCNo ve Isim:" + Program.ParamTCKimlikNo + " " + Program.ParamAdiSoyadi, 1); } } else { // desktop = 1 ise // imzalama oncesi session acma kismi //******************************* // kart tipini deneyerek bul ve o kart tipine session ac //******************************* try { // sadece parametre ile gelen (giriste ilk timerda okunuyor ya) slotID & karttipine session ac bsc = new P11SmartCard(CardTypeConverter.AsCardType(Program.CardType)); bsc.openSession(Convert.ToInt64(Program.ParamSlotID)); // sonra tc, serial kontrolu falan yapmak lazim programa girip oto. kart okunduktan sonra kart degismis mi diye // .. // ... } catch { SmartCard sc = null; string KartTipi = ""; //, AdiSoyadi = "", TCKimlikNo = ""; // aslinda giriste okudugundan burada sadece giriste elde edilen terminal, slotid ve cardtype degerleri uzerinden baglanip // seri no kontrolu yapmali try sc catch kisimlarini kaldirmali sadece giriste birakmali... 11.12.2015 try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.AKIS); } catch { try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.SAFESIGN); } catch { try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.GEMPLUS); } catch { try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.TKART); } catch { try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.ALADDIN); } catch { try { sc = new SmartCard(tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11.CardType.SEFIROT); //PresentSlots = sc.getTokenPresentSlotList(); // tokenli slot listesini al //for (m = 0; m < PresentSlots.Length; m++) //{ // ListSmartCard.Add(new P11SmartCard(sc.getCardType())); // ListSmartCard[index].openSession(PresentSlots[m]); // etugra icin 52481 // tekkartSerialNumber = StringUtil.ToString(ListSmartCard[index].getSerial()); // // sertifika getirme islemi // ImzaSertifikasiGetirTek(true, false, index); // PresentSlots[m].ToString(); // index = index + 1; //} } catch { } } } } } } if (sc != null) { // slotid tesbit et long[] PresentSlots; // long SlotID = 0; PresentSlots = sc.getTokenPresentSlotList(); // tokenli slot listesini al if (PresentSlots.Length == 1) { Program.ParamSlotID = PresentSlots[0].ToString(); } else { Program.ParamSlotID = SmartCardManager.askOptionValue(null, null, PresentSlots, "Slot Listesi", new String[] { "Tamam" }); } KartTipi = sc.getCardType().ToString(); try { bsc = new P11SmartCard(sc.getCardType()); MesajiIsle("SmartCard Type: " + KartTipi + " SlotID: " + Program.ParamSlotID, 0); bsc.openSession(Convert.ToInt64(Program.ParamSlotID)); } catch { MesajiIsle("Kartı açmada hata oluştu. Kart Tipi: " + KartTipi + " SlotID: " + Program.ParamSlotID, 0); } } else { MesajiIsle("Kart tipi belirlenemedi", 0); } } //mSerialNumber = StringUtil.ToString(bsc.getSerial()); //mSlotCount = terminals.Length; getSignatureCertificate(true, false); String Temp = mSignatureCert.ToString(); // adsoyad alma (gereksiz... labela koymak istersen dursun, degilse sil...) 11.12.2015 //int startIndex1 = Temp.IndexOf("SERIALNUMBER="); //int startIndex2 = Temp.IndexOf("CN="); //int endIndex = Temp.IndexOf(",", startIndex2); //KartTipi = sc.getCardType().ToString(); //TCKimlikNo = Temp.Substring(startIndex1 + 13, 11); //AdiSoyadi = Temp.Substring(startIndex2 + 3, endIndex - (startIndex2 + 3)); } } catch (SmartCardException e) { throw e; } catch (PKCS11Exception e) { throw new SmartCardException("Pkcs11 exception", e); } catch (IOException e) { throw new SmartCardException("Smart Card IO exception - Detay bilgilerine bakınız", e); } }