Skip to content

Commit

Permalink
updated read.me
Browse files Browse the repository at this point in the history
  • Loading branch information
nejc-skerjanc committed May 13, 2024
1 parent be55ab5 commit 222cea5
Showing 1 changed file with 81 additions and 72 deletions.
153 changes: 81 additions & 72 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,96 +19,105 @@ extensions.dart - exposes library's dart [extensions](lib/src/extension)
internal.dart - exposes internal components of the library such as MrtdApi, ICC and crypto

## Usage
1) Include `dmrtd` library in your project's `pubspec.yaml` file:
1) Include `dmrtd` library in your project's `pubspec.yaml` file:
```
dependencies:
dmrtd:
path: '<path_to_dmrtd_folder>'
```
2) Run
2) Run
```
flutter pub get
```

**Example:**
*Note: See also [example](example) app*

```dart
import 'package:dmrtd/dmrtd.dart';
try {
final nfc = NfcProvider();
await nfc.connect(iosAlertMessage: "Hold your iPhone near Passport");
final passport = Passport(nfc);
nfc.setIosAlertMessage("Reading EF.CardAccess ...");
final cardAccess = await passport.readEfCardAccess();
nfc.setIosAlertMessage("Initiating session ...");
final bacKeySeed = DBAKeys(passportNum, dateOfBirth, dateOfExpiry);
await passport.startSession(bacKeySeed);
nfc.setIosAlertMessage(formatProgressMsg("Reading EF.COM ...", 0));
final efcom = await passport.readEfCOM();
nfc.setIosAlertMessage(formatProgressMsg("Reading Data Groups ...", 20));
EfDG1 dg1;
if(efcom.dgTags.contains(EfDG1.TAG)) {
dg1 = await passport.readEfDG1();
}
EfDG2 dg2;
if(efcom.dgTags.contains(EfDG2.TAG)) {
dg2 = await passport.readEfDG2();
}
EfDG14 dg14;
if(efcom.dgTags.contains(EfDG14.TAG)) {
dg14 = await passport.readEfDG14();
}
EfDG15 dg15;
Uint8List sig;
if(efcom.dgTags.contains(EfDG15.TAG)) {
dg15 = await passport.readEfDG15();
nfc.setIosAlertMessage(formatProgressMsg("Doing AA ...", 60));
sig = await passport.activeAuthenticate(Uint8List(8));
}
nfc.setIosAlertMessage(formatProgressMsg("Reading EF.SOD ...", 80));
final sod = await passport.readEfSOD();
}
final nfc = NfcProvider();
await nfc.connect(iosAlertMessage: "Hold your iPhone near Passport");
final passport = Passport(nfc);
nfc.setIosAlertMessage("Reading EF.CardAccess ...");
final cardAccess = await passport.readEfCardAccess();
_nfc.setIosAlertMessage("Initiating session with PACE or BAC...");
//set MrtdData
mrtdData.isPACE = true; //initialize with PACE(set false if you want to do with DBA)
mrtdData.isDBA = accessKey.PACE_REF_KEY_TAG == 0x01 ? true : false;
if (isPace) {
//PACE session
await passport.startSessionPACE(accessKey, mrtdData.cardAccess!);
} else {
//BAC session
await passport.startSession(accessKey as DBAKey);
}
nfc.setIosAlertMessage(formatProgressMsg("Reading EF.COM ...", 0));
final efcom = await passport.readEfCOM();
nfc.setIosAlertMessage(formatProgressMsg("Reading Data Groups ...", 20));
EfDG1 dg1;
if(efcom.dgTags.contains(EfDG1.TAG)) {
dg1 = await passport.readEfDG1();
}
EfDG2 dg2;
if(efcom.dgTags.contains(EfDG2.TAG)) {
dg2 = await passport.readEfDG2();
}
EfDG14 dg14;
if(efcom.dgTags.contains(EfDG14.TAG)) {
dg14 = await passport.readEfDG14();
}
EfDG15 dg15;
Uint8List sig;
if(efcom.dgTags.contains(EfDG15.TAG)) {
dg15 = await passport.readEfDG15();
nfc.setIosAlertMessage(formatProgressMsg("Doing AA ...", 60));
sig = await passport.activeAuthenticate(Uint8List(8));
}
nfc.setIosAlertMessage(formatProgressMsg("Reading EF.SOD ...", 80));
final sod = await passport.readEfSOD();
}
on Exception catch(e) {
final se = e.toString().toLowerCase();
String alertMsg = "An error has occurred while reading Passport!";
if(e is PassportError) {
if(se.contains("security status not satisfied")) {
alertMsg = "Failed to initiate session with passport.\nCheck input data!";
}
}
if(se.contains('timeout')){
alertMsg = "Timeout while waiting for Passport tag";
}
else if(se.contains("tag was lost")){
alertMsg = "Tag was lost. Please try again!";
}
else if(se.contains("invalidated by user")){
alertMsg = "";
}
errorAlertMsg = alertMsg;
final se = e.toString().toLowerCase();
String alertMsg = "An error has occurred while reading Passport!";
if(e is PassportError) {
if(se.contains("security status not satisfied")) {
alertMsg = "Failed to initiate session with passport.\nCheck input data!";
}
}
if(se.contains('timeout')){
alertMsg = "Timeout while waiting for Passport tag";
}
else if(se.contains("tag was lost")){
alertMsg = "Tag was lost. Please try again!";
}
else if(se.contains("invalidated by user")){
alertMsg = "";
}
errorAlertMsg = alertMsg;
}
finally {
if(errorAlertMsg?.isNotEmpty){
await _nfc.disconnect(iosErrorMessage: errorAlertMsg);
if(!Platform.isIOS) {
// Show error to the user
}
}
else {
await _nfc.disconnect(iosAlertMessage: formatProgressMsg("Finished", 100);
}
if(errorAlertMsg?.isNotEmpty){
await _nfc.disconnect(iosErrorMessage: errorAlertMsg);
if(!Platform.isIOS) {
// Show error to the user
}
}
else {
await _nfc.disconnect(iosAlertMessage: formatProgressMsg("Finished", 100);
}
}
```

Expand Down

0 comments on commit 222cea5

Please sign in to comment.