@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.
- package/LICENSE +20 -0
- package/NFCSDK.podspec +40 -0
- package/android/build.gradle +85 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +31 -0
- package/android/src/main/AndroidManifestNew.xml +30 -0
- package/android/src/main/java/com/nfcsdk/ChipReader.kt +237 -0
- package/android/src/main/java/com/nfcsdk/NFCSDKModule.kt +78 -0
- package/android/src/main/java/com/nfcsdk/NFCSDKPackage.kt +17 -0
- package/android/src/main/java/com/nfcsdk/NFCScanActivity.kt +299 -0
- package/android/src/main/java/com/nfcsdk/utils/Dg13Parser.kt +278 -0
- package/android/src/main/java/com/nfcsdk/utils/FaceExtractor.kt +40 -0
- package/android/src/main/java/com/nfcsdk/utils/MrzUtils.kt +75 -0
- package/android/src/main/res/drawable/bg_nfc_bottom_sheet.xml +13 -0
- package/android/src/main/res/drawable/bg_nfc_sheet_handle.xml +9 -0
- package/android/src/main/res/layout/activity_nfc.xml +110 -0
- package/android/src/main/res/values/styles.xml +10 -0
- package/android/src/main/res/xml/nfc_tech_filter.xml +8 -0
- package/ios/ChipReader.swift +258 -0
- package/ios/NFCSDK-Bridging-Header.h +2 -0
- package/ios/NFCSDK.mm +9 -0
- package/ios/NFCSDK.swift +112 -0
- package/ios/NFCSDKSession.swift +5 -0
- package/ios/utils/DG13Parser.swift +302 -0
- package/ios/utils/MrzUtils.swift +49 -0
- package/lib/module/errors.js +9 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/index.js +118 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/errors.d.ts +4 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +80 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +45 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +155 -0
- package/src/errors.ts +6 -0
- package/src/index.tsx +141 -0
- package/src/types.ts +45 -0
- package/vendor/ios-passport-reader/CHANGELOG +362 -0
- package/vendor/ios-passport-reader/CODE_OF_CONDUCT.md +77 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/AppDelegate.swift +39 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Info.plist +77 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/PassportUtils.swift +76 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/SettingsStore.swift +107 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/SceneDelegate.swift +57 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/DetailsView.swift +197 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MainView.swift +214 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportView.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/SettingsView.swift +63 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/StoredPassportView.swift +152 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/masterList.pem +32 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/readme.md +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/project.pbxproj +695 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/contents.xcworkspacedata +10 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/DataGroupParsingTests.swift +189 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/Info.plist +22 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/PACETests.swift +112 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile +22 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile.lock +35 -0
- package/vendor/ios-passport-reader/Examples/Example_CocoaPods/README.md +2 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/AppDelegate.swift +39 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Info.plist +79 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/PassportUtils.swift +99 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStore.swift +98 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStoreCAN.swift +75 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/LICENSE +21 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/PreviewView.swift +34 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/StringUtils.swift +160 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/ViewController.swift +320 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/VisionViewController.swift +163 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/SceneDelegate.swift +58 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/CanKeyView.swift +251 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/MRZEntryViewCanKey.swift +65 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/PassportViewCAN.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/DetailsView.swift +193 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MainView.swift +264 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportView.swift +73 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/SettingsView.swift +47 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/StoredPassportView.swift +149 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/masterList.pem +32 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/readme.md +10 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.pbxproj +683 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +25 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/DataGroupParsingTests.swift +190 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/Info.plist +22 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
- package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/PACETests.swift +112 -0
- package/vendor/ios-passport-reader/LICENSE +21 -0
- package/vendor/ios-passport-reader/NFCPassportReader.podspec +27 -0
- package/vendor/ios-passport-reader/Package.swift +29 -0
- package/vendor/ios-passport-reader/README.md +141 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/AES_3DES_DESEncryption.swift +377 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/BACHandler.swift +194 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/ChipAuthenticationHandler.swift +224 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupHash.swift +16 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupParser.swift +36 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ActiveAuthenticationInfo.swift +69 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/COM.swift +61 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/CardAccess.swift +38 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationInfo.swift +135 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationPublicKeyInfo.swift +53 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup.swift +103 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup1.swift +111 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup11.swift +66 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup12.swift +75 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup14.swift +37 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup15.swift +46 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup2.swift +163 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup7.swift +46 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroupId.swift +105 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/NotImplementedDG.swift +16 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/PACEInfo.swift +415 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SOD.swift +240 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SecurityInfo.swift +136 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Errors.swift +148 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Logging.swift +32 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Models/FaceImageInfo.swift +161 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCPassportModel.swift +540 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCViewDisplayMessage.swift +60 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/OpenSSLUtils.swift +705 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/PACEHandler.swift +627 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/PassportReader.swift +387 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Resources/PrivacyInfo.xcprivacy +14 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/ResponseAPDU.swift +25 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessaging.swift +301 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessagingSessionKeyGenerator.swift +156 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/SimpleASN1DumpParser.swift +173 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/TagReader.swift +374 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/Utils.swift +430 -0
- package/vendor/ios-passport-reader/Sources/NFCPassportReader/X509Wrapper.swift +168 -0
- package/vendor/ios-passport-reader/scripts/README.md +45 -0
- 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
|
package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/DetailsView.swift
ADDED
|
@@ -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
|
+
|