6 Aralık 2015 Pazar

E-İmza'da bütün kart türlerinin otomatik algılanabilmesi

C# ile E-İmza

E-İmza prosedürünün hangi kart sağlayıcı olursa olsun çalışabilmesi için (E-Tuğra, TurkTrust, E-Güven veya E-İmzaTR)

Smartcard yapısının oluşturulduğu kod satırının her bir kart tipi için try-catch ile denenmesi ve hangisi başarılı ise ona uygun SC (smartcard) yapısının oluşturulması yeterlidir:



        SmartCard sc;
        long[] PresentSlots;

        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{}
        ...
        ...







Sonra isterseniz oluşan sc yapısından cardtype string olarak alabiliyorsunuz. Gerçi normalde gerek yok:




sc.getCardType().ToString();
Sonraki aşamada
bsc = new P11SmartCard(sc.getCardType());

  long[] PresentSlots;
  PresentSlots = sc.getTokenPresentSlotList(); // tokenli slot listesini al
  // secim kutusu haline getirerek slotid al
  long SlotID = 0;
  if (PresentSlots.Length == 1)
    SlotID = PresentSlots[0];
  else
  {
    SlotID = Convert.ToInt64(askOptionValue(null, null, PresentSlots, "Slot Listesi", new String[] { "Tamam" }));
  }

bsc.openSession(sc.getTokenPresentSlotList())


Bu şekilde bir yol takip edilebilir.

Kullanılabilecek kart tipleri:

                    CardType.AEPKEYPER;
                    CardType.AKIS;
                    CardType.AKIS_KK;
                    CardType.ALADDIN;
                    CardType.CARDOS;
                    CardType.DATAKEY;
                    CardType.GEMPLUS;
                    CardType.KEYCORP;
                    CardType.NCIPHER;
                    CardType.SAFESIGN;
                    CardType.SEFIROT;
                    CardType.TKART;
                    CardType.UNKNOWN;
                    CardType.UTIMACO;
                    CardType.UNKNOWN;

Açık kaynak kodlu uygulama:
https://sourceforge.net/projects/eimza/

İbrahim KAZANCI
Healthy HBYS

3 yorum:

  1. Merhaba,
    kart terminalini okumasına rağmen sc.getTokenPresentSlotList() 0 dönüyor. Nasıl bir yol izleyebilirim?

    YanıtlaSil
    Yanıtlar
    1. Akıllı kartın sürücüsü yüklenmemiş olabilir. Markasına göre uygun sürücü yüklediniz mi? KamuSM, EGüven, TürkTrust vs. hangisi ise uygun sürücüyü yüklemek gerekiyor. Terminali görüp içindeki kartı görememe durumu var gibi geldi...

      Sil
  2. Bu yorum yazar tarafından silindi.

    YanıtlaSil