Skip to main content

eid 0.1.1 copy "eid: ^0.1.1" to clipboard
eid: ^0.1.1 copied to clipboard

Talks to electronic identity cards over any transport: APDUs, ISO 7816-4 file reading, card insertion and the values national cards share.

eid #

Video tour Pub Version Build Maintainer Licence Platforms Donate with PayPal

The common ground of electronic identity cards, in pure Dart: commands, file reading, card insertion and the values national cards share. Document packages such as eid_belgium and eid_icao read the cards themselves.

Install #

dependencies:
  eid: ^0.1.0

Transports #

A CardTransport carries bytes to a card. Adapters:

eid_ccid A USB or PC/SC card reader
eid_nfc The NFC of an Android phone or an iPhone

Any other is one method:

final class MyTransport implements CardTransport {
  @override
  Future<Uint8List> transmit(Uint8List command) async {
    // Return the response, status bytes included.
  }
}

Read a file #

final channel = CardChannel(transport, onApdu: print);
await channel.selectPath([0x3F00, 0xDF01, 0x4031]);
final file = await channel.readTransparentFile();

A refused command throws a CardException, an unreachable card a CardTransportException. onApdu never sees a PIN. Commands longer than 255 bytes, or expecting more than 256 back, go in extended length; files larger than 32 KB are read with READ BINARY B1.

Cards going in and out #

final watcher = CardWatcher(AnyCardTerminal(listTerminals))..start();
watcher.events.listen((event) {
  switch (event) {
    case CardInserted inserted:
      read(inserted.connection);
    case CardRemoved _:
      clear();
  }
});

AnyCardTerminal watches every terminal, those plugged in later included.

The watcher checks the card is still there with a harmless command, sent when the card is idle. Commands that must follow one another, such as a secure messaging session, go in exclusive:

await channel.exclusive(() async {
  // No probe reaches the card until this ends.
});

Shared values #

PartialDate is a birth date whose day or month may be unknown, with ageOn and minimumAgeOn. Sex holds the three values of ICAO 9303.

Documents #

Which packages for which document: a Belgian card in a USB reader takes eid_belgium and eid_ccid and needs no key; a passport or an EU identity card takes eid_icao, with eid_nfc on a phone or eid_ccid on a contactless USB reader, and needs the CAN or the MRZ

eid_belgium The Belgian eID, Kids ID and residence cards
eid_icao Passports and identity cards with an ICAO 9303 chip

License #

Released under the MIT licence.

More from COMAPPS #

Every package COMAPPS publishes is listed at packages.comapps.be.

0
likes
160
points
569
downloads
screenshot

Documentation

API reference

Publisher

verified publishercomapps.be

Weekly Downloads

Talks to electronic identity cards over any transport: APDUs, ISO 7816-4 file reading, card insertion and the values national cards share.

Homepage
Repository (GitHub)
View/report issues

Topics

#eid #smartcard #apdu #identity

Funding

Consider supporting this project:

www.paypal.com

License

MIT (license)

More

Packages that depend on eid