uFR API - opis

Ispis

 

IS21 serija čitača MIFARE kartica - Win API (Application Programming Interface)


IS21 serija čitača radi sa Mifare® Classic serijom beskontakih kartica čiji je komunikacioni interfejs saglasan ISO/IEC 14443 A standardu.

Budući da MIFARE® kartice imaju mnoštvo specifičnosti koje nisu podržane ni u jednom standardnom Win API, IS21 serija čitača MIFARE kartica se isporučuje sa zasebnim API interfejsom koji je sadržan u DLL biblioteci pod nazivom is21.dll


Alternativno se sa ovim čitačima može komunicirati preko virtuelnog COM porta i upotrebom odgovarajućeg raspoloživog IS21-VCOM protokola. Na ovaj način IS21 čitači se mogu koristiti na ma kojoj platformi za koju još uvek ne postoji direktna softverska podrška (Mac OS X, Linux, Linux x86_64, Windows CE (4.2, 5.2, 6.0 za čitav spektar procesora), Windows Mobile (verzije 5 i 6 za x86), PocketPC 2003 (za x86 i ARM/XScale procesore)).

Specifikacija API (posredno se odnosi i na IS21-VCOM protokol) sadrži funkcije koje:

● emuliraju linearni adresni prostor na MIFARE® karticama,
● direktno adresiraju blokove na MIFARE® karticama - blokovki adresni mod,
● indirektno adresiraju blokove na MIFARE® karticama kombinovanjem adresa sektora i blokova u okviru sektora - sektorski adresni mod.

Ovaj način adresiranje podataka vrši se u skladu sa adresiranjem prema dokumentaciji proizvođača MIFARE® kartica.


Omogućuje 4 metoda dokazivanja autentičnosti (authentication) prilikom pristupa podacima na kartici:

● “Reader key authentication” - podrazumevani mod dokazivanja autentičnosti. Ključevi za ovaj mod su smešteni u čitač (maksimalno 32 ključa sa indeksima od 0 do 31) i odgovarajućim funkcijama se šalje indeks ključa. Kod ove metode dokazivanja autentičnosti, u slučaju funkcija koje emuliraju linearni adresni proctor podrazumeva se upotreba istog ključa za sve sektore (ili bar za one koji su u zadanom opsegu za linearno adresiranje).






● “Automatic key mode 1” (AKM1) i “Automatic key mode 2” (AKM2) su opcioni, automatski modovi dokazivanja autentičnosti. Omogućuju automatski izbor ključeva pohranjenih u čitaču na osnovu bloka koji se adresira ili kombinacije adresa sektora i blokova u okviru sektora. Ovi modovi mogu se koristiti i kod emulacije linearnog adresnog prostora jer se nakon konverzije adresa u softveru čitača vrši automatski izbor ključa za proveru autentičnosti datog bloka odnosno sektora. Razlika između AKM1 iAKM2 je samo u načinu na koji se vrši automatski izbor ključeva A i B.

Pri korišćenju AKM1 moda uzima se da indeksi ključeva u čitaču od 0 do 15 odgovaraju A ključevimaza sektore 0 do 15 i da indeksi ključeva u čitaču od 16 do 31 odgovaraju B ključevima za sektore 0 do 15.

Kada se koristi AKM2 mod, parni indeksi ključeva u čitaču (0, 2, ... , 28, 30) se uzimaju kao A ključeviza sektore 0 do 15 respektivno a neparni indeksi ključeva u čitaču redom odgovaraju B ključevima za sektore 0 do 15. Ovo svakako važi za kartice MIFARE® 1k.

Kod MIFARE® MINI kartica može se koristiti samo po prvih pet ključeva A i B (u AKM1indeksi ključeva 0 do 4 za A ključeve i 16 do 20 za B ključeve i u AKM2 modu za A ključeve indeksi 0, 2, 4, 6 i 8 a za B ključeve 1, 3, 5, 7 i 9) jer kartice sadrže samo toliko sektora.

Kod MIFARE® 4k imamo 40 sektora te su donji i gornji adresni prostori od po 2k organizovani. Kod ovih kartica se AKM1 i AKM2 koriste tako da isti indeksi ključeva u čitaču odgovaraju sektorima 0 do 15 i 16 do 32. Za poslednjih 8 sektora (sektori 32 do 39) koriste se isti ključevi čitača koji odgovaraju sektorima 0 do 7 odn. 16 do 23.



Poslednji metod dokazivanja autentičnosti je “Provided key” (PK). U ovom modu se ne koriste ključevi pohranjeni u čitač već se API funkcijama ključevi prosleđuju direktno iz koda. Ovaj mod ne pruža sigurnost pa se se njegovo korišćenje ne preporučuje osim u strogo kontrolisanim uslovima ili u svrhu testiranja.

Implementirana je posebna funkcija za upis sector trailer blokova na karticama, kojom je veoma uprošćen proračun vrednosti bajtova u kojima su sadržani bitovi pristupa. Ovim je izbegnuta opasnost da se trajno blokiraju celi sektori na kartici usled pogrešnog formata bitova kojima se kontroliše pristup blokovima datog sektora.

Za one iskusnije, koji su već radili sa MIFARE karticama, ostavljena je tzv. unsafe varijanta za manipulisanje sektor trailer blokovima.

● Za emulaciju linearnog moda postoji metod koji, uslovno rečeno, formatira sve sector trailer blokove kartice na isti način tj. za celu karticu se postavljaju jedinstveni ključevi i bitovi pristupa. Ovim je veoma pojednostavljen postupak inicijalizacije kartica za linearni pristup.

● API sadrži skup funkcija za manipulisanje  value blokovima na kartici. Podržani su upis i čitanje četvorobajtnih vrednosti pri čemu se value blokovi automatski formatiraju po odgovarajućoj specifikaciji. Takođe je podržano inkrementiranje i dekrementiranje value blokova.


Opšte funkcije za rad sa čitačem

 

ReaderOpen: Otvara port priključenog čitača. U slučaju multi thread aplikacija, programeri moraju voditi računa o sinhronizovanom pristupu resursima čitača kako bi se izbegle nepredvidive situacije.

GetReaderType: Vraća identifikator tipa uređaja. Kod IS21 ova vrednost je 0xD1150021.

GetReaderSerialNumber: Vraća serijski broj uređaja.

ReaderSoftRestart: Softverski restartuje čitač. Rezultat ove funkcije je postavljanje svih radnih parametara čitača na podrazumevane vrednosti i resetovanje bliskog RF polja čime su praktično resetovane sve kartice u polju.

ReaderReset: Hardverski resetuje svu digitalnu logiku u čitaču. Ovu funkciju generalno treba pozivati samo u slučaju da ReaderSoftRestart() nije dala željene rezultate.

ReaderClose: Zatvara port čitača. Ovim je omogućen pristup čitaču iz drugih procesa.

ReaderKeyWrite: U čitač postavlja ključeve za proveru autentičnosti prilikom čitanja i manipulacije podatacima na karticama. Ključevi se upisuju u poseban prostor EEPROM-a čitača koji se više ne može čitati čime je obezbeđena zaštita od neautorizovanog pristupa.

  • aucKey Pointer na niz od 6 bajtova koji sadrži ključ. Pojedini bajtovi ključa mogu imati bilo koju vrednostu u opsegu 0 do 255. Transportni ključevi na novim karticama trebalo bi da imaju sve setovane bitove (svi bajtovi ključa imaju vrednost 255)
  • ucKeyIndex Indeks u čitaču na koji se želi pohraniti novi ključ. Moguće vrednosti su 0 do 31.

ReaderUISignal: Funkcija služi za kontrolu svetlosnih i zvučnih signala čitača. Postoji 4 moda svetlosne signalizacije i 5 modova zvučne

  • ucLightSignalMode Definiše mod svetlosne signalizacije. Može da ima vrednosti 0 do 4. Vrednost 0 označava neaktivnost svetlosne signalizacije.
  • ucBeepSignalMode Definiše mod zvučne signalizacije. Može da ima vrednosti 0 do 5. Vrednost 0 označava neaktivnost zvučne signalizacije.


Funkcije za rad sa karticama

Po vrsti podataka sa kojima rade funkcije su razvrszane na:

  • Funkcije za manipulaciju sa data blokovima kartice
  • Funkcije za manipulaciju sa value blokovima kartice.

Prema načinu adresiranja podataka na kartici ove funkcije dele se na:

  • Funkcije koje emuliraju linearni adresni prostor
  • Funkcije koje koriste blokovsko adresiranje
  • Funkcije koje koriste sektorsko adresiranje

Funkcije za manipulaciju podataka na karticama razvrstavaju se po metodi provere autentičnosti na skupove funkcija prepoznatljivih po sufiksu (skraćenica) metoda za proveru autentičnosti:

  • “Reader key authentication” je podrazumevani metod za proveru autentičnosti pa funkcije iz ove grupe nemaju sufiks
  • Funkcije sa sufiksom _AKM1 koriste “Automatic key mode 1”
  • Funkcije sa sufiksom _AKM2 koriste “Automatic key mode 2”
  • Funkcije sa sufiksom _PK koriste “Provided key” metod.


 

 

 

 

Opšte funkcije za rad sa karticama

GetCardId: Ova funkcija vraća identifikator tipa i serijski broj kartice koja se nalazi u polju čitača. Čitač podržava samo kartice koje imaju četvorobajtni serijski broj (UID size: single) po standard ISO/IEC 14443 A.

Funkcije koje emuliraju linearni adresni prostor

  • LinearRead
  • LinearRead_AKM1
  • LinearRead_AKM2
  • LinearRead_PK

Ove funkcije služe za čitanje podataka na kartici koristeći emulaciju linearnog adresnog prostora. Na osnovu sufiksa u nazivima funkcija koristi se određeni metod za dokazivanje autentičnosti:

  • aucData Pointer na niz bajtova u koje će biti smešteni pročitani podaci.
  • usLinearAddress Linearna adresa na kartici od koje se žele čitati podaci.
  • usDataLength Broj bajtova za čitanje. Za aucData mora biti alocirano minimalno usDataLength bajtova pre poziva funkcije
  • lpusBytesReturned - Pointer na varijablu tipa unsigned short u koju se upisuje broj uspešno pročitanih bajtova sa kartice. Ukoliko je čitanje u potpunosti uspelo ovaj podatak jednak je parametru usDataLength. Ukoliko je došlo do neke greške prilikom čitanja nekog od blokova, funkcija u aucData ipak vraća sve podatke koji su uspešno pročitani pre nastupanja greške a broj uspešno pročitanih bajtova se vraća preko ovog parametra
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61). ucReaderKeyIndex Kod podrazumevanog metoda provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene čitanjem
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • LinearWrite,
  • LinearWrite_AKM1,
  • LinearWrite_AKM2,
  • LinearWrite_PK

Ove funkcije služe za upis podataka na karticu koristeći emulaciju linearnog adresnog prostora. Na osnovu sufiksa u nazivima funkcija koristi se određeni metod za dokazivanje autentičnosti:

  • aucData Pointer - na niz bajtova u kome su sadržani podaci koji se žele upisati na karticu
  • usLinearAddress - Linearna adresa na kartici od koje se žele upisati podaci
  • usDataLength - Broj bajtova za upis. U aucData mora biti alocirano minimalno
  • usDataLength - bajtova pre poziva funkcije
  • lpusBytesWritten - Pointer na varijablu tipa unsigned short u koju se upisuje broj uspešno upisanih bajtova na karticu. Ukoliko je upis u potpunosti uspeo ovaj podatak jednak je parametru usDataLength. Ukoliko je došlo do neke greške prilikom upisa u neki od blokova, funkcija vraća broj uspešno upisanih bajtova preko ovog parametra
  • ucAuthKey - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61)
  • ucReaderKeyIndex - Kod podrazumevanog metoda provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • LinearFormatCard,
  • LinearFormatCard_AKM1,
  • LinearFormatCard_AKM2,
  • LinearFormatCard_PK

Opis funkcija:

Ove funkcije se koriste za upis novih ključeva A i B kao i access bitova u trejlere svih sektora kartice. Omogućeno je i setovanje devetog bajta trejlera (bajt opšte namene u koji se može upisati bilo koja vrednost). U sve trejlere sektora na kartici se postavljaju iste vrednosti tako da za celu karticu važe isti ključevi i prava pristupa. Kako je pre upisa u trejlere sektora neophodno prvo izvršiti dokazivanje autentičnosti na osnovu prethodnih ključeva, ove funkcije su eventualno pogodne za inicijalizaciju novih kartica (gde se autentikacija vrši transportnim ključevima odn. svi bajtovi ključa su 0xFF) ili za reinicijalizaciju kartica koje imaju iste ključeve i prava pristupa za sve sektore. Ovde se svakako uvek mora voditi računa o prethodno postavljenim pravima pristupa (access bitovima) na karticama kojima je možda onemogućena promena nekog od ključeva ili bitova za kontrolu prava pristupa.

Veću fleksibilnost u iniciranju trejlera sektora pružaju funkcije iz grupe SectorTrailerWrite:

  • aucNewKeyA - pointer na niz od 6 bajtova koji sadrži novi ključ A
  • ucBlocksAccessBits - Vrednost access bitova koji određuju prava pristupa za sve data blokove na kartici. Može imati vrednosti 0 do 7.
  • ucSectorTrailersAccessBits - Vrednost access bitova koji određuju prava pristupa za sve trejlere sektora na kartici. Može imati vrednosti 0 do 7.
  • ucSectorTrailersByte9 - Vrednost devetog bajta svih trejlera sektora na kartici. Može se upisati bilo oja vrednost.
  • aucNewKeyB - pointer na niz od 6 bajtova koji sadrži novi ključ B
  • lpucSectorsFormatted - Pointer na promenljivu tipa unsigned char preko koje se vraća broj uspešno formatiranih trejlera sektora. Npr. kod MIFARE® 1k, ukoliko su svi trejleri sektora uspešno inicijalizovani, preko ovog parametra biće vraćena vrednost 16 što predstavlja broj svih sektora na datoj kartici. U slučaju greške ovaj parametar je indikacija broja eventualno uspešno inicijalizovanih sektora počevši od nultog.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

 

Funkcije za rad sa blokovima podataka

  • BlockRead,
  • BlockRead_AKM1,
  • BlockRead_AKM2,
  • BlockRead_PK,

Opis funkcija:

Ova grupa funkcija služi za čitanje sadržaja blokova kartice. Uvek se čita se ceo blok odn. 16 bajtova bloka. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63). Ovim funkcijama može se čitati i sadržaj sektor trtejlera (njegov dostupni deo za čitanje, u zavisnosti od postavljenih prava pristupa).

  • aucData - Pointer na niz bajtova u koje će biti smešteni pročitani podaci. Mora biti alocirano bar 16 bajtova pre poziva funkcije.
  • ucBlockAddress - Adresa bloka ucAuthMode Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

Ove funkcije rade isto što i grupa funkcija BlockRead i služe za čitanje sadržaja blokova kartice.

Jedina razlika je što se koristi sektorsko adresiranje što podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15. Uvek se čita ceo blok odn. 16 bajtova bloka.

Ovim funkcijama može se čitati i sadržaj sektor trtejlera (njegov dostupni deo za čitanje, u zavisnosti od postavljenih prava pristupa).

  • aucData - Pointer na niz bajtova u koje će biti smešteni pročitani podaci. Mora biti alocirano bar 16 bajtova pre poziva funkcije.
  • ucSectorAddress - Adresa sektora
  • ucBlockInSectorAddress - Adresa bloka u okviru datog sektora
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • BlockWrite,
  • BlockWrite_AKM1,
  • BlockWrite_AKM2,
  • BlockWrite_PK

Opis funkcija:

Ove funkcije služe za upis podataka (16 bajtova odjednom) u blokove na kartici. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd. poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63). Ovom grupom funkcija nije moguće direktano upisivati podatke u trejlere sektora. Tome služe posebne funkcije, SectorTrailerWrite i SectorTrailerWriteUnsafe.

  • aucData - Pointer na šesnaestobajtni niz bajtova za upis. Mora biti alocirano bar 16 bajtova pre poziva funkcije.
  • ucBlockAddress - Adresa bloka na kartici
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER.

  • BlockInSectorWrite,
  • BlockInSectorWrite_AKM1,
  • BlockInSectorWrite_AKM2,
  • BlockInSectorWrite_PK

Opis funkcija:

Ove funkcije rade isto što i grupa funkcija BlockWrite i služe za upis podataka (16 bajtova odjednom) u blokove na kartici. Jedina razlika je što se koristi sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3.

Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15. Ni ovom grupom funkcija nije moguće direktano upisivati podatke u trejlere sektora, za šta su predviđene posebne funkcije, SectorTrailerWrite i SectorTrailerWriteUnsafe.

  • aucData - Pointer na šesnaestobajtni niz bajtova za upis. Mora biti alocirano bar 16 bajtova pre poziva funkcije.
  • ucSectorAddress - Adresa sektora
  • ucBlockInSectorAddress - Adresa bloka u okviru datog sektora
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER.

  • SectorTrailerWrite,
  • SectorTrailerWrite_AKM1,
  • SectorTrailerWrite_AKM2,
  • SectorTrailerWrite_PK

Opis funkcija:

Ove funkcije služe za upis podataka u trejlere sektora na kartici. Funkcije mogu koristiti i  blokovsko adresiranje sektor trejlera kao i sektrosko adresiranje što se određuje parametrom ucAddressingMode. U slučaju blokovskog adresiranja prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63. Ova grupa funkcija pojednostavljuje manipulaciju bitovima za podešavanje prava pristupa blokovima (access bits) i minimalizuje mogućnost trajnog blokiranja celog sektora usled pogrešnog formatiranja ovih bitova. Formatiranje access bitova vrši čitač neposredno pre upisa. Korisnik API može da odabere odgovarajuća prava pristupa po blokovima, koja su predstavljena vrednostima 0 do 7, i da ih prosledi ovim funkcijama.

  • Access bitovi C1 C2 C3
  • Access vrednost (prosleđuje se funkciji)
  • Prava pristupa
  • Ključ A Bajtovi koji sadrže access bitove i 9. bajt Ključ B
  • čitanje upis čitanje upis čitanje upis

 

*) Ako su prava pristupa za trejler odgovarajućeg sektora postavljena tako da je moguće čitatiključ B, on ne može služiti za autentikaciju ni u jednom od slučajeva.Ovim funkcijama se takođe postavljaju novi ključevi sektora ukoliko je to dozvoljeno pravima pristupa.

  • Access bitovi C1 C2 C3
  • Access vrednost (prosleđuje se funkciji)
  • Prava pristupa
  • čitanje upis Inkrement Dekrement
  • ucAddressingMode - Određuje adresni mod. Moguće vrednosti ovog parametra su BLOCK_ADDRESS_MODE (0x00) ili SECTOR_ADDRESS_MODE (0x01). U slučaju da se pošalje neka druga vrednost funkcija vraća kod greške WRONG_ADDRESS_MODE.
  • ucAddress - Adresa sektora ili bloka sektor trejlera, u zavisnosti od ucAddressingMode. Kada se koristi sektorski adresni mod onda se, npr. Kod MIFARE CLASSIC 1k kartice, može kretati od 0 do 15 (ova kartica ima 16 sektora). Kod istog tipa kartice se u blokovskom modu adresiranja mogu koristiti vrednosti 0 do 63 s tim što dolazi do greške ukoliko adresirani blok nije ujedno i sector trejler.
  • aucNewKeyA - Pointer na šestobajtni niz koji predstavlja novi ključ A za dati sektor koji će
  • biti postavljen ukoliko je do dozvoljeno ranije postavljenim pravima pristupa.
  • aucNewKeyB - Pointer na šestobajtni niz koji predstavlja novi ključ B za dati sektor koji će biti postavljen ukoliko je do dozvoljeno ranije postavljenim pravima pristupa.
  • ucBlock0AccessBits - Access vrednost za blok 0 datog sektora.
Kod MIFARE® 4k je drugačija organizacija poslednjih 8 sektora tj. druge polovine adresnog prostora. S toga se u ovim sektorima postavljaju prava pristupa na sledeći način:
  • prava pristupa prvih 5 blokova - ucBlock1AccessBits Access vrednost za blok 1 datog sektora
  • prava pristupa drugih 5 blokova - ucBlock2AccessBits Access vrednost za blok 2 datog sektora
  • prava pristupa poslednjih 5 blokova:
    • ucSectorTrailerAccessBits - Access vrednost za trejler datog sektora
    • ucSectorTrailerByte9 - Deveti bajt sektor trejlera je bajt opšte namene i u njega se može upisati bilo koja jednobajtna vrednost
    • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61)
    • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom
    • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

  • SectorTrailerWriteUnsafe,
  • SectorTrailerWriteUnsafe_AKM1,
  • SectorTrailerWriteUnsafe_AKM2,
  • SectorTrailerWriteUnsafe_PK

Opis funkcija:

Ove funkcije imaju istu namenu poput funkcija iz grupe SectorTrailerWrite s tim što se prosleđuje “sirov” sadržaj sektor trejlera i moguće su greške prilikom formatiranja vrednosti access bitova za upis. Ove funkcije su namenjene iskusnim programerima u radu sa MIFARE karticama. Sve što je navedeno za grupu funkcija SectorTrailerWrite važi i za ove funkcije izuzev opcije prosleđivanja “sirovih” podataka za upis u sektor trejler.

  • ucAddressingMode - Određuje adresni mod. Moguće vrednosti ovog parametra su BLOCK_ADDRESS_MODE (0x00) ili SECTOR_ADDRESS_MODE (0x01). U slučaju da se pošalje neka druga vrednost funkcija vraća kod greške WRONG_ADDRESS_MODE.
  • ucAddress - Adresa sektora ili bloka sektor trejlera, u zavisnosti od ucAddressingMode.

Kada se koristi sektorski adresni mod onda se, npr. Kod MIFARE® 1k kartice, može kretati od 0 do 15 (ova kartica ima 16 sektora). Kod istog tipa kartice se u blokovskom modu adresiranja mogu koristiti vrednosti 0 do 63 s tim što dolazi do greške ukoliko adresirani blok nije ujedno i sector trejler.

  • aucSectorTrailer - pointer na šesnaestobajtni niz koji sadrži “sirove” podatke za upis u adresirani sektor trejler
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

 

 

 


 

 

Funkcije za rad sa “value” blokovima

Value odnosno vrednosni blokovi predstavljaju opcionu funkcionalnost MIFARE® kartica. To je zapravo režim u kome ceo blok podataka na kartici (16 bajtova) predstavlja jednu četvorobajtnu vrednost. U ovaj režim se može ubaciti bilo koji blok podataka na kartici (naravno osim bloka 0, nultog sektora i trejlera sektora. Vrednosti u value blokovima su formatirane na poseban način i pored zapisa same vrednosti sadrže i jednobajtnu adresu što korisnicima pruža dodatnu mogućnost da implementiraju backup sistem.

D-Logic čitači kartica se staraju o pravilnom formatiranju value blokova tako da je korisnicima na raspolaganju skup funkcija koje barataju isključivo četvorobajtnim vrednostima. Treba napomenuti da korišćenje value blokova ima smisla ukoliko su za prava pristupa željenog bloka postavljene vrednosti 1, 6 ili 0 (podrazumevano na novim karticama) što omogućuje inkrementiranje i dekrementiranje vrednosti koje sadrže. Value blokovi se uvek prvo moraju inicirati odn. vrednost i pridružena adresa moraju biti saglasne odgovarajućem formatu šesnaestobajtnog zapisa. Inicijalizaciju value blokova je najbolje i najjednostavnije raditi skupom IS21 Win API funkcija ValueBlockWrite ili ValueBlockInSectorWrite.

  • ValueBlockRead,
  • ValueBlockRead_AKM1,
  • ValueBlockRead_AKM2,
  • ValueBlockRead_PK

Opis funkcija:

Ove funkcije služe za čitanje četvorobajtnih vrednosti value blokova. Dodatno vraćaju i pridruženu adresu pohranjenu u value blok. Funkcije koriste blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).

  • lValue - Pointer na promenljivu tipa long preko koje se vraća vrednost u value bloku.
  • ucValueAddr - Pointer na promenljivu tipa unsigned char preko koje se vraća jednobajtna adresa što korisnicima pruža dodatnu mogućnost da implementiraju backup sistem.
  • ucBlockAddress - Adresa bloka
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • ValueBlockInSectorRead,
  • ValueBlockInSectorRead_AKM1,
  • ValueBlockInSectorRead_AKM2,
  • ValueBlockInSectorRead_PK

Opis funkcija:

Ove funkcije rade isto što i grupa funkcija ValueBlockRead i služe za čitanje četvorobajtnih vrednosti value blokova. Dodatno vraćaju i pridruženu adresu pohranjenu u value blok. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine  adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.

  • lValue - Pointer na promenljivu tipa long preko koje se vraća vrednost u value bloku.
  • ucValueAddr - Pointer na promenljivu tipa unsigned char preko koje se vraća jednobajtna adresa što korisnicima pruža dodatnu mogućnost da implementiraju backup sistem.
  • ucSectorAddress - Adresa sektora
  • ucBlockInSectorAddress - Adresa bloka u okviru datog sektora
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • ValueBlockWrite,
  • ValueBlockWrite_AKM1,
  • ValueBlockWrite_AKM2,
  • ValueBlockWrite_PK

Opis funkcija:

Ove funkcije služe za upis odn. inicijalizaciju četvorobajtnih vrednosti value blokova i pohranjuju pridruženu adresu u value blok. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).

  • lValue - Vrednost za upis u value blok.
  • ucValueAddr - Adresa pridružena value bloku.
  • ucBlockAddress - Adresa bloka.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

  • ValueBlockInSectorWrite,
  • ValueBlockInSectorWrite_AKM1,
  • ValueBlockInSectorWrite_AKM2,
  • ValueBlockInSectorWrite_PK

Opis funkcija:

Ove funkcije rade isto što i grupa funkcija ValueBlockWrite i služe za upis odn. Inicijalizaciju četvorobajtnih vrednosti value blokova. Dodatno pohranjenu i pridruženu adresu u value blok. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.

 

  • lValue - Vrednost za upis u value blok.
  • ucValueAddr - Adresa pridružena value bloku.
  • ucSectorAddress - Adresa sektora.
  • ucBlockInSectorAddress - Adresa bloka u okviru sektora.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
  • ValueBlockIncrement,
  • ValueBlockIncrement_AKM1,
  • ValueBlockIncrement_AKM2,
  • ValueBlockIncrement_PK

Opis funkcija:

Ovaj skup funkcija se koristi inkrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se inkrementira value blok šalje se kao parametar ovih funkcija. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).


  • lIncrementValue - Vrednost za koju se vrši inkrementiranje value bloka.
  • ucBlockAddress - Adresa bloka u okviru sektora.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

 

  • ValueBlockInSectorIncrement,
  • ValueBlockInSectorIncrement_AKM1,
  • ValueBlockInSectorIncrement_AKM2,
  • ValueBlockInSectorIncrement_PK

Opis funkcija:

Ove funkcije rade isto što i grupa funkcija ValueBlockIncrement i koriste se za inkrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se inkrementira value blok šalje se kao parametar ovih funkcija. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.


  • lIncrementValue - Vrednost za koju se vrši inkrementiranje value bloka.
  • ucSectorAddress - Adresa sektora.
  • ucBlockInSectorAddress - Adresa bloka u okviru sektora.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

  • ValueBlockDecrement,
  • ValueBlockDecrement_AKM1,
  • ValueBlockDecrement_AKM2,
  • ValueBlockDecrement_PK

Opis funkcija:

Ovaj skup funkcija se koristi dekrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se dekrementira value blok šalje se kao parametar ovih funkcija. Funkcije koriste blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).

  • lDecrementValue - Vrednost za koju se vrši dekrementiranje value bloka.
  • ucBlockAddress - Adresa bloka u okviru sektora.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.

  • ValueBlockInSectorDecrement,
  • ValueBlockInSectorDecrement_AKM1,
  • ValueBlockInSectorDecrement_AKM2,
  • ValueBlockInSectorDecrement_PK

Opis funkcija:

Ove funkcije rade isto što i grupa funkcija ValueBlockDecrement i koriste se za dekrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se dekrementira value blok šalje se kao parametar ovih funkcija. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.

 

  • lDecrementValue - Vrednost za koju se vrši dekrementiranje value bloka.
  • ucSectorAddress - Adresa sektora.
  • ucBlockInSectorAddress - Adresa bloka u okviru sektora.
  • ucAuthMode - Ovaj parametar definiše da li će se provera autentičnosti vršiti ključem A ili ključem B. Može imati dve vrednosti i to: AUTHENT1A (0x60) ili AUTHENT1B (0x61).
  • ucReaderKeyIndex - Kada se koristi podrazumevani metod provere autentičnosti (kada se koristi funkcija bez sufiksa u svom nazivu) sadrži indeks ključa u čitaču sa kojim se želi izvršiti dokazivanje autentičnosti. U linearnom adresnom modu odnosi se na sve sektore obuhvaćene upisom.
  • aucProvidedKey - Pointer na šestobajtni niz koji sadrži ključ za dokazivanje autentičnosti po “Provided Key” metodi. Sufiks _PK u nazivu funkcije označava upotrebu ove metode.
Attachments:
Access this URL (/images/download/IS21 Series Win API.pdf)IS21[API]Super User0 Kb01/14/12 15:24
Ažurirano Četvrtak, 19 Siječanj 2012 12:13
Joomla! is Free Software released under the GNU/GPL License.