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_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
Merhaba,
YanıtlaSilkart terminalini okumasına rağmen sc.getTokenPresentSlotList() 0 dönüyor. Nasıl bir yol izleyebilirim?
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...
SilBu yorum yazar tarafından silindi.
YanıtlaSil