@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,79 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
7
+ <key>CFBundleDisplayName</key>
8
+ <string>NFCPassportReaderApp</string>
9
+ <key>CFBundleExecutable</key>
10
+ <string>$(EXECUTABLE_NAME)</string>
11
+ <key>CFBundleIdentifier</key>
12
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13
+ <key>CFBundleInfoDictionaryVersion</key>
14
+ <string>6.0</string>
15
+ <key>CFBundleName</key>
16
+ <string>$(PRODUCT_NAME)</string>
17
+ <key>CFBundlePackageType</key>
18
+ <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
19
+ <key>CFBundleShortVersionString</key>
20
+ <string>$(MARKETING_VERSION)</string>
21
+ <key>CFBundleVersion</key>
22
+ <string>$(CURRENT_PROJECT_VERSION)</string>
23
+ <key>LSRequiresIPhoneOS</key>
24
+ <true/>
25
+ <key>NFCReaderUsageDescription</key>
26
+ <string>This app uses NFC to scan passports</string>
27
+ <key>NSCameraUsageDescription</key>
28
+ <string>This app uses the camera to read passports</string>
29
+ <key>UIApplicationSceneManifest</key>
30
+ <dict>
31
+ <key>UIApplicationSupportsMultipleScenes</key>
32
+ <false/>
33
+ <key>UISceneConfigurations</key>
34
+ <dict>
35
+ <key>UIWindowSceneSessionRoleApplication</key>
36
+ <array>
37
+ <dict>
38
+ <key>UILaunchStoryboardName</key>
39
+ <string>LaunchScreen</string>
40
+ <key>UISceneConfigurationName</key>
41
+ <string>Default Configuration</string>
42
+ <key>UISceneDelegateClassName</key>
43
+ <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
44
+ </dict>
45
+ </array>
46
+ </dict>
47
+ </dict>
48
+ <key>UIFileSharingEnabled</key>
49
+ <true/>
50
+ <key>UILaunchStoryboardName</key>
51
+ <string>LaunchScreen</string>
52
+ <key>UIRequiredDeviceCapabilities</key>
53
+ <array>
54
+ <string>nfc</string>
55
+ <string>armv7</string>
56
+ </array>
57
+ <key>UISupportedInterfaceOrientations</key>
58
+ <array>
59
+ <string>UIInterfaceOrientationPortrait</string>
60
+ <string>UIInterfaceOrientationLandscapeLeft</string>
61
+ <string>UIInterfaceOrientationLandscapeRight</string>
62
+ </array>
63
+ <key>UISupportedInterfaceOrientations~ipad</key>
64
+ <array>
65
+ <string>UIInterfaceOrientationPortrait</string>
66
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
67
+ <string>UIInterfaceOrientationLandscapeLeft</string>
68
+ <string>UIInterfaceOrientationLandscapeRight</string>
69
+ </array>
70
+ <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
71
+ <array>
72
+ <string>D2760000850101</string>
73
+ <string>A0000002471001</string>
74
+ <string>A0000002472001</string>
75
+ <string>00000000000000</string>
76
+ <string>A000000151000000</string>
77
+ </array>
78
+ </dict>
79
+ </plist>
@@ -0,0 +1,99 @@
1
+ //
2
+ // PassportUtils.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 30/06/2019.
6
+ // Copyright © 2019 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import NFCPassportReader
11
+ import OSLog
12
+
13
+ var lastPassportScanTime : Date = Date().addingTimeInterval(-3600)
14
+
15
+ class PassportUtils {
16
+
17
+ func getMRZKey(passportNumber: String, dateOfBirth: String, dateOfExpiry: String ) -> String {
18
+
19
+ // Pad fields if necessary
20
+ let pptNr = pad( passportNumber, fieldLength:9)
21
+ let dob = pad( dateOfBirth, fieldLength:6)
22
+ let exp = pad( dateOfExpiry, fieldLength:6)
23
+
24
+ // Calculate checksums
25
+ let passportNrChksum = calcCheckSum(pptNr)
26
+ let dateOfBirthChksum = calcCheckSum(dob)
27
+ let expiryDateChksum = calcCheckSum(exp)
28
+
29
+ let mrzKey = "\(pptNr)\(passportNrChksum)\(dob)\(dateOfBirthChksum)\(exp)\(expiryDateChksum)"
30
+
31
+ return mrzKey
32
+ }
33
+
34
+ func pad( _ value : String, fieldLength:Int ) -> String {
35
+ // Pad out field lengths with < if they are too short
36
+ let paddedValue = (value + String(repeating: "<", count: fieldLength)).prefix(fieldLength)
37
+ return String(paddedValue)
38
+ }
39
+
40
+ func calcCheckSum( _ checkString : String ) -> Int {
41
+ let characterDict = ["0" : "0", "1" : "1", "2" : "2", "3" : "3", "4" : "4", "5" : "5", "6" : "6", "7" : "7", "8" : "8", "9" : "9", "<" : "0", " " : "0", "A" : "10", "B" : "11", "C" : "12", "D" : "13", "E" : "14", "F" : "15", "G" : "16", "H" : "17", "I" : "18", "J" : "19", "K" : "20", "L" : "21", "M" : "22", "N" : "23", "O" : "24", "P" : "25", "Q" : "26", "R" : "27", "S" : "28","T" : "29", "U" : "30", "V" : "31", "W" : "32", "X" : "33", "Y" : "34", "Z" : "35"]
42
+
43
+ var sum = 0
44
+ var m = 0
45
+ let multipliers : [Int] = [7, 3, 1]
46
+ for c in checkString {
47
+ guard let lookup = characterDict["\(c)"],
48
+ let number = Int(lookup) else { return 0 }
49
+ let product = number * multipliers[m]
50
+ sum += product
51
+ m = (m+1) % 3
52
+ }
53
+
54
+ return (sum % 10)
55
+ }
56
+
57
+ static func shareLogs() {
58
+ do {
59
+ var arr = (try? getLogEntries()) ?? []
60
+ arr.insert("LogLevel,Date,Subsystem,Category,Message", at: 0)
61
+
62
+ let csv = arr.joined(separator:"\n")
63
+ if let data = csv.data(using: .utf8) {
64
+
65
+ let temporaryURL = URL(fileURLWithPath: NSTemporaryDirectory() + "passportreader_log.csv")
66
+ try data.write(to: temporaryURL)
67
+
68
+ let av = UIActivityViewController(activityItems: [temporaryURL], applicationActivities: nil)
69
+ let keyWindow = UIApplication.shared.connectedScenes
70
+ .filter({$0.activationState == .foregroundActive})
71
+ .map({$0 as? UIWindowScene})
72
+ .compactMap({$0})
73
+ .first?.windows
74
+ .filter({$0.isKeyWindow}).first
75
+
76
+ keyWindow?.rootViewController?.present(av, animated: true, completion: nil)
77
+ }
78
+ } catch {
79
+ print( "ERROR - \(error)" )
80
+ }
81
+ }
82
+
83
+ static func getLogEntries() throws -> [String] {
84
+ let subsystem = Bundle.main.bundleIdentifier!
85
+
86
+ print( "Getting logs since \(lastPassportScanTime)")
87
+
88
+ let logStore = try OSLogStore(scope: .currentProcessIdentifier)
89
+ let lastScanTime = logStore.position(date: lastPassportScanTime)
90
+ let allEntries = try logStore.getEntries(at: lastScanTime)
91
+
92
+ // FB8518539: Using NSPredicate to filter the subsystem doesn't seem to work.
93
+ return allEntries
94
+ .compactMap { $0 as? OSLogEntryLog }
95
+ .filter { $0.subsystem == subsystem && $0.date > lastPassportScanTime }
96
+ .map { "\($0.level.rawValue),\($0.date),\($0.subsystem),\($0.category),\"\($0.composedMessage)\"" }
97
+ }
98
+ }
99
+
@@ -0,0 +1,98 @@
1
+ //
2
+ // SettingsStore.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 Combine
11
+ import NFCPassportReader
12
+
13
+ final class SettingsStore: ObservableObject {
14
+
15
+ private enum Keys {
16
+ static let captureLog = "captureLog"
17
+ static let logLevel = "logLevel"
18
+ static let useNewVerification = "useNewVerification"
19
+ static let savePassportOnScan = "savePassportOnScan"
20
+ static let passportNumber = "passportNumber"
21
+ static let dateOfBirth = "dateOfBirth"
22
+ static let dateOfExpiry = "dateOfExpiry"
23
+
24
+ static let allVals = [captureLog, logLevel, useNewVerification, passportNumber, dateOfBirth, dateOfExpiry]
25
+ }
26
+
27
+ private let cancellable: Cancellable
28
+ private let defaults: UserDefaults
29
+
30
+ let objectWillChange = PassthroughSubject<Void, Never>()
31
+
32
+ init(defaults: UserDefaults = .standard) {
33
+ self.defaults = defaults
34
+
35
+
36
+ defaults.register(defaults: [
37
+ Keys.captureLog: true,
38
+ Keys.logLevel: 1,
39
+ Keys.useNewVerification: true,
40
+ Keys.savePassportOnScan: false,
41
+ Keys.passportNumber: "",
42
+ Keys.dateOfBirth: Date().timeIntervalSince1970,
43
+ Keys.dateOfExpiry: Date().timeIntervalSince1970,
44
+ ])
45
+
46
+ cancellable = NotificationCenter.default
47
+ .publisher(for: UserDefaults.didChangeNotification)
48
+ .map { _ in () }
49
+ .subscribe(objectWillChange)
50
+ }
51
+
52
+ func reset() {
53
+ if let bundleID = Bundle.main.bundleIdentifier {
54
+ UserDefaults.standard.removePersistentDomain(forName: bundleID)
55
+ }
56
+ }
57
+
58
+ var shouldCaptureLogs: Bool {
59
+ set { defaults.set(newValue, forKey: Keys.captureLog) }
60
+ get { defaults.bool(forKey: Keys.captureLog) }
61
+ }
62
+
63
+ var useNewVerificationMethod: Bool {
64
+ set { defaults.set(newValue, forKey: Keys.useNewVerification) }
65
+ get { defaults.bool(forKey: Keys.useNewVerification) }
66
+ }
67
+
68
+ var savePassportOnScan: Bool {
69
+ set { defaults.set(newValue, forKey: Keys.savePassportOnScan) }
70
+ get { defaults.bool(forKey: Keys.savePassportOnScan) }
71
+ }
72
+
73
+ var passportNumber: String {
74
+ set { defaults.set(newValue, forKey: Keys.passportNumber) }
75
+ get { defaults.string(forKey: Keys.passportNumber) ?? "" }
76
+ }
77
+
78
+ var dateOfBirth: Date {
79
+ set {
80
+ defaults.set(newValue.timeIntervalSince1970, forKey: Keys.dateOfBirth)
81
+ }
82
+ get {
83
+ let d = Date(timeIntervalSince1970: defaults.double(forKey: Keys.dateOfBirth))
84
+ return d
85
+ }
86
+ }
87
+
88
+ var dateOfExpiry: Date {
89
+ set {
90
+ defaults.set(newValue.timeIntervalSince1970, forKey: Keys.dateOfExpiry) }
91
+ get {
92
+ let d = Date(timeIntervalSince1970: defaults.double(forKey: Keys.dateOfExpiry))
93
+ return d
94
+ }
95
+ }
96
+
97
+ @Published var passport : NFCPassportModel?
98
+ }
@@ -0,0 +1,75 @@
1
+ //
2
+ // SettingsStoreCAN.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 Combine
11
+ import NFCPassportReader
12
+
13
+ final class SettingsStoreCAN: ObservableObject {
14
+
15
+ private enum Keys {
16
+ static let captureLog = "captureLog"
17
+ static let logLevel = "logLevel"
18
+ static let useNewVerification = "useNewVerification"
19
+ static let savePassportOnScan = "savePassportOnScan"
20
+ static let passportNumber = "passportNumber"
21
+
22
+ static let allVals = [captureLog, logLevel, useNewVerification, passportNumber,]
23
+ }
24
+
25
+ private let cancellable: Cancellable
26
+ private let defaults: UserDefaults
27
+
28
+ let objectWillChange = PassthroughSubject<Void, Never>()
29
+
30
+ init(defaults: UserDefaults = .standard) {
31
+ self.defaults = defaults
32
+
33
+
34
+ defaults.register(defaults: [
35
+ Keys.captureLog: true,
36
+ Keys.logLevel: 1,
37
+ Keys.useNewVerification: true,
38
+ Keys.savePassportOnScan: false,
39
+ Keys.passportNumber: "",
40
+ ])
41
+
42
+ cancellable = NotificationCenter.default
43
+ .publisher(for: UserDefaults.didChangeNotification)
44
+ .map { _ in () }
45
+ .subscribe(objectWillChange)
46
+ }
47
+
48
+ func reset() {
49
+ if let bundleID = Bundle.main.bundleIdentifier {
50
+ UserDefaults.standard.removePersistentDomain(forName: bundleID)
51
+ }
52
+ }
53
+
54
+ var shouldCaptureLogs: Bool {
55
+ set { defaults.set(newValue, forKey: Keys.captureLog) }
56
+ get { defaults.bool(forKey: Keys.captureLog) }
57
+ }
58
+
59
+ var useNewVerificationMethod: Bool {
60
+ set { defaults.set(newValue, forKey: Keys.useNewVerification) }
61
+ get { defaults.bool(forKey: Keys.useNewVerification) }
62
+ }
63
+
64
+ var savePassportOnScan: Bool {
65
+ set { defaults.set(newValue, forKey: Keys.savePassportOnScan) }
66
+ get { defaults.bool(forKey: Keys.savePassportOnScan) }
67
+ }
68
+
69
+ var passportNumber: String {
70
+ set { defaults.set(newValue, forKey: Keys.passportNumber) }
71
+ get { defaults.string(forKey: Keys.passportNumber) ?? "" }
72
+ }
73
+
74
+ @Published var passport : NFCPassportModel?
75
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Ali Mert Özdemir
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,34 @@
1
+ /*
2
+ See LICENSE folder for this sample’s licensing information.
3
+
4
+ Abstract:
5
+ Application preview view
6
+ */
7
+
8
+ import UIKit
9
+ import AVFoundation
10
+
11
+ class PreviewView: UIView {
12
+ var videoPreviewLayer: AVCaptureVideoPreviewLayer {
13
+ guard let layer = layer as? AVCaptureVideoPreviewLayer else {
14
+ fatalError("Expected `AVCaptureVideoPreviewLayer` type for layer. Check PreviewView.layerClass implementation.")
15
+ }
16
+
17
+ return layer
18
+ }
19
+
20
+ var session: AVCaptureSession? {
21
+ get {
22
+ return videoPreviewLayer.session
23
+ }
24
+ set {
25
+ videoPreviewLayer.session = newValue
26
+ }
27
+ }
28
+
29
+ // MARK: UIView
30
+
31
+ override class var layerClass: AnyClass {
32
+ return AVCaptureVideoPreviewLayer.self
33
+ }
34
+ }
@@ -0,0 +1,160 @@
1
+ /*
2
+ See LICENSE folder for this sample’s licensing information.
3
+
4
+ Abstract:
5
+ Utilities for dealing with recognized strings
6
+ */
7
+
8
+ import Foundation
9
+
10
+ var captureFirst = ""
11
+ var captureSecond = ""
12
+ var captureThird = ""
13
+ var mrz = ""
14
+ var temp_mrz = ""
15
+
16
+ extension String {
17
+
18
+ func checkMrz() -> (String)? {
19
+
20
+ let tdOneFirstRegex = "(I|C|A).[A-Z0<]{3}[A-Z0-9]{1,9}<?[0-9O]{1}[A-Z0-9<]{14,22}"
21
+ let tdOneSecondRegex = "[0-9O]{7}(M|F|<)[0-9O]{7}[A-Z0<]{3}[A-Z0-9<]{11}[0-9O]"
22
+ let tdOneThirdRegex = "([A-Z0]+<)+<([A-Z0]+<)+<+"
23
+ let tdOneMrzRegex = "(I|C|A).[A-Z0<]{3}[A-Z0-9]{1,9}<?[0-9O]{1}[A-Z0-9<]{14,22}\n[0-9O]{7}(M|F|<)[0-9O]{7}[A-Z0<]{3}[A-Z0-9<]{11}[0-9O]\n([A-Z0]+<)+<([A-Z0]+<)+<+"
24
+
25
+ let tdThreeFirstRegex = "P.[A-Z0<]{3}([A-Z0]+<)+<([A-Z0]+<)+<+"
26
+ let tdThreeSecondRegex = "[A-Z0-9]{1,9}<?[0-9O]{1}[A-Z0<]{3}[0-9]{7}(M|F|<)[0-9O]{7}[A-Z0-9<]+"
27
+ let tdThreeMrzRegex = "P.[A-Z0<]{3}([A-Z0]+<)+<([A-Z0]+<)+<+\n[A-Z0-9]{1,9}<?[0-9O]{1}[A-Z0<]{3}[0-9]{7}(M|F|<)[0-9O]{7}[A-Z0-9<]+"
28
+
29
+ let tdOneFirstLine = self.range(of: tdOneFirstRegex, options: .regularExpression, range: nil, locale: nil)
30
+ let tdOneSecondLine = self.range(of: tdOneSecondRegex, options: .regularExpression, range: nil, locale: nil)
31
+ let tdOneThirdLine = self.range(of: tdOneThirdRegex, options: .regularExpression, range: nil, locale: nil)
32
+
33
+ let tdThreeFirstLine = self.range(of: tdThreeFirstRegex, options: .regularExpression, range: nil, locale: nil)
34
+ let tdThreeSeconddLine = self.range(of: tdThreeSecondRegex, options: .regularExpression, range: nil, locale: nil)
35
+
36
+ if(tdOneFirstLine != nil){
37
+ if(self.count == 30){
38
+ captureFirst = self
39
+ }
40
+ }
41
+ if(tdOneSecondLine != nil){
42
+ if(self.count == 30){
43
+ captureSecond = self
44
+ }
45
+ }
46
+ if(tdOneThirdLine != nil){
47
+ if(self.count == 30){
48
+ captureThird = self
49
+ }
50
+ }
51
+
52
+ if(tdThreeFirstLine != nil){
53
+ if(self.count == 44){
54
+ captureFirst = self
55
+ }
56
+ }
57
+
58
+ if(tdThreeSeconddLine != nil){
59
+ if(self.count == 44){
60
+ captureSecond = self
61
+ }
62
+ }
63
+
64
+
65
+ if(captureFirst.count == 30 && captureSecond.count == 30 && captureThird.count == 30){
66
+ temp_mrz = (captureFirst.stripped + "\n" + captureSecond.stripped + "\n" + captureThird.stripped).replacingOccurrences(of: " ", with: "<")
67
+
68
+ let checkMrz = temp_mrz.range(of: tdOneMrzRegex, options: .regularExpression, range: nil, locale: nil)
69
+ if(checkMrz != nil){
70
+ mrz = temp_mrz
71
+ }
72
+ }
73
+
74
+ if(captureFirst.count == 44 && captureSecond.count == 44){
75
+ temp_mrz = (captureFirst.stripped + "\n" + captureSecond.stripped).replacingOccurrences(of: " ", with: "<")
76
+
77
+ let checkMrz = temp_mrz.range(of: tdThreeMrzRegex, options: .regularExpression, range: nil, locale: nil)
78
+ if(checkMrz != nil){
79
+ mrz = temp_mrz
80
+ }
81
+ }
82
+
83
+ if(mrz == ""){
84
+ return nil
85
+ }
86
+ return mrz
87
+ }
88
+
89
+ var stripped: String {
90
+ let okayChars = Set("ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890<")
91
+ return self.filter {okayChars.contains($0) }
92
+ }
93
+ }
94
+
95
+ class StringTracker {
96
+ var frameIndex: Int64 = 0
97
+
98
+ typealias StringObservation = (lastSeen: Int64, count: Int64)
99
+
100
+ // Dictionary of seen strings. Used to get stable recognition before
101
+ // displaying anything.
102
+ var seenStrings = [String: StringObservation]()
103
+ var bestCount = Int64(0)
104
+ var bestString = ""
105
+
106
+ func logFrame(strings: [String]) {
107
+ for string in strings {
108
+ if seenStrings[string] == nil {
109
+ seenStrings[string] = (lastSeen: Int64(0), count: Int64(-1))
110
+ }
111
+ seenStrings[string]?.lastSeen = frameIndex
112
+ seenStrings[string]?.count += 1
113
+ //print("Seen \(string) \(seenStrings[string]?.count ?? 0) times")
114
+ }
115
+
116
+ var obsoleteStrings = [String]()
117
+
118
+ // Go through strings and prune any that have not been seen in while.
119
+ // Also find the (non-pruned) string with the greatest count.
120
+ for (string, obs) in seenStrings {
121
+ // Remove previously seen text after 30 frames (~1s).
122
+ if obs.lastSeen < frameIndex - 30 {
123
+ obsoleteStrings.append(string)
124
+ }
125
+
126
+ // Find the string with the greatest count.
127
+ let count = obs.count
128
+ if !obsoleteStrings.contains(string) && count > bestCount {
129
+ bestCount = Int64(count)
130
+ bestString = string
131
+ }
132
+ }
133
+ // Remove old strings.
134
+ for string in obsoleteStrings {
135
+ seenStrings.removeValue(forKey: string)
136
+ }
137
+
138
+ frameIndex += 1
139
+ }
140
+
141
+ func getStableString() -> String? {
142
+ // Require the recognizer to see the same string at least 10 times.
143
+ if bestCount >= 10 {
144
+ return bestString
145
+ } else {
146
+ return nil
147
+ }
148
+ }
149
+
150
+ func reset(string: String) {
151
+ seenStrings.removeValue(forKey: string)
152
+ bestCount = 0
153
+ bestString = ""
154
+ captureFirst = ""
155
+ captureSecond = ""
156
+ captureThird = ""
157
+ mrz = ""
158
+ temp_mrz = ""
159
+ }
160
+ }