@vppos/react-native-nfc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +20 -0
  2. package/NFCSDK.podspec +40 -0
  3. package/android/build.gradle +85 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +31 -0
  6. package/android/src/main/AndroidManifestNew.xml +30 -0
  7. package/android/src/main/java/com/nfcsdk/ChipReader.kt +237 -0
  8. package/android/src/main/java/com/nfcsdk/NFCSDKModule.kt +78 -0
  9. package/android/src/main/java/com/nfcsdk/NFCSDKPackage.kt +17 -0
  10. package/android/src/main/java/com/nfcsdk/NFCScanActivity.kt +299 -0
  11. package/android/src/main/java/com/nfcsdk/utils/Dg13Parser.kt +278 -0
  12. package/android/src/main/java/com/nfcsdk/utils/FaceExtractor.kt +40 -0
  13. package/android/src/main/java/com/nfcsdk/utils/MrzUtils.kt +75 -0
  14. package/android/src/main/res/drawable/bg_nfc_bottom_sheet.xml +13 -0
  15. package/android/src/main/res/drawable/bg_nfc_sheet_handle.xml +9 -0
  16. package/android/src/main/res/layout/activity_nfc.xml +110 -0
  17. package/android/src/main/res/values/styles.xml +10 -0
  18. package/android/src/main/res/xml/nfc_tech_filter.xml +8 -0
  19. package/ios/ChipReader.swift +258 -0
  20. package/ios/NFCSDK-Bridging-Header.h +2 -0
  21. package/ios/NFCSDK.mm +9 -0
  22. package/ios/NFCSDK.swift +112 -0
  23. package/ios/NFCSDKSession.swift +5 -0
  24. package/ios/utils/DG13Parser.swift +302 -0
  25. package/ios/utils/MrzUtils.swift +49 -0
  26. package/lib/module/errors.js +9 -0
  27. package/lib/module/errors.js.map +1 -0
  28. package/lib/module/index.js +118 -0
  29. package/lib/module/index.js.map +1 -0
  30. package/lib/module/package.json +1 -0
  31. package/lib/module/types.js +2 -0
  32. package/lib/module/types.js.map +1 -0
  33. package/lib/typescript/package.json +1 -0
  34. package/lib/typescript/src/errors.d.ts +4 -0
  35. package/lib/typescript/src/errors.d.ts.map +1 -0
  36. package/lib/typescript/src/index.d.ts +80 -0
  37. package/lib/typescript/src/index.d.ts.map +1 -0
  38. package/lib/typescript/src/types.d.ts +45 -0
  39. package/lib/typescript/src/types.d.ts.map +1 -0
  40. package/package.json +155 -0
  41. package/src/errors.ts +6 -0
  42. package/src/index.tsx +141 -0
  43. package/src/types.ts +45 -0
  44. package/vendor/ios-passport-reader/CHANGELOG +362 -0
  45. package/vendor/ios-passport-reader/CODE_OF_CONDUCT.md +77 -0
  46. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/AppDelegate.swift +39 -0
  47. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
  48. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
  49. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
  50. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
  51. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
  52. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
  53. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
  54. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
  55. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
  56. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
  57. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
  58. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
  59. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
  60. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
  61. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
  62. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
  63. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
  64. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
  65. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
  66. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
  67. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
  68. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
  69. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
  70. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
  71. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
  72. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
  73. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
  74. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
  75. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
  76. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
  77. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
  78. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
  79. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Info.plist +77 -0
  80. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/PassportUtils.swift +76 -0
  81. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/SettingsStore.swift +107 -0
  82. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
  83. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/SceneDelegate.swift +57 -0
  84. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/DetailsView.swift +197 -0
  85. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
  86. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
  87. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
  88. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
  89. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
  90. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
  91. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MainView.swift +214 -0
  92. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
  93. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportView.swift +73 -0
  94. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/SettingsView.swift +63 -0
  95. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/StoredPassportView.swift +152 -0
  96. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/masterList.pem +32 -0
  97. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/readme.md +10 -0
  98. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/project.pbxproj +695 -0
  99. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
  100. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/contents.xcworkspacedata +10 -0
  101. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  103. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/DataGroupParsingTests.swift +189 -0
  104. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/Info.plist +22 -0
  105. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
  106. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/PACETests.swift +112 -0
  107. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile +22 -0
  108. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile.lock +35 -0
  109. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/README.md +2 -0
  110. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/AppDelegate.swift +39 -0
  111. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
  112. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
  113. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
  114. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
  115. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
  116. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
  117. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
  118. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
  119. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
  120. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
  121. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
  122. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
  123. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
  124. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
  125. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
  126. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
  127. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
  128. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
  129. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
  130. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
  131. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
  132. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
  133. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
  134. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
  135. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
  136. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
  137. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
  138. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
  139. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
  140. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
  141. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
  142. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
  143. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Info.plist +79 -0
  144. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/PassportUtils.swift +99 -0
  145. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStore.swift +98 -0
  146. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStoreCAN.swift +75 -0
  147. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/LICENSE +21 -0
  148. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/PreviewView.swift +34 -0
  149. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/StringUtils.swift +160 -0
  150. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/ViewController.swift +320 -0
  151. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/VisionViewController.swift +163 -0
  152. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
  153. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/SceneDelegate.swift +58 -0
  154. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/CanKeyView.swift +251 -0
  155. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/MRZEntryViewCanKey.swift +65 -0
  156. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/PassportViewCAN.swift +73 -0
  157. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/DetailsView.swift +193 -0
  158. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
  159. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
  160. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
  161. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
  162. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
  163. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
  164. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MainView.swift +264 -0
  165. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
  166. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportView.swift +73 -0
  167. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/SettingsView.swift +47 -0
  168. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/StoredPassportView.swift +149 -0
  169. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/masterList.pem +32 -0
  170. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/readme.md +10 -0
  171. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.pbxproj +683 -0
  172. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  173. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +25 -0
  174. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
  175. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/DataGroupParsingTests.swift +190 -0
  176. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/Info.plist +22 -0
  177. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
  178. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/PACETests.swift +112 -0
  179. package/vendor/ios-passport-reader/LICENSE +21 -0
  180. package/vendor/ios-passport-reader/NFCPassportReader.podspec +27 -0
  181. package/vendor/ios-passport-reader/Package.swift +29 -0
  182. package/vendor/ios-passport-reader/README.md +141 -0
  183. package/vendor/ios-passport-reader/Sources/NFCPassportReader/AES_3DES_DESEncryption.swift +377 -0
  184. package/vendor/ios-passport-reader/Sources/NFCPassportReader/BACHandler.swift +194 -0
  185. package/vendor/ios-passport-reader/Sources/NFCPassportReader/ChipAuthenticationHandler.swift +224 -0
  186. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupHash.swift +16 -0
  187. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupParser.swift +36 -0
  188. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ActiveAuthenticationInfo.swift +69 -0
  189. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/COM.swift +61 -0
  190. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/CardAccess.swift +38 -0
  191. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationInfo.swift +135 -0
  192. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationPublicKeyInfo.swift +53 -0
  193. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup.swift +103 -0
  194. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup1.swift +111 -0
  195. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup11.swift +66 -0
  196. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup12.swift +75 -0
  197. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup14.swift +37 -0
  198. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup15.swift +46 -0
  199. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup2.swift +163 -0
  200. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup7.swift +46 -0
  201. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroupId.swift +105 -0
  202. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/NotImplementedDG.swift +16 -0
  203. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/PACEInfo.swift +415 -0
  204. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SOD.swift +240 -0
  205. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SecurityInfo.swift +136 -0
  206. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Errors.swift +148 -0
  207. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Logging.swift +32 -0
  208. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Models/FaceImageInfo.swift +161 -0
  209. package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCPassportModel.swift +540 -0
  210. package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCViewDisplayMessage.swift +60 -0
  211. package/vendor/ios-passport-reader/Sources/NFCPassportReader/OpenSSLUtils.swift +705 -0
  212. package/vendor/ios-passport-reader/Sources/NFCPassportReader/PACEHandler.swift +627 -0
  213. package/vendor/ios-passport-reader/Sources/NFCPassportReader/PassportReader.swift +387 -0
  214. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Resources/PrivacyInfo.xcprivacy +14 -0
  215. package/vendor/ios-passport-reader/Sources/NFCPassportReader/ResponseAPDU.swift +25 -0
  216. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessaging.swift +301 -0
  217. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessagingSessionKeyGenerator.swift +156 -0
  218. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SimpleASN1DumpParser.swift +173 -0
  219. package/vendor/ios-passport-reader/Sources/NFCPassportReader/TagReader.swift +374 -0
  220. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Utils.swift +430 -0
  221. package/vendor/ios-passport-reader/Sources/NFCPassportReader/X509Wrapper.swift +168 -0
  222. package/vendor/ios-passport-reader/scripts/README.md +45 -0
  223. package/vendor/ios-passport-reader/scripts/extract.py +197 -0
@@ -0,0 +1,112 @@
1
+ //
2
+ // PACETests.swift
3
+ // NFCPassportReaderAppTests
4
+ //
5
+ // Created by Andy Qua on 09/03/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import OpenSSL
11
+ import NFCPassportReader
12
+
13
+ // Currently not actual tests - maybe at some point but currently just a holding place for some testing stuff I didn't want to get rid of!
14
+ // Hopefully will re-organise into proper tests!
15
+ class PACETests {
16
+ func testDHKeyMapping() -> OpaquePointer {
17
+ var resp : [UInt8] = [0x7c, 0x82, 0x01, 0x04, 0x82, 0x82, 0x01, 0x00, 0x70, 0x5a, 0xce, 0x59, 0x1c, 0x0b, 0xe1, 0xa1, 0x19, 0x5b, 0x14, 0x1c, 0x97, 0x38, 0x51, 0xde, 0x07, 0xf1, 0x66, 0xa6, 0x74, 0x7d, 0x18, 0x9f, 0x5e, 0x3b, 0x51, 0x0d, 0xbf, 0xff, 0xe2, 0x16, 0xca, 0x96, 0x0e, 0x63, 0x8d, 0x16, 0x49, 0x5f, 0x53, 0x15, 0x60, 0x9b, 0xd6, 0x6e, 0x41, 0x52, 0x69, 0x08, 0x6a, 0x37, 0x6f, 0xf4, 0xd6, 0x14, 0xcc, 0x9b, 0x9d, 0x57, 0x0e, 0x64, 0x53, 0x49, 0xa3, 0xe6, 0xd6, 0xdb, 0x80, 0xfb, 0x08, 0x39, 0xb7, 0x66, 0xdc, 0xcc, 0xb1, 0xda, 0xe0, 0xe5, 0x21, 0xaf, 0xca, 0x9b, 0xdc, 0xe2, 0xc2, 0xd9, 0xb2, 0x58, 0xd8, 0x22, 0x94, 0x23, 0x76, 0x0f, 0x40, 0x74, 0xea, 0x73, 0xf1, 0xa4, 0x4d, 0xdd, 0xfc, 0x72, 0x27, 0xda, 0x8b, 0xce, 0x03, 0x75, 0x98, 0xfe, 0x38, 0x81, 0x1d, 0x45, 0xc9, 0xd6, 0x8b, 0x81, 0x8d, 0xef, 0xdc, 0xda, 0x5f, 0xc8, 0x1a, 0x12, 0x51, 0x0d, 0xfa, 0x02, 0x67, 0xf9, 0x89, 0x5e, 0x6d, 0xb8, 0x55, 0x43, 0xb0, 0x71, 0x47, 0x0d, 0xf0, 0x27, 0xda, 0x62, 0x3b, 0xd4, 0xa9, 0x4d, 0x5e, 0xde, 0xba, 0x81, 0x7b, 0xde, 0x79, 0x5f, 0x57, 0xbf, 0x0b, 0x35, 0xf4, 0x29, 0x6f, 0x5a, 0xd4, 0xe8, 0xd9, 0xfd, 0x2c, 0x87, 0x2e, 0x84, 0x26, 0x10, 0x9d, 0x1b, 0x50, 0xe4, 0x1d, 0xb3, 0x91, 0x02, 0xac, 0xa4, 0x58, 0x52, 0x61, 0x77, 0x1f, 0x97, 0x02, 0xd6, 0x48, 0x90, 0x1f, 0x69, 0xb6, 0xa0, 0x53, 0x53, 0xf9, 0xcb, 0x57, 0x01, 0xfe, 0x9f, 0xf2, 0xa1, 0x29, 0x60, 0x3f, 0xa5, 0xa4, 0xf6, 0x3d, 0xf1, 0xc6, 0x7a, 0xf3, 0xc6, 0xfd, 0x11, 0x6c, 0x38, 0xe8, 0x91, 0x82, 0x3c, 0xd9, 0x33, 0xef, 0x57, 0x9e, 0x6c, 0x04, 0x10, 0x65, 0x6a, 0xc5, 0xaa, 0x1f, 0xc4, 0x50, 0x1d, 0xe6, 0xbd, 0x27, 0xe0, 0x79, 0x30, ]
18
+
19
+ let mappingKey : OpaquePointer = EVP_PKEY_new()
20
+ let dhKey = DH_get_2048_256()
21
+
22
+ let rc = DH_generate_key(dhKey)
23
+ EVP_PKEY_set1_DH(mappingKey, dhKey)
24
+
25
+ let pubKeyData = try! unwrapDO( tag:0x7c, wrappedData:resp)
26
+ let encodedPublicKey = try! unwrapDO(tag: 0x82, wrappedData: pubKeyData)
27
+
28
+ let piccMappingPublicKey = OpenSSLUtils.decodePublicKeyFromBytes(pubKeyData: encodedPublicKey, params: mappingKey)!
29
+ let asecret = OpenSSLUtils.computeSharedSecret(privateKeyPair: mappingKey, publicKey: piccMappingPublicKey)
30
+
31
+
32
+ let dh_mapping_key = EVP_PKEY_get1_DH(mappingKey)
33
+
34
+
35
+ print( "DONE" )
36
+
37
+ let piccNonce : [UInt8] = [0xed, 0xb6, 0xc4, 0x07, 0x04, 0xae, 0x98, 0xfd,]
38
+ let bn_nonce = BN_bin2bn(piccNonce, Int32(piccNonce.count), nil);
39
+
40
+ let bn = BN_bin2bn(encodedPublicKey, Int32(encodedPublicKey.count), nil);
41
+ var secret = [UInt8](repeating: 0, count: Int(DH_size(dh_mapping_key)))
42
+ DH_compute_key( &secret, bn, dh_mapping_key)
43
+
44
+
45
+ let bn_h = BN_bin2bn(secret, Int32(secret.count), nil);
46
+
47
+ var p : OpaquePointer? = nil
48
+ var q : OpaquePointer? = nil
49
+ var g : OpaquePointer? = nil
50
+ DH_get0_pqg(dh_mapping_key, &p, &q, &g);
51
+
52
+ // map to new generator#imageLiteral(resourceName: "simulator_screenshot_33B42CB4-EA6E-47B4-A2A2-D96CA95B0F15.png")
53
+ let bn_g = BN_new()
54
+ let new_g = BN_new()
55
+
56
+ // bn_g = g^nonce mod p
57
+ // ephemeral_key->g = bn_g mod p * h => (g^nonce mod p) * h mod p
58
+ let bn_ctx = BN_CTX_new()
59
+ let rc3 = BN_mod_exp(bn_g, g, bn_nonce, p, bn_ctx)
60
+ let rc4 = BN_mod_mul(new_g, bn_g, bn_h, p, bn_ctx)
61
+
62
+
63
+ let ephemeral_key = DHparams_dup(dh_mapping_key)
64
+ let rc5 = DH_set0_pqg(ephemeral_key, BN_dup(p), BN_dup(q), BN_dup(new_g))
65
+
66
+ BN_free( bn_nonce )
67
+ BN_free( bn )
68
+ BN_free(bn_h)
69
+ BN_free(bn_g)
70
+ BN_free(new_g)
71
+ BN_CTX_free(bn_ctx)
72
+
73
+ // Set the ephemeral params
74
+ let ephemeralParams = EVP_PKEY_new()
75
+ let rc6 = EVP_PKEY_set1_DH(ephemeralParams, ephemeral_key)
76
+
77
+ EVP_PKEY_free(mappingKey)
78
+
79
+ var ephemeralKeyPair : OpaquePointer? = nil
80
+ let pctx = EVP_PKEY_CTX_new(ephemeralParams, nil)
81
+ EVP_PKEY_keygen_init(pctx)
82
+ EVP_PKEY_keygen(pctx, &ephemeralKeyPair)
83
+ EVP_PKEY_CTX_free(pctx)
84
+
85
+ EVP_PKEY_free( ephemeralParams )
86
+
87
+ let publicKey = OpenSSLUtils.getPublicKeyData( from: ephemeralKeyPair! )
88
+ print( "Ephemeral public key - \(binToHexRep(publicKey!, asArray: true))")
89
+
90
+ return ephemeralKeyPair!
91
+ }
92
+
93
+ func doTest() {
94
+ var passportEphKey : [UInt8] = [0x01, 0xd5, 0xa8, 0xb2, 0xea, 0xb6, 0x18, 0x55, 0x34, 0x24, 0xfe, 0x25, 0x10, 0x15, 0xaf, 0xc3, 0x85, 0xda, 0x13, 0x94, 0xe7, 0x2b, 0x76, 0x81, 0x2d, 0x8c, 0xe0, 0x6f, 0x60, 0x65, 0xfb, 0x33, 0x8c, 0x5b, 0x2d, 0xc9, 0x38, 0x11, 0xb3, 0x80, 0xd7, 0x49, 0xaa, 0xeb, 0x36, 0xa5, 0xdd, 0xa0, 0x78, 0x33, 0xe0, 0xd5, 0x52, 0xd4, 0x4e, 0xaa, 0xf0, 0xa3, 0x5f, 0xd3, 0x9c, 0x89, 0x44, 0xca, 0xac, 0xf1, 0x7a, 0x1e, 0xd4, 0x61, 0x58, 0x1d, 0x81, 0x83, 0xb6, 0x98, 0x85, 0x15, 0x2d, 0xeb, 0xd7, 0xc2, 0x66, 0xe4, 0xe0, 0xd1, 0x73, 0x1c, 0x52, 0xd7, 0x3a, 0x33, 0x20, 0x1f, 0x64, 0x8b, 0x85, 0xb7, 0xe5, 0xbb, 0x09, 0xe8, 0x8a, 0xd3, 0x79, 0x8c, 0x23, 0x7a, 0x35, 0xb2, 0xc5, 0xfa, 0x42, 0xcb, 0xe4, 0xc4, 0x86, 0xa7, 0x8f, 0x96, 0x22, 0xc1, 0x2b, 0x07, 0xc6, 0x29, 0xa2, 0xfd, 0x31, 0xcb, 0xba, 0x1b, 0x05, 0xca, 0xc2, 0xaa, 0xc3, 0x6f, 0x5a, 0xa8, 0x43, 0xa1, 0x60, 0x35, 0x97, 0xda, 0x35, 0xfd, 0x76, 0x16, 0xa9, 0x32, 0x91, 0xd1, 0xd8, 0x7b, 0x0b, 0xfc, 0x30, 0x99, 0x06, 0xa7, 0x62, 0x44, 0x85, 0x2b, 0xb9, 0x9b, 0x5a, 0xfb, 0x94, 0x28, 0x47, 0x40, 0x7f, 0x7a, 0x6a, 0xb2, 0xe9, 0xcc, 0xe3, 0x13, 0x52, 0x7c, 0xc0, 0x87, 0x1d, 0x72, 0xc5, 0x4b, 0x69, 0x0a, 0x2a, 0xc7, 0x37, 0xd5, 0x17, 0xd2, 0xce, 0xd2, 0x54, 0x66, 0x92, 0x42, 0x91, 0x84, 0x24, 0xef, 0xb6, 0x98, 0x6d, 0x78, 0x95, 0x0d, 0x7e, 0x49, 0xd0, 0xee, 0xcc, 0x61, 0x5d, 0x2f, 0x5a, 0xa1, 0xb2, 0xc0, 0xa9, 0xe7, 0x30, 0x94, 0x58, 0x58, 0x7a, 0x59, 0xd7, 0x96, 0xe9, 0x8c, 0x2c, 0xfd, 0xe9, 0x58, 0xe4, 0x4b, 0xa3, 0x31, 0x47, 0x03, 0x57, 0x05, 0x84, 0x6d, 0x3c, 0x4c, 0x3a, 0xaa, ];
95
+
96
+ let ephKeyPair = testDHKeyMapping()
97
+
98
+ let passportPublicKey = OpenSSLUtils.decodePublicKeyFromBytes(pubKeyData: passportEphKey, params: ephKeyPair)
99
+
100
+ let dh = EVP_PKEY_get1_DH(ephKeyPair);
101
+
102
+ var out = [UInt8](repeating:0, count:Int(DH_size(dh)))
103
+
104
+ let dh_ppub = EVP_PKEY_get1_DH(passportPublicKey)
105
+ var bn = BN_new()
106
+ DH_get0_key( dh_ppub, &bn, nil )
107
+
108
+ let len = DH_compute_key(&out, bn, dh);
109
+
110
+ return
111
+ }
112
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Andy Qua
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,27 @@
1
+ Pod::Spec.new do |spec|
2
+
3
+ spec.name = "NFCPassportReader"
4
+ spec.version = "2.1.1"
5
+ spec.summary = "This package handles reading an NFC Enabled passport using iOS 13 CoreNFC APIS"
6
+
7
+ spec.homepage = "https://github.com/AndyQ/NFCPassportReader"
8
+ spec.license = "MIT"
9
+ spec.author = { "Andy Qua" => "andy.qua@gmail.com" }
10
+ spec.platform = :ios
11
+ spec.ios.deployment_target = "14.0"
12
+
13
+ spec.source = { :git => "https://github.com/AndyQ/NFCPassportReader.git", :tag => "#{spec.version}" }
14
+
15
+ spec.source_files = "Sources/**/*.{swift}"
16
+
17
+ spec.swift_version = "5.0"
18
+
19
+ spec.dependency "OpenSSL-Universal", '1.1.1900'
20
+ spec.xcconfig = { 'OTHER_LDFLAGS' => '-weak_framework CryptoKit -weak_framework CoreNFC -weak_framework CryptoTokenKit' }
21
+
22
+ spec.pod_target_xcconfig = {
23
+ 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
24
+ }
25
+ spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
26
+
27
+ end
@@ -0,0 +1,29 @@
1
+ // swift-tools-version:5.4
2
+ // The swift-tools-version declares the minimum version of Swift required to build this package.
3
+
4
+ import PackageDescription
5
+
6
+ let package = Package(
7
+ name: "NFCPassportReader",
8
+ platforms: [.iOS("15.0")],
9
+ products: [
10
+ // Products define the executables and libraries produced by a package, and make them visible to other packages.
11
+ .library(
12
+ name: "NFCPassportReader",
13
+ targets: ["NFCPassportReader"]),
14
+ ],
15
+ dependencies: [
16
+ // Dependencies declare other packages that this package depends on.
17
+ // .package(url: /* package url */, from: "1.0.0"),
18
+ .package(url: "https://github.com/krzyzanowskim/OpenSSL.git", .upToNextMinor(from: "1.1.2300"))
19
+
20
+ ],
21
+ targets: [
22
+ // Targets are the basic building blocks of a package. A target can define a module or a test suite.
23
+ // Targets can depend on other targets in this package, and on products in packages which this package depends on.
24
+ .target(
25
+ name: "NFCPassportReader",
26
+ dependencies: ["OpenSSL"]),
27
+ ]
28
+ )
29
+
@@ -0,0 +1,141 @@
1
+ # NFCPassportReader
2
+
3
+ This package handles reading an NFC Enabled passport using iOS 13 CoreNFC APIS
4
+
5
+ **Version 2 (and the main branch) now uses Swift Async/Await for communication. If you need an earlier version, please use 1.1.9 or below!**
6
+
7
+ Supported features:
8
+ * Basic Access Control (BAC)
9
+ * Secure Messaging
10
+ * Reads DG1 (MRZ data) and DG2 (Image) in both JPEG and JPEG2000 formats, DG7, DG11, DG12, DG14 and DG15 (also SOD and COM datagroups)
11
+ * Passive Authentication
12
+ * Active Authentication
13
+ * Chip Authentication (ECDH DES and AES keys tested, DH DES AES keys implemented ad should work but currently not tested)
14
+ * PACE - currently only Generic Mapping (GM) supported
15
+ * Ability to dump passport stream and read it back in
16
+ * Uses Async/Await
17
+
18
+ This is still very early days - the code is by no means perfect and there are still some rough edges - there ARE most definitely bugs and I'm sure I'm not doing things perfectly.
19
+
20
+ It reads and verifies my passport (and others I've been able to test) fine, however your mileage may vary.
21
+
22
+ ## Installation
23
+ ### Swift Package Manager (recommended)
24
+
25
+ NFCPassportReader may be installed via Swift Package Manager, by pointing to this repo's URL.
26
+
27
+
28
+ ### CocoaPods (deprecated and unsupported)
29
+
30
+ Install using [CocoaPods](http://cocoapods.org) by adding this line to your Podfile:
31
+
32
+ ```ruby
33
+ use_frameworks!
34
+ pod 'NFCPassportReader', git:'https://github.com/AndyQ/NFCPassportReader.git'
35
+ ```
36
+
37
+ Then, run the following command:
38
+
39
+ ```bash
40
+ $ pod install
41
+ ```
42
+
43
+ Note - ** Don't use Bitcode ** - its not supported by this and has been deprecated by Apple
44
+
45
+ ## Usage
46
+ To use, you first need to create the Passport MRZ Key which consists of the passport number, date of birth and expiry date (including the checksums).
47
+ Dates are in YYMMDD format
48
+
49
+ For example:
50
+
51
+ ```
52
+ <passport number><passport number checksum><date of birth><date of birth checksum><expiry date><expiry date checksum>
53
+
54
+ e.g. for Passport nr 12345678, Date of birth 27-Jan-1998, Expiry 30-Aug-2025 the MRZ Key would be:
55
+
56
+ Passport number - 12345678
57
+ Passport number checksum - 8
58
+ Date Of birth - 980127
59
+ Date of birth checksum - 7
60
+ Expiry date - 250831
61
+ Expiry date checksum - 5
62
+
63
+ mrzKey = "12345678898012772508315"
64
+ ```
65
+
66
+ Then on an instance of PassportReader, call the readPassport method passing in the mrzKey, the datagroups to read and a completion block.
67
+ e.g.
68
+
69
+ ```
70
+ passportReader.readPassport(mrzKey: mrzKey, tags: [.COM, .DG1, .DG2], completed: { (error) in
71
+ ...
72
+ }
73
+ ```
74
+
75
+ Currently the datagroups supported are: COM, DG1, DG2, DG7, DG11, DG12, DG14 (partial), DG15, and SOD
76
+
77
+ This will then handle the reading of the passport, and image and will call the completion block either with an TagError error if there was an error of some kind, or nil if successful.
78
+
79
+ If successful, the passportReader object will then contain valid data for the passportMRZ and passportImage fields.
80
+ Note - JPEG2000 images are currently unsupported - access to the raw data is available if you need to implement support for those.
81
+
82
+ In addition, you can customise the messages displayed in the NFC Session Reader by providing a customDisplayMessage callback
83
+ e.g. to override just the initial request to present passport message:
84
+
85
+ ```
86
+ passportReader.readPassport(mrzKey: mrzKey, tags: [.COM, .DG1, .DG2],
87
+ customDisplayMessage: { (displayMessage) in
88
+ switch displayMessage {
89
+ case .requestPresentPassport:
90
+ return "Hold your iPhone near an NFC enabled passport."
91
+ default:
92
+ return nil
93
+ }, completed: { (error) in
94
+ ...
95
+ }
96
+ ```
97
+
98
+
99
+ ## Logging
100
+ Additional logging (very verbose) can be enabled on the PassportReader by passing in a log level on creation:
101
+ e.g.
102
+
103
+ ```
104
+ let reader = PassportReader(logLevel: .debug)
105
+ ```
106
+
107
+ NOTE - currently this is just printing out to the console - I'd like to implement better logging later - probably using SwiftyBeaver
108
+
109
+ ### PassiveAuthentication
110
+ Passive Authentication is now part of the main library and can be used to ensure that an E-Passport is valid and hasn't been tampered with.
111
+
112
+ It requires a set of CSCA certificates in PEM format from a master list (either from a country that publishes their master list, or the ICAO PKD repository). See the scripts folder for details on how to get and create this file.
113
+
114
+ **The masterList.pem file included in the Sample app is purely there to ensure no compiler warnings and contains only a single PEM file that was self-generated and won't be able to verify anything!**
115
+
116
+ ## Sample app
117
+ There is a sample app included in the repo which demonstrates the functionality.
118
+
119
+
120
+ ## Troubleshooting
121
+ * If when doing the initial Mutual Authenticate challenge, you get an error with and SW1 code 0x63, SW2 code 0x00, reason: No information given, then this is usualy because your MRZ key is incorrect, and possibly because your passport number is not quite right. If your passport number in the MRZ contains a '<' then you need to include this in the MRZKey - the checksum should work out correct too. For more details, check out App-D2 in the ICAO 9303 Part 11 document (https://www.icao.int/publications/Documents/9303_p11_cons_en.pdf)
122
+ <br><br>e.g. if the bottom line on the MRZ looks like:
123
+ 12345678<8AUT7005233M2507237<<<<<<<<<<<<<<06
124
+ <br><br>
125
+ In this case the passport number is 12345678 but is padded out with an additonal <. This needs to be included in the MRZ key used for BAC.
126
+ e.g. 12345678<870052332507237 would be the key used.
127
+
128
+
129
+
130
+ ## To do
131
+ There are a number of things I'd like to implement in no particular order:
132
+ * Finish off PACE authentication (IM and CAM)
133
+
134
+
135
+ ## Thanks
136
+ I'd like to thank the writers of pypassport (Jean-Francois Houzard and Olivier Roger - can't find their website but referenced from https://github.com/andrew867/epassportviewer) who's work this is based on.
137
+
138
+ The EPassport section on YobiWiki (http://wiki.yobi.be/wiki/EPassport) This has been an invaluable resource especially around Passive Authentication.
139
+
140
+ Marcin Krzyżanowski for his OpenSSL-Universal repo.
141
+