@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,251 @@
1
+ //
2
+ // CanKeyView.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 OSLog
11
+ import Combine
12
+ import NFCPassportReader
13
+ import UniformTypeIdentifiers
14
+ import MRZParser
15
+
16
+ //let appLogging = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "app")
17
+
18
+ struct CanKeyView : View {
19
+ @EnvironmentObject var settings: SettingsStoreCAN
20
+ @Environment(\.colorScheme) var colorScheme
21
+
22
+ @State private var showingAlert = false
23
+ @State private var showingSheet = false
24
+ @State private var showDetails = false
25
+ @State private var alertTitle : String = ""
26
+ @State private var alertMessage : String = ""
27
+ @State private var showSettings : Bool = false
28
+ @State private var showScanMRZ : Bool = false
29
+ @State private var showSavedPassports : Bool = false
30
+ @State private var gettingLogs : Bool = false
31
+
32
+ @State var page = 0
33
+
34
+ @State var bgColor = Color( UIColor.systemBackground )
35
+
36
+ private let passportReader = PassportReader()
37
+
38
+ var body: some View {
39
+ NavigationView {
40
+ ZStack {
41
+ NavigationLink( destination: SettingsView(), isActive: $showSettings) { Text("") }
42
+ NavigationLink( destination: PassportViewCAN(), isActive: $showDetails) { Text("") }
43
+ NavigationLink( destination: StoredPassportView(), isActive: $showSavedPassports) { Text("") }
44
+ NavigationLink( destination: MRZScanner(completionHandler: { mrz in
45
+
46
+ if let (docNr) = parse( mrz:mrz ) {
47
+ settings.passportNumber = docNr
48
+ }
49
+ showScanMRZ = false
50
+ }).navigationTitle("Scan MRZ"), isActive: $showScanMRZ){ Text("") }
51
+
52
+ VStack {
53
+ HStack {
54
+ Spacer()
55
+ Button(action: {self.showScanMRZ.toggle()}) {
56
+ Label("Scan MRZ", systemImage:"camera")
57
+ }.padding([.top, .trailing])
58
+ }
59
+ MRZEntryViewCanKey()
60
+
61
+ Button(action: {
62
+ self.scanPassport()
63
+ }) {
64
+ Text("Scan Passport")
65
+ .font(.largeTitle)
66
+ .foregroundColor(isValid ? .secondary : Color.secondary.opacity(0.25))
67
+ }
68
+ .disabled( !isValid )
69
+
70
+ Spacer()
71
+ HStack(alignment:.firstTextBaseline) {
72
+ Text( "Version - \(UIApplication.version)" )
73
+ .font(.footnote)
74
+ .padding(.leading)
75
+ Spacer()
76
+ Button(action: {
77
+ shareLogs()
78
+ }) {
79
+ Text("Share logs")
80
+ .foregroundColor(.secondary)
81
+ }.padding(.trailing)
82
+ .disabled( !isValid )
83
+ }
84
+ }
85
+
86
+ if gettingLogs {
87
+ VStack {
88
+ VStack(alignment:.center) {
89
+ Text( "Retrieving logs....." )
90
+ .font(.title)
91
+ .frame(maxWidth:.infinity, maxHeight:150)
92
+ }
93
+ .shadow(radius: 10)
94
+ .background(.white)
95
+ .cornerRadius(20) /// make the background rounded
96
+ .overlay( /// apply a rounded border
97
+ RoundedRectangle(cornerRadius: 20)
98
+ .stroke(.gray, lineWidth: 2)
99
+ )
100
+ .padding()
101
+ Spacer()
102
+ }
103
+ }
104
+ }
105
+ .navigationBarTitle("Passport details", displayMode: .automatic)
106
+ .toolbar {
107
+ ToolbarItem(placement: .primaryAction) {
108
+ Menu {
109
+ Button(action: {showSettings.toggle()}) {
110
+ Label("Settings", systemImage: "gear")
111
+ }
112
+ Button(action: {self.showSavedPassports.toggle()}) {
113
+ Label("Show saved passports", systemImage: "doc")
114
+ }
115
+ } label: {
116
+ Image(systemName: "gear")
117
+ .foregroundColor(Color.secondary)
118
+ }
119
+ }
120
+ }
121
+ .alert(isPresented: $showingAlert) {
122
+ Alert(title: Text(alertTitle), message:
123
+ Text(alertMessage), dismissButton: .default(Text("Got it!")))
124
+ }
125
+ .background(colorScheme == .dark ? Color.black : Color.white)
126
+ }
127
+ }
128
+ }
129
+
130
+ // MARK: View functions - functions that affect the view
131
+ extension CanKeyView {
132
+
133
+ var isValid : Bool {
134
+ return settings.passportNumber.count >= 6
135
+ }
136
+
137
+ func parse( mrz:String ) -> String? {
138
+
139
+ let parser = MRZParser(isOCRCorrectionEnabled: true)
140
+
141
+ if let result = parser.parse(mrzString: mrz) {
142
+ let docNr = result.documentNumber ?? ""
143
+
144
+ // Lấy từ ký tự thứ 3 (index = 3)
145
+ let startIndex = docNr.index(docNr.startIndex, offsetBy: 3)
146
+ let canKey = String(docNr[startIndex...])
147
+
148
+ return canKey
149
+ }
150
+
151
+
152
+ return nil
153
+ }
154
+ }
155
+
156
+ // MARK: Action Functions
157
+ extension CanKeyView {
158
+
159
+ func shareLogs() {
160
+ gettingLogs = true
161
+ Task {
162
+ hideKeyboard()
163
+ PassportUtils.shareLogs()
164
+ gettingLogs = false
165
+ }
166
+ }
167
+
168
+ func scanPassport( ) {
169
+ lastPassportScanTime = Date.now
170
+
171
+ hideKeyboard()
172
+ self.showDetails = false
173
+
174
+ let df = DateFormatter()
175
+ df.timeZone = TimeZone(secondsFromGMT: 0)
176
+ df.dateFormat = "YYMMdd"
177
+
178
+ // Set the masterListURL on the Passport Reader to allow auto passport verification
179
+ let masterListURL = Bundle.main.url(forResource: "masterList", withExtension: ".pem")!
180
+ passportReader.setMasterListURL( masterListURL )
181
+
182
+ // Set whether to use the new Passive Authentication verification method (default true) or the old OpenSSL CMS verifiction
183
+ passportReader.passiveAuthenticationUsesOpenSSL = !settings.useNewVerificationMethod
184
+
185
+ appLogging.error( "Using version \(UIApplication.version)" )
186
+
187
+ Task {
188
+ let customMessageHandler : (NFCViewDisplayMessage)->String? = { (displayMessage) in
189
+ switch displayMessage {
190
+ case .requestPresentPassport:
191
+ return "Hold your iPhone near an NFC enabled passport."
192
+ default:
193
+ // Return nil for all other messages so we use the provided default
194
+ return nil
195
+ }
196
+ }
197
+
198
+ do {
199
+
200
+ let passport = try await passportReader.readPassport( canKey: settings.passportNumber, skipCA: true, useExtendedMode: false, customDisplayMessage:customMessageHandler)
201
+
202
+ if let _ = passport.faceImageInfo {
203
+ print( "Got face Image details")
204
+ }
205
+
206
+ if settings.savePassportOnScan {
207
+ // Save passport
208
+ let dict = passport.dumpPassportData(selectedDataGroups: DataGroupId.allCases, includeActiveAuthenticationData: true)
209
+ if let data = try? JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted) {
210
+
211
+ let savedPath = FileManager.cachesFolder.appendingPathComponent("\(passport.documentNumber).json")
212
+
213
+ try? data.write(to: savedPath, options: .completeFileProtection)
214
+ }
215
+ }
216
+
217
+ DispatchQueue.main.async {
218
+ self.settings.passport = passport
219
+ self.showDetails = true
220
+ }
221
+ } catch {
222
+ self.alertTitle = "Oops"
223
+ self.alertTitle = error.localizedDescription
224
+ self.showingAlert = true
225
+
226
+ }
227
+ }
228
+ }
229
+ }
230
+
231
+ //MARK: PreviewProvider
232
+ #if DEBUG
233
+ struct ContentViewCanKey_Previews : PreviewProvider {
234
+
235
+ static var previews: some View {
236
+ let settings = SettingsStore()
237
+
238
+ return Group {
239
+ CanKeyView()
240
+ .environmentObject(settings)
241
+ .environment( \.colorScheme, .light)
242
+ CanKeyView()
243
+ .environmentObject(settings)
244
+ .environment( \.colorScheme, .dark)
245
+ }
246
+ }
247
+ }
248
+ #endif
249
+
250
+
251
+
@@ -0,0 +1,65 @@
1
+ //
2
+ // MRZEntryViewCanKey.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
+
11
+
12
+ // This should be a nice simple inline DatePicker here
13
+ // BUT there are bugs when you select dates it changes the date format
14
+ // from DD MMM YYYY to DD/MM/YYYY!)
15
+ // Will update when/if this gets fixed!
16
+ struct MRZEntryViewCanKey : View {
17
+ @EnvironmentObject var settings: SettingsStoreCAN
18
+
19
+ // These will be removed once DatePicker inline works correctly
20
+ @State private var editDOB = false
21
+ @State private var editDOE = false
22
+ @State private var editDateTitle : String = ""
23
+
24
+ var body : some View {
25
+ let passportNrBinding = Binding<String>(get: {
26
+ settings.passportNumber
27
+ }, set: {
28
+ settings.passportNumber = $0.uppercased()
29
+ })
30
+ VStack {
31
+
32
+ TextField("Can passport number", text: passportNrBinding)
33
+ .textCase(.uppercase)
34
+ .modifier(ClearButton(text: passportNrBinding))
35
+ .textContentType(.name)
36
+ .foregroundColor(Color.primary)
37
+ .padding([.leading, .trailing])
38
+ .ignoresSafeArea(.keyboard, edges: .all)
39
+
40
+ Divider()
41
+
42
+ }
43
+ .ignoresSafeArea(.keyboard, edges: .bottom)
44
+ }
45
+ }
46
+
47
+
48
+ #if DEBUG
49
+ struct MRZEntryViewCanKey_Previews : PreviewProvider {
50
+
51
+ static var previews: some View {
52
+ let settings = SettingsStore()
53
+
54
+ return
55
+ Group {
56
+ NavigationView {
57
+ MRZEntryViewCanKey()
58
+ }
59
+ .environmentObject(settings)
60
+ .environment( \.colorScheme, .light)
61
+ }
62
+ }
63
+ }
64
+ #endif
65
+
@@ -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 PassportViewCAN : View {
14
+ @EnvironmentObject var settings: SettingsStoreCAN
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 PassportViewCAN {
42
+ func shareLogs() {
43
+ hideKeyboard()
44
+ PassportUtils.shareLogs()
45
+ }
46
+ }
47
+
48
+ #if DEBUG
49
+ struct PassportViewCAN_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,193 @@
1
+ //
2
+ // DetailsView.swift
3
+ // NFCPassportReaderApp
4
+ //
5
+ // Created by Andy Qua on 30/10/2019.
6
+ // Copyright © 2019 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ import SwiftUI
10
+ import NFCPassportReader
11
+
12
+ struct Item : Identifiable {
13
+ var id = UUID()
14
+ var title : String
15
+ var value : String
16
+
17
+ var textColor : Color {
18
+ return value.hasPrefix("FAILED") ? Color.red : Color.primary
19
+ }
20
+ }
21
+
22
+
23
+ struct DetailsView : View {
24
+ private var passport: NFCPassportModel
25
+ private var sectionNames = ["Chip information", "Verification information", "Document signing certificate", "Country signing certificate", "Security Info details", "Datagroup Hashes"]
26
+ private var sections = [[Item]]()
27
+
28
+ init( passport : NFCPassportModel ) {
29
+ self.passport = passport
30
+ sections.append(getChipInfoSection(self.passport))
31
+ sections.append(getVerificationDetailsSection(self.passport))
32
+ sections.append(getCertificateSigningCertDetails(certItems:self.passport.documentSigningCertificate?.getItemsAsDict()))
33
+ sections.append(getCertificateSigningCertDetails(certItems:self.passport.countrySigningCertificate?.getItemsAsDict()))
34
+ sections.append(getSecurityInfosSection(self.passport))
35
+ sections.append(getDataGroupHashesSection(self.passport))
36
+ }
37
+
38
+ var body: some View {
39
+ VStack {
40
+ List {
41
+ ForEach( 0 ..< self.sectionNames.count, id: \.self) { i in
42
+ if self.sections[i].count > 0 {
43
+ SectionGroup(sectionTitle: self.sectionNames[i], items: self.sections[i])
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ func getChipInfoSection(_ passport: NFCPassportModel) -> [Item] {
51
+ // Build Chip info section
52
+ let chipInfo = [Item(title:"LDS Version", value: passport.LDSVersion),
53
+ Item(title:"Data groups present", value: passport.dataGroupsPresent.joined(separator: ", ")),
54
+ Item(title:"Data groups read", value: passport.dataGroupsAvailable.map { $0.getName()}.joined(separator: ", "))]
55
+
56
+ return chipInfo
57
+ }
58
+
59
+ func getVerificationDetailsSection(_ passport: NFCPassportModel) -> [Item] {
60
+ // Build Verification Info section
61
+ var activeAuth : String = "Not supported"
62
+ if passport.activeAuthenticationSupported {
63
+ activeAuth = passport.activeAuthenticationPassed ? "SUCCESS\nSignature verified" : "FAILED\nCould not verify signature"
64
+ }
65
+ var chipAuth : String = "Not supported"
66
+ if passport.isChipAuthenticationSupported {
67
+ switch( passport.chipAuthenticationStatus ) {
68
+ case .notDone:
69
+ chipAuth = "Supported"
70
+ case .success:
71
+ chipAuth = "SUCCESS\nSignature verified"
72
+ case .failed:
73
+ chipAuth = "FAILED\nCould not verify signature"
74
+ }
75
+ }
76
+
77
+ var authType : String = "Authentication not done"
78
+ if passport.PACEStatus == .success {
79
+ authType = "PACE"
80
+ } else if passport.BACStatus == .success {
81
+ authType = "BAC"
82
+ }
83
+
84
+ // Do PACE Info
85
+ var paceStatus = "Not Supported"
86
+ if passport.isPACESupported {
87
+ switch( passport.PACEStatus ) {
88
+ case .notDone:
89
+ paceStatus = "Supported"
90
+ case .success:
91
+ paceStatus = "SUCCESS"
92
+ case .failed:
93
+ paceStatus = "FAILED"
94
+ }
95
+ }
96
+
97
+ let verificationDetails : [Item] = [
98
+ Item(title: "Access Control", value: authType),
99
+ Item(title: "PACE", value: paceStatus),
100
+ Item(title: "Chip Authentication", value: chipAuth),
101
+ Item(title: "Active Authentication", value: activeAuth),
102
+ Item(title: "Document Signing Certificate", value: passport.documentSigningCertificateVerified ? "SUCCESS\nSOD Signature verified" : "FAILED\nCouldn't verify SOD signature"),
103
+ Item(title: "Country signing Certificate", value: passport.passportCorrectlySigned ? "SUCCESS\nmatched to country signing certificate" : "FAILED\nCouldn't build trust chain"),
104
+ Item(title: "Data group hashes", value: passport.passportDataNotTampered ? "SUCCESS\nAll hashes match" : "FAILED\nCouldn't match hashes" )
105
+ ]
106
+
107
+ return verificationDetails
108
+ }
109
+
110
+ func getCertificateSigningCertDetails( certItems : [CertificateItem : String]? ) -> [Item] {
111
+ let titles : [String] = ["Serial number", "Signature algorithm", "Public key algorithm", "Certificate fingerprint", "Issuer", "Subject", "Valid from", "Valid to"]
112
+
113
+ var items = [Item]()
114
+ if certItems?.count ?? 0 == 0 {
115
+ items.append( Item(title:"Certificate details", value: "NOT FOUND" ) )
116
+ } else {
117
+ for title in titles {
118
+ let ci = CertificateItem(rawValue:title)!
119
+ items.append( Item(title:title, value: certItems?[ci] ?? "") )
120
+ }
121
+ }
122
+ return items
123
+ }
124
+
125
+ func getDataGroupHashesSection(_ passport: NFCPassportModel) -> [Item] {
126
+ var dgHashes = [Item]()
127
+ for id in DataGroupId.allCases {
128
+ if let hash = passport.dataGroupHashes[id] {
129
+ dgHashes.append( Item(title:hash.id, value:hash.match ? "MATCHED" : "UNMATCHED"))
130
+ dgHashes.append( Item(title:"SOD Hash", value: hash.sodHash))
131
+ dgHashes.append( Item(title:"Computed Hash", value: hash.computedHash))
132
+ }
133
+ }
134
+ return dgHashes
135
+ }
136
+
137
+ func getSecurityInfosSection( _ passport : NFCPassportModel) -> [Item] {
138
+ guard let dg14 = passport.getDataGroup(.DG14) as? DataGroup14 else { return [] }
139
+
140
+ var items = [Item]()
141
+ for secInfo in dg14.securityInfos {
142
+ var title : String = ""
143
+ var value : String = ""
144
+ if let cai = secInfo as? ChipAuthenticationInfo {
145
+ title = "ChipAuthenticationInfo"
146
+ value = "\(secInfo.getProtocolOIDString())\n\(secInfo.getObjectIdentifier())\nUses Key Id: \(cai.getKeyId())"
147
+ } else if let capki = secInfo as? ChipAuthenticationPublicKeyInfo {
148
+ title = "ChipAuthenticationPublicKeyInfo"
149
+ value = "\(secInfo.getProtocolOIDString())\n\(secInfo.getObjectIdentifier())\nKey Id: \(capki.getKeyId())"
150
+ } else if let pacei = secInfo as? PACEInfo {
151
+ title = "PACEInfo"
152
+ value = "\(pacei.getProtocolOIDString())\n\(pacei.getObjectIdentifier())\nParameter ID: \(pacei.getParameterId() ?? -1)"
153
+ }
154
+
155
+ items.append( Item(title:title, value: value))
156
+
157
+ }
158
+ return items
159
+ }
160
+ }
161
+
162
+ struct SectionGroup : View {
163
+ var sectionTitle : String
164
+ var items : [Item]
165
+
166
+ var body: some View {
167
+ Section(header: Text(sectionTitle)) {
168
+ ForEach(self.items) { item in
169
+ VStack(alignment:.leading, spacing:0) {
170
+ Text(item.title)
171
+ .font(.headline)
172
+ Text(item.value)
173
+ .foregroundColor(item.textColor)
174
+ .lineLimit(nil)
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+
182
+ struct DetailsView_Previews: PreviewProvider {
183
+
184
+ static var previews: some View {
185
+ let settings = SettingsStore()
186
+ let passport = NFCPassportModel()
187
+ return DetailsView(passport:passport)
188
+ .environmentObject(settings)
189
+ .environment( \.colorScheme, .light)
190
+ }
191
+ }
192
+
193
+