@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,214 @@
1
+ //
2
+ // MainView.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 04/06/2019.
6
+ // Copyright © 2019 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import SwiftUI
10
+ import Combine
11
+ import NFCPassportReader
12
+ import UniformTypeIdentifiers
13
+
14
+
15
+ struct MainView : View {
16
+ @EnvironmentObject var settings: SettingsStore
17
+ @Environment(\.colorScheme) var colorScheme
18
+
19
+ @State private var showingAlert = false
20
+ @State private var showingSheet = false
21
+ @State private var showDetails = false
22
+ @State private var alertTitle : String = ""
23
+ @State private var alertMessage : String = ""
24
+ @State private var showSettings : Bool = false
25
+ @State private var showScanMRZ : Bool = false
26
+ @State private var showSavedPassports : Bool = false
27
+
28
+ @State var page = 0
29
+
30
+ @State var bgColor = Color( UIColor.systemBackground )
31
+
32
+ private let passportReader = PassportReader()
33
+
34
+ var body: some View {
35
+ NavigationView {
36
+ ZStack {
37
+ NavigationLink( destination: SettingsView(), isActive: $showSettings) { Text("") }
38
+ NavigationLink( destination: PassportView(), isActive: $showDetails) { Text("") }
39
+ NavigationLink( destination: StoredPassportView(), isActive: $showSavedPassports) { Text("") }
40
+ NavigationLink( destination: MRZScanner(completionHandler:{ (nr,dob,doe) in
41
+ settings.passportNumber = nr
42
+ settings.dateOfBirth = dob
43
+ settings.dateOfExpiry = doe
44
+ showScanMRZ = false
45
+ }).navigationTitle("Scan MRZ"), isActive: $showScanMRZ){ Text("") }
46
+
47
+ VStack {
48
+ HStack {
49
+ Spacer()
50
+ Button(action: {self.showScanMRZ.toggle()}) {
51
+ Label("Scan MRZ", systemImage:"camera")
52
+ }.padding([.top, .trailing])
53
+ }
54
+ MRZEntryView()
55
+
56
+ Button(action: {
57
+ self.scanPassport()
58
+ }) {
59
+ Text("Scan Passport")
60
+ .font(.largeTitle)
61
+ .foregroundColor(isValid ? .secondary : Color.secondary.opacity(0.25))
62
+ }
63
+ .disabled( !isValid )
64
+
65
+ Spacer()
66
+ HStack(alignment:.firstTextBaseline) {
67
+ Text( "Version - \(UIApplication.version)" )
68
+ .font(.footnote)
69
+ .padding(.leading)
70
+ Spacer()
71
+ Button(action: {
72
+ shareLogs()
73
+ }) {
74
+ Text("Share logs")
75
+ .foregroundColor(.secondary)
76
+ }.padding(.trailing)
77
+ .disabled( !isValid )
78
+ }
79
+ }
80
+ }
81
+ .navigationBarTitle("Passport details", displayMode: .automatic)
82
+ .toolbar {
83
+ ToolbarItem(placement: .primaryAction) {
84
+ Menu {
85
+ Button(action: {showSettings.toggle()}) {
86
+ Label("Settings", systemImage: "gear")
87
+ }
88
+ Button(action: {self.showSavedPassports.toggle()}) {
89
+ Label("Show saved passports", systemImage: "doc")
90
+ }
91
+ } label: {
92
+ Image(systemName: "gear")
93
+ .foregroundColor(Color.secondary)
94
+ }
95
+ }
96
+ }
97
+ .alert(isPresented: $showingAlert) {
98
+ Alert(title: Text(alertTitle), message:
99
+ Text(alertMessage), dismissButton: .default(Text("Got it!")))
100
+ }
101
+ .background(colorScheme == .dark ? Color.black : Color.white)
102
+ }
103
+ }
104
+ }
105
+
106
+ // MARK: View functions - functions that affect the view
107
+ extension MainView {
108
+
109
+ var isValid : Bool {
110
+ return settings.passportNumber.count >= 8
111
+ }
112
+
113
+ }
114
+
115
+ // MARK: Action Functions
116
+ extension MainView {
117
+
118
+ func shareLogs() {
119
+ hideKeyboard()
120
+ PassportUtils.shareLogs()
121
+ }
122
+
123
+ func scanPassport( ) {
124
+ hideKeyboard()
125
+ self.showDetails = false
126
+
127
+ let df = DateFormatter()
128
+ df.timeZone = TimeZone(secondsFromGMT: 0)
129
+ df.dateFormat = "YYMMdd"
130
+
131
+ let pptNr = settings.passportNumber
132
+ let dob = df.string(from:settings.dateOfBirth)
133
+ let doe = df.string(from:settings.dateOfExpiry)
134
+
135
+ let passportUtils = PassportUtils()
136
+ let mrzKey = passportUtils.getMRZKey( passportNumber: pptNr, dateOfBirth: dob, dateOfExpiry: doe)
137
+
138
+ // Set the masterListURL on the Passport Reader to allow auto passport verification
139
+ let masterListURL = Bundle.main.url(forResource: "masterList", withExtension: ".pem")!
140
+ passportReader.setMasterListURL( masterListURL )
141
+
142
+ // Set whether to use the new Passive Authentication verification method (default true) or the old OpenSSL CMS verifiction
143
+ passportReader.passiveAuthenticationUsesOpenSSL = !settings.useNewVerificationMethod
144
+
145
+ // If we want to read only specific data groups we can using:
146
+ // let dataGroups : [DataGroupId] = [.COM, .SOD, .DG1, .DG2, .DG7, .DG11, .DG12, .DG14, .DG15]
147
+ // passportReader.readPassport(mrzKey: mrzKey, tags:dataGroups, completed: { (passport, error) in
148
+
149
+ Log.logLevel = settings.logLevel
150
+ Log.storeLogs = settings.shouldCaptureLogs
151
+ Log.clearStoredLogs()
152
+
153
+ Log.error( "Using version \(UIApplication.version)" )
154
+
155
+ Task {
156
+ let customMessageHandler : (NFCViewDisplayMessage)->String? = { (displayMessage) in
157
+ switch displayMessage {
158
+ case .requestPresentPassport:
159
+ return "Hold your iPhone near an NFC enabled passport."
160
+ default:
161
+ // Return nil for all other messages so we use the provided default
162
+ return nil
163
+ }
164
+ }
165
+
166
+ do {
167
+ let passport = try await passportReader.readPassport( mrzKey: mrzKey, customDisplayMessage:customMessageHandler)
168
+
169
+ if settings.savePassportOnScan {
170
+ // Save passport
171
+ let dict = passport.dumpPassportData(selectedDataGroups: DataGroupId.allCases, includeActiveAuthenticationData: true)
172
+ if let data = try? JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted) {
173
+
174
+ let savedPath = FileManager.cachesFolder.appendingPathComponent("\(passport.documentNumber).json")
175
+
176
+ try? data.write(to: savedPath, options: .completeFileProtection)
177
+ }
178
+ }
179
+
180
+ DispatchQueue.main.async {
181
+ self.settings.passport = passport
182
+ self.showDetails = true
183
+ }
184
+ } catch {
185
+ self.alertTitle = "Oops"
186
+ self.alertTitle = error.localizedDescription
187
+ self.showingAlert = true
188
+
189
+ }
190
+ }
191
+ }
192
+ }
193
+
194
+ //MARK: PreviewProvider
195
+ #if DEBUG
196
+ struct ContentView_Previews : PreviewProvider {
197
+
198
+ static var previews: some View {
199
+ let settings = SettingsStore()
200
+
201
+ return Group {
202
+ MainView()
203
+ .environmentObject(settings)
204
+ .environment( \.colorScheme, .light)
205
+ MainView()
206
+ .environmentObject(settings)
207
+ .environment( \.colorScheme, .dark)
208
+ }
209
+ }
210
+ }
211
+ #endif
212
+
213
+
214
+
@@ -0,0 +1,111 @@
1
+ //
2
+ // PassportSummaryView.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 17/02/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import SwiftUI
10
+ import NFCPassportReader
11
+
12
+ struct PassportSummaryView: View {
13
+ @EnvironmentObject var settings: SettingsStore
14
+
15
+ @State var passport: NFCPassportModel
16
+
17
+ var body: some View {
18
+ VStack {
19
+ PassportDetailsView(passport: passport)
20
+ .background( Color.primary.colorInvert() )
21
+ .cornerRadius(10)
22
+ .shadow(radius: 20)
23
+ .overlay(
24
+ RoundedRectangle(cornerRadius: 10)
25
+ .stroke(Color.primary, lineWidth: 2)
26
+ )
27
+ .padding()
28
+ }
29
+
30
+ }
31
+ }
32
+
33
+
34
+ // Shows the Pzssport details
35
+ struct PassportDetailsView : View {
36
+ var passport: NFCPassportModel
37
+
38
+ var body: some View {
39
+ HStack(alignment: .top) {
40
+ VStack(alignment: .leading) {
41
+ Image(uiImage:passport.passportImage ?? UIImage(named:"head")!)
42
+ .resizable()
43
+ .renderingMode(.original)
44
+ .aspectRatio(contentMode: .fit)
45
+ .frame(width: 120, height: 180)
46
+ .padding([.leading], 10.0)
47
+ }
48
+ VStack {
49
+ HStack {
50
+ Text( passport.documentType)
51
+ Text( passport.issuingAuthority)
52
+ Text( passport.documentNumber)
53
+ Spacer()
54
+ }
55
+ HStack {
56
+ VStack(alignment: .leading) {
57
+ Text( passport.lastName)
58
+ Text( passport.firstName)
59
+ Text( passport.nationality)
60
+ Text( passport.dateOfBirth)
61
+ Text( passport.gender)
62
+ Text( passport.documentExpiryDate )
63
+ }
64
+ Spacer()
65
+ VStack {
66
+ if !passport.passportDataNotTampered {
67
+ Image( systemName:"exclamationmark").foregroundColor(.red)
68
+ .font(.system(size: 20))
69
+ Text( "Tampered")
70
+ .font(.caption)
71
+ .foregroundColor(.red)
72
+ .padding(.bottom)
73
+ }
74
+ if passport.passportCorrectlySigned && passport.documentSigningCertificateVerified {
75
+ Image( systemName:"checkmark.seal").foregroundColor(.green)
76
+ .font(.system(size: 25))
77
+ Text( "Genuine")
78
+ .font(.caption)
79
+ .foregroundColor(.green)
80
+ } else {
81
+ Image( systemName:"xmark.seal").foregroundColor(.red)
82
+ .font(.system(size: 25))
83
+ .padding([.leading,.trailing], 15)
84
+ Text( "Not Genuine")
85
+ .font(.caption)
86
+ .foregroundColor(.red)
87
+ }
88
+ }
89
+ .padding(.trailing)
90
+ }
91
+ }
92
+ .padding(.top, 8)
93
+ }
94
+ }
95
+ }
96
+
97
+
98
+ struct PassportSummaryView_Previews: PreviewProvider {
99
+ static var previews: some View {
100
+
101
+ let settings = SettingsStore()
102
+ let passport = NFCPassportModel()
103
+
104
+ return Group {
105
+ PassportSummaryView(passport:passport)
106
+ .environment( \.colorScheme, .light)
107
+ .environmentObject(settings)
108
+
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,73 @@
1
+
2
+ //
3
+ // PassportView.swift
4
+ // NFCPassportReaderApp
5
+ //
6
+ // Created by Andy Qua on 30/06/2019.
7
+ // Copyright © 2019 Andy Qua. All rights reserved.
8
+ //
9
+
10
+ import SwiftUI
11
+ import NFCPassportReader
12
+
13
+ struct PassportView : View {
14
+ @EnvironmentObject var settings: SettingsStore
15
+ @State private var showExportPassport : Bool = false
16
+
17
+ var body: some View {
18
+ VStack {
19
+ NavigationLink( destination: ExportPassportView(), isActive: $showExportPassport) { Text("") }
20
+
21
+ PassportSummaryView(passport:settings.passport!)
22
+ HStack {
23
+
24
+ Button(action: {showExportPassport.toggle()}) {
25
+ Label("Export passport", systemImage: "square.and.arrow.up")
26
+ }
27
+ .padding()
28
+ Spacer()
29
+ Button(action: {shareLogs()}) {
30
+ Label("Share logs", systemImage: "square.and.arrow.up")
31
+ }
32
+ .padding()
33
+ }
34
+ DetailsView(passport:settings.passport!)
35
+ }
36
+ .navigationTitle("Passport Details")
37
+ .navigationBarTitleDisplayMode(.inline)
38
+ }
39
+ }
40
+
41
+ extension PassportView {
42
+ func shareLogs() {
43
+ hideKeyboard()
44
+ PassportUtils.shareLogs()
45
+ }
46
+ }
47
+
48
+ #if DEBUG
49
+ struct PassportView_Previews : PreviewProvider {
50
+ static var previews: some View {
51
+
52
+ let passport : NFCPassportModel
53
+ if let file = Bundle.main.url(forResource: "passport", withExtension: "json"),
54
+ let data = try? Data(contentsOf: file),
55
+ let json = try? JSONSerialization.jsonObject(with: data, options: []),
56
+ let arr = json as? [String:String] {
57
+ passport = NFCPassportModel(from: arr)
58
+ } else {
59
+ passport = NFCPassportModel()
60
+ }
61
+ let settings = SettingsStore()
62
+ settings.passport = passport
63
+
64
+ return NavigationView {
65
+ PassportView()
66
+ .environmentObject(settings)
67
+ .environment( \.colorScheme, .light)
68
+ .navigationTitle("WEEE")
69
+ .navigationBarTitleDisplayMode(.inline)
70
+ }
71
+ }
72
+ }
73
+ #endif
@@ -0,0 +1,63 @@
1
+ //
2
+ // SettingsView.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 10/02/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import SwiftUI
10
+ import NFCPassportReader
11
+
12
+ struct SettingsView: View {
13
+ @EnvironmentObject var settings: SettingsStore
14
+
15
+ private var logLevels = ["Verbose", "Debug", "Info", "Warning", "Error"]
16
+
17
+ var body: some View {
18
+ Form {
19
+ Section(header: Text("Logging settings")) {
20
+ Toggle(isOn: $settings.shouldCaptureLogs) {
21
+ Text("Should capture logs")
22
+ }
23
+
24
+ Picker(
25
+ selection: $settings.logLevel,
26
+ label: Text("Logging level")
27
+ ) {
28
+ ForEach(LogLevel.allCases, id: \.self) {
29
+ Text(logLevels[$0.rawValue] ).tag($0)
30
+ }
31
+ }
32
+
33
+ }
34
+
35
+ Section(header: Text("Passport reading settings")) {
36
+ Toggle(isOn: $settings.useNewVerificationMethod) {
37
+ Text("Use new Passive Authentication")
38
+ }
39
+ .padding(.bottom)
40
+ VStack {
41
+ Toggle(isOn: $settings.savePassportOnScan) {
42
+ Text("Save passport on scan & import")
43
+ }
44
+ HStack {
45
+ Text( "Note - currently stored as JSON on device\nWill not be backed up to iCloud" )
46
+ .font(.footnote)
47
+ Spacer()
48
+ }
49
+ }
50
+ }
51
+
52
+ }
53
+ .navigationBarTitle(Text("Settings"))
54
+ }
55
+ }
56
+
57
+ struct SettingsView_Previews: PreviewProvider {
58
+ static var previews: some View {
59
+ let settings = SettingsStore()
60
+ SettingsView()
61
+ .environmentObject(settings)
62
+ }
63
+ }
@@ -0,0 +1,152 @@
1
+ //
2
+ // StorePassportView.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 17/02/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import SwiftUI
10
+ import NFCPassportReader
11
+
12
+ struct StoredPassportView: View {
13
+ @EnvironmentObject var settings: SettingsStore
14
+ @State private var showImport : Bool = false
15
+ @State private var showDetails = false
16
+ @State private var storedPassports = [URL]()
17
+
18
+ var body: some View {
19
+ ZStack {
20
+ NavigationLink( destination: PassportView(), isActive: $showDetails) { Text("") }
21
+
22
+ VStack {
23
+ List {
24
+ ForEach(self.storedPassports, id: \.self) { item in
25
+ Button(action:{
26
+ if let data = try? Data(contentsOf: item),
27
+ let passport = loadPassport(data:data) {
28
+ self.settings.passport = passport
29
+ self.showDetails = true
30
+ }
31
+ }) {
32
+ HStack {
33
+ Text(item.deletingPathExtension().lastPathComponent)
34
+ Spacer()
35
+ }
36
+ }
37
+ .foregroundColor(.primary)
38
+ }
39
+ .onDelete(perform: deletePassport)
40
+ }
41
+ Spacer()
42
+ if ( !settings.savePassportOnScan ) {
43
+ Text( "Imported or scanned passports are currently not being saved.\nThis can be changed in Settings" )
44
+ .multilineTextAlignment(.center)
45
+ .padding(10)
46
+ }
47
+ }
48
+
49
+ }
50
+ .toolbar {
51
+ ToolbarItem(placement: .primaryAction) {
52
+ Menu {
53
+ Button(action: {self.showImport.toggle()}) {
54
+ Label("Import passport", systemImage: "doc")
55
+ }
56
+ } label: {
57
+ Image(systemName: "square.and.arrow.down")
58
+ .foregroundColor(Color.secondary)
59
+ }
60
+ }
61
+ }
62
+ .fileImporter(
63
+ isPresented: $showImport, allowedContentTypes: [.json,.text],
64
+ allowsMultipleSelection: false
65
+ ) { result in
66
+
67
+ hideKeyboard()
68
+
69
+ guard let selectedFile: URL = try? result.get().first else { return }
70
+ if selectedFile.startAccessingSecurityScopedResource() {
71
+ defer { selectedFile.stopAccessingSecurityScopedResource() }
72
+ importFile( url:selectedFile )
73
+ } else {
74
+ print("Unable to read file contents - denied")
75
+ }
76
+
77
+ }
78
+ .onAppear() {
79
+ loadStoredPassports()
80
+ }
81
+ }
82
+ }
83
+
84
+ extension StoredPassportView {
85
+ func loadStoredPassports() {
86
+
87
+ do {
88
+ let urls = try FileManager.default.contentsOfDirectory(at: FileManager.cachesFolder, includingPropertiesForKeys: nil, options: [])
89
+
90
+ storedPassports = urls.filter { $0.pathExtension == "json" }
91
+ } catch {
92
+ print("Could not search for urls of files in documents directory: \(error)")
93
+ }
94
+ }
95
+
96
+ func importFile( url : URL ) {
97
+ Log.logLevel = settings.logLevel
98
+ Log.storeLogs = settings.shouldCaptureLogs
99
+ Log.clearStoredLogs()
100
+
101
+ do {
102
+ let data = try Data(contentsOf: url )
103
+ if let passport = loadPassport( data: data ) {
104
+
105
+ if ( settings.savePassportOnScan ) {
106
+ // Save passport to docs folder
107
+ let savedPath = FileManager.cachesFolder.appendingPathComponent("\(passport.documentNumber).json")
108
+ try? data.write(to: savedPath, options: .completeFileProtection)
109
+ }
110
+
111
+ self.settings.passport = passport
112
+ self.showDetails = true
113
+ }
114
+ } catch {
115
+ // Handle failure.
116
+ print("Unable to read file contents")
117
+ print(error.localizedDescription)
118
+ }
119
+ }
120
+
121
+ func loadPassport( data: Data) -> NFCPassportModel? {
122
+ let json = try? JSONSerialization.jsonObject(with: data, options: [])
123
+ if let arr = json as? [String:String] {
124
+
125
+ let passport = NFCPassportModel(from: arr)
126
+
127
+ let masterListURL = Bundle.main.url(forResource: "masterList", withExtension: ".pem")!
128
+ passport.verifyPassport(masterListURL: masterListURL)
129
+ return passport
130
+ }
131
+ return nil
132
+ }
133
+
134
+ func deletePassport( at offsets: IndexSet) {
135
+
136
+ let fm = FileManager.default
137
+ offsets.forEach {
138
+ let url = storedPassports[$0]
139
+ try? fm.removeItem(at: url)
140
+ }
141
+ storedPassports.remove(atOffsets: offsets)
142
+ }
143
+ }
144
+
145
+ struct StoredPassportView_Previews: PreviewProvider {
146
+ static var previews: some View {
147
+ let settings = SettingsStore()
148
+
149
+ StoredPassportView()
150
+ .environmentObject(settings)
151
+ }
152
+ }
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ ZhNynFjgmgY=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,10 @@
1
+ # NFCPassportReaderApp
2
+
3
+ This is a sample app showing how to read a e-passport using the NFCPassportReader library
4
+
5
+
6
+ This is purely a demonstration - you have to manually enter the passport number, the date of birth and passport expiry date but it does calculate the checksums for you.
7
+
8
+ Also, the last entered passport details are saved to UserDefaults to save you having to re-enter them each time.
9
+
10
+ It reads my passport (and others I've been able to test) fine, however your milage may vary.