@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,387 @@
1
+ //
2
+ // PassportReader.swift
3
+ // NFCTest
4
+ //
5
+ // Created by Andy Qua on 11/06/2019.
6
+ // Copyright © 2019 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import OSLog
11
+
12
+ #if !os(macOS)
13
+ import UIKit
14
+ import CoreNFC
15
+
16
+ @available(iOS 15, *)
17
+ public class PassportReader : NSObject {
18
+ private typealias NFCCheckedContinuation = CheckedContinuation<NFCPassportModel, Error>
19
+ private var nfcContinuation: NFCCheckedContinuation?
20
+
21
+ private var passport : NFCPassportModel = NFCPassportModel()
22
+
23
+ private var readerSession: NFCTagReaderSession?
24
+ private var currentlyReadingDataGroup : DataGroupId?
25
+
26
+ private var dataGroupsToRead : [DataGroupId] = []
27
+ private var readAllDatagroups = false
28
+ private var skipSecureElements = true
29
+ private var skipCA = false
30
+ private var skipPACE = false
31
+ private var useExtendedMode = false
32
+
33
+ private var bacHandler : BACHandler?
34
+ private var caHandler : ChipAuthenticationHandler?
35
+ private var paceHandler : PACEHandler?
36
+ private var canKey : String = ""
37
+ private var dataAmountToReadOverride : Int? = nil
38
+
39
+ private var scanCompletedHandler: ((NFCPassportModel?, NFCPassportReaderError?)->())!
40
+ private var nfcViewDisplayMessageHandler: ((NFCViewDisplayMessage) -> String?)?
41
+ private var masterListURL : URL?
42
+ private var shouldNotReportNextReaderSessionInvalidationErrorUserCanceled : Bool = false
43
+
44
+ // By default, Passive Authentication uses the new RFS5652 method to verify the SOD, but can be switched to use
45
+ // the previous OpenSSL CMS verification if necessary
46
+ public var passiveAuthenticationUsesOpenSSL : Bool = false
47
+
48
+ public init( masterListURL: URL? = nil ) {
49
+ super.init()
50
+
51
+ self.masterListURL = masterListURL
52
+ }
53
+
54
+ public func setMasterListURL( _ masterListURL : URL ) {
55
+ self.masterListURL = masterListURL
56
+ }
57
+
58
+ // This function allows you to override the amount of data the TagReader tries to read from the NFC
59
+ // chip. NOTE - this really shouldn't be used for production but is useful for testing as different
60
+ // passports support different data amounts.
61
+ // It appears that the most reliable is 0xA0 (160 chars) but some will support arbitary reads (0xFF or 256)
62
+ public func overrideNFCDataAmountToRead( amount: Int ) {
63
+ dataAmountToReadOverride = amount
64
+ }
65
+
66
+ public func readPassport( canKey : String, tags : [DataGroupId] = [], skipSecureElements : Bool = true, skipCA : Bool = false, skipPACE : Bool = false, useExtendedMode : Bool = false, customDisplayMessage : ((NFCViewDisplayMessage) -> String?)? = nil) async throws -> NFCPassportModel {
67
+
68
+ self.passport = NFCPassportModel()
69
+ self.canKey = canKey
70
+ self.skipCA = skipCA
71
+ self.skipPACE = skipPACE
72
+ self.useExtendedMode = useExtendedMode
73
+
74
+ self.dataGroupsToRead.removeAll()
75
+ self.dataGroupsToRead.append( contentsOf:tags)
76
+ self.nfcViewDisplayMessageHandler = customDisplayMessage
77
+ self.skipSecureElements = skipSecureElements
78
+ self.currentlyReadingDataGroup = nil
79
+ self.bacHandler = nil
80
+ self.caHandler = nil
81
+ self.paceHandler = nil
82
+
83
+ // If no tags specified, read all
84
+ if self.dataGroupsToRead.count == 0 {
85
+ // Start off with .COM, will always read (and .SOD but we'll add that after), and then add the others from the COM
86
+ self.dataGroupsToRead.append(contentsOf:[.COM, .SOD] )
87
+ self.readAllDatagroups = true
88
+ } else {
89
+ // We are reading specific datagroups
90
+ self.readAllDatagroups = false
91
+ }
92
+
93
+ guard NFCNDEFReaderSession.readingAvailable else {
94
+ throw NFCPassportReaderError.NFCNotSupported
95
+ }
96
+
97
+ if NFCTagReaderSession.readingAvailable {
98
+ readerSession = NFCTagReaderSession(pollingOption: [.iso14443], delegate: self, queue: nil)
99
+
100
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.requestPresentPassport )
101
+ readerSession?.begin()
102
+ }
103
+
104
+ return try await withCheckedThrowingContinuation({ (continuation: NFCCheckedContinuation) in
105
+ self.nfcContinuation = continuation
106
+ })
107
+ }
108
+ }
109
+
110
+ @available(iOS 15, *)
111
+ extension PassportReader : NFCTagReaderSessionDelegate {
112
+ // MARK: - NFCTagReaderSessionDelegate
113
+ public func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
114
+ // If necessary, you may perform additional operations on session start.
115
+ // At this point RF polling is enabled.
116
+ Logger.passportReader.debug( "tagReaderSessionDidBecomeActive" )
117
+ }
118
+
119
+ public func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
120
+ // If necessary, you may handle the error. Note session is no longer valid.
121
+ // You must create a new session to restart RF polling.
122
+ Logger.passportReader.debug( "tagReaderSession:didInvalidateWithError - \(error.localizedDescription)" )
123
+ self.readerSession?.invalidate()
124
+ self.readerSession = nil
125
+
126
+ if let readerError = error as? NFCReaderError, readerError.code == NFCReaderError.readerSessionInvalidationErrorUserCanceled
127
+ && self.shouldNotReportNextReaderSessionInvalidationErrorUserCanceled {
128
+
129
+ self.shouldNotReportNextReaderSessionInvalidationErrorUserCanceled = false
130
+ } else {
131
+ var userError = NFCPassportReaderError.UnexpectedError
132
+ if let readerError = error as? NFCReaderError {
133
+ Logger.passportReader.error( "tagReaderSession:didInvalidateWithError - Got NFCReaderError - \(readerError.localizedDescription)" )
134
+ switch (readerError.code) {
135
+ case NFCReaderError.readerSessionInvalidationErrorUserCanceled:
136
+ Logger.passportReader.error( " - User cancelled session" )
137
+ userError = NFCPassportReaderError.UserCanceled
138
+ default:
139
+ Logger.passportReader.error( " - some other error - \(readerError.localizedDescription)" )
140
+ userError = NFCPassportReaderError.UnexpectedError
141
+ }
142
+ } else {
143
+ Logger.passportReader.error( "tagReaderSession:didInvalidateWithError - Received error - \(error.localizedDescription)" )
144
+ }
145
+ nfcContinuation?.resume(throwing: userError)
146
+ nfcContinuation = nil
147
+ }
148
+ }
149
+
150
+ public func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
151
+ Logger.passportReader.debug( "tagReaderSession:didDetect - found \(tags)" )
152
+ if tags.count > 1 {
153
+ Logger.passportReader.debug( "tagReaderSession:more than 1 tag detected! - \(tags)" )
154
+
155
+ let errorMessage = NFCViewDisplayMessage.error(.MoreThanOneTagFound)
156
+ self.invalidateSession(errorMessage: errorMessage, error: NFCPassportReaderError.MoreThanOneTagFound)
157
+ return
158
+ }
159
+
160
+ let tag = tags.first!
161
+ var passportTag: NFCISO7816Tag
162
+ switch tags.first! {
163
+ case let .iso7816(tag):
164
+ passportTag = tag
165
+ default:
166
+ Logger.passportReader.debug( "tagReaderSession:invalid tag detected!!!" )
167
+
168
+ let errorMessage = NFCViewDisplayMessage.error(NFCPassportReaderError.TagNotValid)
169
+ self.invalidateSession(errorMessage:errorMessage, error: NFCPassportReaderError.TagNotValid)
170
+ return
171
+ }
172
+
173
+ Task { [passportTag] in
174
+ do {
175
+ try await session.connect(to: tag)
176
+
177
+ Logger.passportReader.debug( "tagReaderSession:connected to tag - starting authentication" )
178
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.authenticatingWithPassport(0) )
179
+
180
+ let tagReader = TagReader(tag:passportTag)
181
+
182
+ if let newAmount = self.dataAmountToReadOverride {
183
+ tagReader.overrideDataAmountToRead(newAmount: newAmount)
184
+ }
185
+
186
+ tagReader.progress = { [unowned self] (progress) in
187
+ if let dgId = self.currentlyReadingDataGroup {
188
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.readingDataGroupProgress(dgId, progress) )
189
+ } else {
190
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.authenticatingWithPassport(progress) )
191
+ }
192
+ }
193
+
194
+ let passportModel = try await self.startReading( tagReader : tagReader)
195
+ nfcContinuation?.resume(returning: passportModel)
196
+ nfcContinuation = nil
197
+
198
+
199
+ } catch let error as NFCPassportReaderError {
200
+ let errorMessage = NFCViewDisplayMessage.error(error)
201
+ self.invalidateSession(errorMessage: errorMessage, error: error)
202
+ } catch let error {
203
+ Logger.passportReader.debug( "tagReaderSession:failed to connect to tag - \(error.localizedDescription)" )
204
+ let errorMessage = NFCViewDisplayMessage.error(NFCPassportReaderError.ConnectionError)
205
+ self.invalidateSession(errorMessage: errorMessage, error: NFCPassportReaderError.Unknown(error))
206
+ }
207
+ }
208
+ }
209
+
210
+ func updateReaderSessionMessage(alertMessage: NFCViewDisplayMessage ) {
211
+ self.readerSession?.alertMessage = self.nfcViewDisplayMessageHandler?(alertMessage) ?? alertMessage.description
212
+ }
213
+ }
214
+
215
+ @available(iOS 15, *)
216
+ extension PassportReader {
217
+
218
+ func startReading(tagReader : TagReader) async throws -> NFCPassportModel {
219
+
220
+ if !skipPACE {
221
+ do {
222
+ // let data = try await tagReader.readCardAccess()
223
+
224
+ let data = hexRepToBin("3134300d060804007f0007020202020101300f060a04007f000702020302020201013012060a04007f0007020204020202010202010d")
225
+
226
+ // Logger.passportReader.debug( "Read CardAccess - data \(binToHexRep(data))" )
227
+ let cardAccess = try CardAccess(data)
228
+ passport.cardAccess = cardAccess
229
+
230
+ Logger.passportReader.info( "Starting Password Authenticated Connection Establishment (PACE)" )
231
+
232
+ let paceHandler = try PACEHandler( cardAccess: cardAccess, tagReader: tagReader )
233
+ try await paceHandler.doPACE(canKey: canKey )
234
+ passport.PACEStatus = .success
235
+ Logger.passportReader.debug( "PACE Succeeded" )
236
+ } catch let error {
237
+ passport.PACEStatus = .failed
238
+ Logger.passportReader.error("Có lỗi xảy ra: \(error)")
239
+ Logger.passportReader.error( "PACE Failed - falling back to BAC" )
240
+ }
241
+
242
+ _ = try await tagReader.selectPassportApplication()
243
+ }
244
+
245
+ // Now to read the datagroups
246
+ try await readDataGroups(tagReader: tagReader)
247
+
248
+ try await doActiveAuthenticationIfNeccessary(tagReader : tagReader)
249
+
250
+ self.updateReaderSessionMessage(alertMessage: NFCViewDisplayMessage.successfulRead)
251
+ self.shouldNotReportNextReaderSessionInvalidationErrorUserCanceled = true
252
+ self.readerSession?.invalidate()
253
+
254
+ // If we have a masterlist url set then use that and verify the passport now
255
+ self.passport.verifyPassport(masterListURL: self.masterListURL, useCMSVerification: self.passiveAuthenticationUsesOpenSSL)
256
+
257
+ return self.passport
258
+ }
259
+
260
+
261
+ func doActiveAuthenticationIfNeccessary( tagReader : TagReader) async throws {
262
+ guard self.passport.activeAuthenticationSupported else {
263
+ return
264
+ }
265
+ self.updateReaderSessionMessage(alertMessage: NFCViewDisplayMessage.activeAuthentication)
266
+
267
+ Logger.passportReader.info( "Performing Active Authentication" )
268
+
269
+ let challenge = generateRandomUInt8Array(8)
270
+ Logger.passportReader.debug( "Generated Active Authentication challange - \(binToHexRep(challenge))")
271
+ let response = try await tagReader.doInternalAuthentication(challenge: challenge, useExtendedMode: useExtendedMode)
272
+ self.passport.verifyActiveAuthentication( challenge:challenge, signature:response.data )
273
+ }
274
+
275
+ func readDataGroups( tagReader: TagReader ) async throws {
276
+
277
+ // Read COM
278
+ var DGsToRead = [DataGroupId]()
279
+
280
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.readingDataGroupProgress(.COM, 0) )
281
+ if let com = try await readDataGroup(tagReader:tagReader, dgId:.COM) as? COM {
282
+ self.passport.addDataGroup( .COM, dataGroup:com )
283
+
284
+ // SOD and COM shouldn't be present in the DG list but just in case (worst case here we read the sod twice)
285
+ DGsToRead = [.SOD] + com.dataGroupsPresent.map { DataGroupId.getIDFromName(name:$0) }
286
+ DGsToRead.removeAll { $0 == .COM }
287
+ }
288
+
289
+ if DGsToRead.contains( .DG14 ) {
290
+ DGsToRead.removeAll { $0 == .DG14 }
291
+
292
+ if !skipCA {
293
+ // Do Chip Authentication
294
+ if let dg14 = try await readDataGroup(tagReader:tagReader, dgId:.DG14) as? DataGroup14 {
295
+ self.passport.addDataGroup( .DG14, dataGroup:dg14 )
296
+ let caHandler = ChipAuthenticationHandler(dg14: dg14, tagReader: tagReader)
297
+
298
+ if caHandler.isChipAuthenticationSupported {
299
+ do {
300
+ // Do Chip authentication and then continue reading datagroups
301
+ try await caHandler.doChipAuthentication()
302
+ self.passport.chipAuthenticationStatus = .success
303
+ } catch {
304
+ Logger.passportReader.info( "Chip Authentication failed - re-establishing BAC")
305
+ self.passport.chipAuthenticationStatus = .failed
306
+ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+
312
+ // If we are skipping secure elements then remove .DG3 and .DG4
313
+ if self.skipSecureElements {
314
+ DGsToRead = DGsToRead.filter { $0 != .DG3 && $0 != .DG4 }
315
+ }
316
+
317
+ if self.readAllDatagroups != true {
318
+ DGsToRead = DGsToRead.filter { dataGroupsToRead.contains($0) }
319
+ }
320
+ for dgId in DGsToRead {
321
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.readingDataGroupProgress(dgId, 0) )
322
+ if let dg = try await readDataGroup(tagReader:tagReader, dgId:dgId) {
323
+ self.passport.addDataGroup( dgId, dataGroup:dg )
324
+ }
325
+ }
326
+ }
327
+
328
+ func readDataGroup( tagReader : TagReader, dgId : DataGroupId ) async throws -> DataGroup? {
329
+
330
+ self.currentlyReadingDataGroup = dgId
331
+ Logger.passportReader.info( "Reading tag - \(dgId.getName())" )
332
+ var readAttempts = 0
333
+ var nfcPassportReaderError: NFCPassportReaderError
334
+
335
+ self.updateReaderSessionMessage( alertMessage: NFCViewDisplayMessage.readingDataGroupProgress(dgId, 0) )
336
+
337
+ repeat {
338
+ do {
339
+ let response = try await tagReader.readDataGroup(dataGroup:dgId)
340
+ let dg = try DataGroupParser().parseDG(data: response)
341
+ return dg
342
+ } catch let error as NFCPassportReaderError {
343
+ Logger.passportReader.error( "TagError reading tag - \(error)" )
344
+ nfcPassportReaderError = error
345
+
346
+ // OK we had an error - depending on what happened, we may want to try to re-read this
347
+ // E.g. we failed to read the last Datagroup because its protected and we can't
348
+ let errMsg = error.value
349
+ Logger.passportReader.error( "ERROR - \(errMsg)" )
350
+ if errMsg == "Session invalidated" || errMsg == "Class not supported" || errMsg == "Tag connection lost" || errMsg == "Tag response error / no response" {
351
+ // Check if we have done Chip Authentication, if so, set it to nil and try to redo BAC
352
+ if self.caHandler != nil {
353
+ self.caHandler = nil
354
+ } else {
355
+ // Can't go any more!
356
+ throw error
357
+ }
358
+ } else if errMsg == "Security status not satisfied" || errMsg == "File not found" {
359
+ // Can't read this element as we aren't allowed - remove it and return out so we re-do BAC
360
+ self.dataGroupsToRead.removeFirst()
361
+
362
+ } else if errMsg == "SM data objects incorrect" || errMsg == "Class not supported" {
363
+ // Can't read this element security objects now invalid - and return out so we re-do BAC
364
+ } else if errMsg.hasPrefix( "Wrong length" ) || errMsg.hasPrefix( "End of file" ) { // Should now handle errors 0x6C xx, and 0x67 0x00
365
+ // OK passport can't handle max length so drop it down
366
+ tagReader.reduceDataReadingAmount()
367
+ }
368
+
369
+ }
370
+ readAttempts += 1
371
+ } while ( readAttempts < 2 )
372
+
373
+ // The error will be thrown after n attempts
374
+ throw nfcPassportReaderError
375
+ }
376
+
377
+ func invalidateSession(errorMessage: NFCViewDisplayMessage, error: NFCPassportReaderError) {
378
+ // Mark the next 'invalid session' error as not reportable (we're about to cause it by invalidating the
379
+ // session). The real error is reported back with the call to the completed handler
380
+ self.shouldNotReportNextReaderSessionInvalidationErrorUserCanceled = true
381
+ self.readerSession?.invalidate(errorMessage: self.nfcViewDisplayMessageHandler?(errorMessage) ?? errorMessage.description)
382
+ nfcContinuation?.resume(throwing: error)
383
+ nfcContinuation = nil
384
+ }
385
+
386
+ }
387
+ #endif
@@ -0,0 +1,14 @@
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>NSPrivacyCollectedDataTypes</key>
6
+ <array/>
7
+ <key>NSPrivacyAccessedAPITypes</key>
8
+ <array/>
9
+ <key>NSPrivacyTrackingDomains</key>
10
+ <array/>
11
+ <key>NSPrivacyTracking</key>
12
+ <false/>
13
+ </dict>
14
+ </plist>
@@ -0,0 +1,25 @@
1
+ //
2
+ // ResponseAPDU.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 09/02/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ #if !os(macOS)
10
+
11
+ @available(iOS 13, *)
12
+ public struct ResponseAPDU {
13
+
14
+ public var data : [UInt8]
15
+ public var sw1 : UInt8
16
+ public var sw2 : UInt8
17
+
18
+ public init(data: [UInt8], sw1: UInt8, sw2: UInt8) {
19
+ self.data = data
20
+ self.sw1 = sw1
21
+ self.sw2 = sw2
22
+ }
23
+ }
24
+
25
+ #endif