@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,112 @@
|
|
|
1
|
+
//
|
|
2
|
+
// PACETests.swift
|
|
3
|
+
// NFCPassportReaderAppTests
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 09/03/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import OpenSSL
|
|
11
|
+
import NFCPassportReader
|
|
12
|
+
|
|
13
|
+
// Currently not actual tests - maybe at some point but currently just a holding place for some testing stuff I didn't want to get rid of!
|
|
14
|
+
// Hopefully will re-organise into proper tests!
|
|
15
|
+
class PACETests {
|
|
16
|
+
func testDHKeyMapping() -> OpaquePointer {
|
|
17
|
+
var resp : [UInt8] = [0x7c, 0x82, 0x01, 0x04, 0x82, 0x82, 0x01, 0x00, 0x70, 0x5a, 0xce, 0x59, 0x1c, 0x0b, 0xe1, 0xa1, 0x19, 0x5b, 0x14, 0x1c, 0x97, 0x38, 0x51, 0xde, 0x07, 0xf1, 0x66, 0xa6, 0x74, 0x7d, 0x18, 0x9f, 0x5e, 0x3b, 0x51, 0x0d, 0xbf, 0xff, 0xe2, 0x16, 0xca, 0x96, 0x0e, 0x63, 0x8d, 0x16, 0x49, 0x5f, 0x53, 0x15, 0x60, 0x9b, 0xd6, 0x6e, 0x41, 0x52, 0x69, 0x08, 0x6a, 0x37, 0x6f, 0xf4, 0xd6, 0x14, 0xcc, 0x9b, 0x9d, 0x57, 0x0e, 0x64, 0x53, 0x49, 0xa3, 0xe6, 0xd6, 0xdb, 0x80, 0xfb, 0x08, 0x39, 0xb7, 0x66, 0xdc, 0xcc, 0xb1, 0xda, 0xe0, 0xe5, 0x21, 0xaf, 0xca, 0x9b, 0xdc, 0xe2, 0xc2, 0xd9, 0xb2, 0x58, 0xd8, 0x22, 0x94, 0x23, 0x76, 0x0f, 0x40, 0x74, 0xea, 0x73, 0xf1, 0xa4, 0x4d, 0xdd, 0xfc, 0x72, 0x27, 0xda, 0x8b, 0xce, 0x03, 0x75, 0x98, 0xfe, 0x38, 0x81, 0x1d, 0x45, 0xc9, 0xd6, 0x8b, 0x81, 0x8d, 0xef, 0xdc, 0xda, 0x5f, 0xc8, 0x1a, 0x12, 0x51, 0x0d, 0xfa, 0x02, 0x67, 0xf9, 0x89, 0x5e, 0x6d, 0xb8, 0x55, 0x43, 0xb0, 0x71, 0x47, 0x0d, 0xf0, 0x27, 0xda, 0x62, 0x3b, 0xd4, 0xa9, 0x4d, 0x5e, 0xde, 0xba, 0x81, 0x7b, 0xde, 0x79, 0x5f, 0x57, 0xbf, 0x0b, 0x35, 0xf4, 0x29, 0x6f, 0x5a, 0xd4, 0xe8, 0xd9, 0xfd, 0x2c, 0x87, 0x2e, 0x84, 0x26, 0x10, 0x9d, 0x1b, 0x50, 0xe4, 0x1d, 0xb3, 0x91, 0x02, 0xac, 0xa4, 0x58, 0x52, 0x61, 0x77, 0x1f, 0x97, 0x02, 0xd6, 0x48, 0x90, 0x1f, 0x69, 0xb6, 0xa0, 0x53, 0x53, 0xf9, 0xcb, 0x57, 0x01, 0xfe, 0x9f, 0xf2, 0xa1, 0x29, 0x60, 0x3f, 0xa5, 0xa4, 0xf6, 0x3d, 0xf1, 0xc6, 0x7a, 0xf3, 0xc6, 0xfd, 0x11, 0x6c, 0x38, 0xe8, 0x91, 0x82, 0x3c, 0xd9, 0x33, 0xef, 0x57, 0x9e, 0x6c, 0x04, 0x10, 0x65, 0x6a, 0xc5, 0xaa, 0x1f, 0xc4, 0x50, 0x1d, 0xe6, 0xbd, 0x27, 0xe0, 0x79, 0x30, ]
|
|
18
|
+
|
|
19
|
+
let mappingKey : OpaquePointer = EVP_PKEY_new()
|
|
20
|
+
let dhKey = DH_get_2048_256()
|
|
21
|
+
|
|
22
|
+
let rc = DH_generate_key(dhKey)
|
|
23
|
+
EVP_PKEY_set1_DH(mappingKey, dhKey)
|
|
24
|
+
|
|
25
|
+
let pubKeyData = try! unwrapDO( tag:0x7c, wrappedData:resp)
|
|
26
|
+
let encodedPublicKey = try! unwrapDO(tag: 0x82, wrappedData: pubKeyData)
|
|
27
|
+
|
|
28
|
+
let piccMappingPublicKey = OpenSSLUtils.decodePublicKeyFromBytes(pubKeyData: encodedPublicKey, params: mappingKey)!
|
|
29
|
+
let asecret = OpenSSLUtils.computeSharedSecret(privateKeyPair: mappingKey, publicKey: piccMappingPublicKey)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
let dh_mapping_key = EVP_PKEY_get1_DH(mappingKey)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
print( "DONE" )
|
|
36
|
+
|
|
37
|
+
let piccNonce : [UInt8] = [0xed, 0xb6, 0xc4, 0x07, 0x04, 0xae, 0x98, 0xfd,]
|
|
38
|
+
let bn_nonce = BN_bin2bn(piccNonce, Int32(piccNonce.count), nil);
|
|
39
|
+
|
|
40
|
+
let bn = BN_bin2bn(encodedPublicKey, Int32(encodedPublicKey.count), nil);
|
|
41
|
+
var secret = [UInt8](repeating: 0, count: Int(DH_size(dh_mapping_key)))
|
|
42
|
+
DH_compute_key( &secret, bn, dh_mapping_key)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
let bn_h = BN_bin2bn(secret, Int32(secret.count), nil);
|
|
46
|
+
|
|
47
|
+
var p : OpaquePointer? = nil
|
|
48
|
+
var q : OpaquePointer? = nil
|
|
49
|
+
var g : OpaquePointer? = nil
|
|
50
|
+
DH_get0_pqg(dh_mapping_key, &p, &q, &g);
|
|
51
|
+
|
|
52
|
+
// map to new generator#imageLiteral(resourceName: "simulator_screenshot_33B42CB4-EA6E-47B4-A2A2-D96CA95B0F15.png")
|
|
53
|
+
let bn_g = BN_new()
|
|
54
|
+
let new_g = BN_new()
|
|
55
|
+
|
|
56
|
+
// bn_g = g^nonce mod p
|
|
57
|
+
// ephemeral_key->g = bn_g mod p * h => (g^nonce mod p) * h mod p
|
|
58
|
+
let bn_ctx = BN_CTX_new()
|
|
59
|
+
let rc3 = BN_mod_exp(bn_g, g, bn_nonce, p, bn_ctx)
|
|
60
|
+
let rc4 = BN_mod_mul(new_g, bn_g, bn_h, p, bn_ctx)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
let ephemeral_key = DHparams_dup(dh_mapping_key)
|
|
64
|
+
let rc5 = DH_set0_pqg(ephemeral_key, BN_dup(p), BN_dup(q), BN_dup(new_g))
|
|
65
|
+
|
|
66
|
+
BN_free( bn_nonce )
|
|
67
|
+
BN_free( bn )
|
|
68
|
+
BN_free(bn_h)
|
|
69
|
+
BN_free(bn_g)
|
|
70
|
+
BN_free(new_g)
|
|
71
|
+
BN_CTX_free(bn_ctx)
|
|
72
|
+
|
|
73
|
+
// Set the ephemeral params
|
|
74
|
+
let ephemeralParams = EVP_PKEY_new()
|
|
75
|
+
let rc6 = EVP_PKEY_set1_DH(ephemeralParams, ephemeral_key)
|
|
76
|
+
|
|
77
|
+
EVP_PKEY_free(mappingKey)
|
|
78
|
+
|
|
79
|
+
var ephemeralKeyPair : OpaquePointer? = nil
|
|
80
|
+
let pctx = EVP_PKEY_CTX_new(ephemeralParams, nil)
|
|
81
|
+
EVP_PKEY_keygen_init(pctx)
|
|
82
|
+
EVP_PKEY_keygen(pctx, &ephemeralKeyPair)
|
|
83
|
+
EVP_PKEY_CTX_free(pctx)
|
|
84
|
+
|
|
85
|
+
EVP_PKEY_free( ephemeralParams )
|
|
86
|
+
|
|
87
|
+
let publicKey = OpenSSLUtils.getPublicKeyData( from: ephemeralKeyPair! )
|
|
88
|
+
print( "Ephemeral public key - \(binToHexRep(publicKey!, asArray: true))")
|
|
89
|
+
|
|
90
|
+
return ephemeralKeyPair!
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
func doTest() {
|
|
94
|
+
var passportEphKey : [UInt8] = [0x01, 0xd5, 0xa8, 0xb2, 0xea, 0xb6, 0x18, 0x55, 0x34, 0x24, 0xfe, 0x25, 0x10, 0x15, 0xaf, 0xc3, 0x85, 0xda, 0x13, 0x94, 0xe7, 0x2b, 0x76, 0x81, 0x2d, 0x8c, 0xe0, 0x6f, 0x60, 0x65, 0xfb, 0x33, 0x8c, 0x5b, 0x2d, 0xc9, 0x38, 0x11, 0xb3, 0x80, 0xd7, 0x49, 0xaa, 0xeb, 0x36, 0xa5, 0xdd, 0xa0, 0x78, 0x33, 0xe0, 0xd5, 0x52, 0xd4, 0x4e, 0xaa, 0xf0, 0xa3, 0x5f, 0xd3, 0x9c, 0x89, 0x44, 0xca, 0xac, 0xf1, 0x7a, 0x1e, 0xd4, 0x61, 0x58, 0x1d, 0x81, 0x83, 0xb6, 0x98, 0x85, 0x15, 0x2d, 0xeb, 0xd7, 0xc2, 0x66, 0xe4, 0xe0, 0xd1, 0x73, 0x1c, 0x52, 0xd7, 0x3a, 0x33, 0x20, 0x1f, 0x64, 0x8b, 0x85, 0xb7, 0xe5, 0xbb, 0x09, 0xe8, 0x8a, 0xd3, 0x79, 0x8c, 0x23, 0x7a, 0x35, 0xb2, 0xc5, 0xfa, 0x42, 0xcb, 0xe4, 0xc4, 0x86, 0xa7, 0x8f, 0x96, 0x22, 0xc1, 0x2b, 0x07, 0xc6, 0x29, 0xa2, 0xfd, 0x31, 0xcb, 0xba, 0x1b, 0x05, 0xca, 0xc2, 0xaa, 0xc3, 0x6f, 0x5a, 0xa8, 0x43, 0xa1, 0x60, 0x35, 0x97, 0xda, 0x35, 0xfd, 0x76, 0x16, 0xa9, 0x32, 0x91, 0xd1, 0xd8, 0x7b, 0x0b, 0xfc, 0x30, 0x99, 0x06, 0xa7, 0x62, 0x44, 0x85, 0x2b, 0xb9, 0x9b, 0x5a, 0xfb, 0x94, 0x28, 0x47, 0x40, 0x7f, 0x7a, 0x6a, 0xb2, 0xe9, 0xcc, 0xe3, 0x13, 0x52, 0x7c, 0xc0, 0x87, 0x1d, 0x72, 0xc5, 0x4b, 0x69, 0x0a, 0x2a, 0xc7, 0x37, 0xd5, 0x17, 0xd2, 0xce, 0xd2, 0x54, 0x66, 0x92, 0x42, 0x91, 0x84, 0x24, 0xef, 0xb6, 0x98, 0x6d, 0x78, 0x95, 0x0d, 0x7e, 0x49, 0xd0, 0xee, 0xcc, 0x61, 0x5d, 0x2f, 0x5a, 0xa1, 0xb2, 0xc0, 0xa9, 0xe7, 0x30, 0x94, 0x58, 0x58, 0x7a, 0x59, 0xd7, 0x96, 0xe9, 0x8c, 0x2c, 0xfd, 0xe9, 0x58, 0xe4, 0x4b, 0xa3, 0x31, 0x47, 0x03, 0x57, 0x05, 0x84, 0x6d, 0x3c, 0x4c, 0x3a, 0xaa, ];
|
|
95
|
+
|
|
96
|
+
let ephKeyPair = testDHKeyMapping()
|
|
97
|
+
|
|
98
|
+
let passportPublicKey = OpenSSLUtils.decodePublicKeyFromBytes(pubKeyData: passportEphKey, params: ephKeyPair)
|
|
99
|
+
|
|
100
|
+
let dh = EVP_PKEY_get1_DH(ephKeyPair);
|
|
101
|
+
|
|
102
|
+
var out = [UInt8](repeating:0, count:Int(DH_size(dh)))
|
|
103
|
+
|
|
104
|
+
let dh_ppub = EVP_PKEY_get1_DH(passportPublicKey)
|
|
105
|
+
var bn = BN_new()
|
|
106
|
+
DH_get0_key( dh_ppub, &bn, nil )
|
|
107
|
+
|
|
108
|
+
let len = DH_compute_key(&out, bn, dh);
|
|
109
|
+
|
|
110
|
+
return
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Uncomment the next line to define a global platform for your project
|
|
2
|
+
platform :ios, '15.0'
|
|
3
|
+
|
|
4
|
+
# Disable use of input/output files here so that when we build it includes any changes to the development pod
|
|
5
|
+
# rather than having to manually clean and rebuuild each time
|
|
6
|
+
# Note this is commented out as it breaks archive project! But useful for dev
|
|
7
|
+
#install! 'cocoapods', :disable_input_output_paths => true
|
|
8
|
+
|
|
9
|
+
target 'NFCPassportReaderApp' do
|
|
10
|
+
# Comment the next line if you don't want to use dynamic frameworks
|
|
11
|
+
use_frameworks!
|
|
12
|
+
|
|
13
|
+
# Pods for NFCPassportReaderApp
|
|
14
|
+
pod 'NFCPassportReader', :path => '../..'
|
|
15
|
+
pod 'QKMRZScanner'
|
|
16
|
+
|
|
17
|
+
target 'NFCPassportReaderAppTests' do
|
|
18
|
+
inherit! :search_paths
|
|
19
|
+
# Pods for testing
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
PODS:
|
|
2
|
+
- NFCPassportReader (1.1.9):
|
|
3
|
+
- OpenSSL-Universal (= 1.1.180)
|
|
4
|
+
- OpenSSL-Universal (1.1.180)
|
|
5
|
+
- QKMRZParser (2.0.0)
|
|
6
|
+
- QKMRZScanner (3.0.0):
|
|
7
|
+
- QKMRZParser (~> 2.0.0)
|
|
8
|
+
- SwiftyTesseract (~> 3.1.3)
|
|
9
|
+
- SwiftyTesseract (3.1.3)
|
|
10
|
+
|
|
11
|
+
DEPENDENCIES:
|
|
12
|
+
- NFCPassportReader (from `../..`)
|
|
13
|
+
- QKMRZScanner
|
|
14
|
+
|
|
15
|
+
SPEC REPOS:
|
|
16
|
+
trunk:
|
|
17
|
+
- OpenSSL-Universal
|
|
18
|
+
- QKMRZParser
|
|
19
|
+
- QKMRZScanner
|
|
20
|
+
- SwiftyTesseract
|
|
21
|
+
|
|
22
|
+
EXTERNAL SOURCES:
|
|
23
|
+
NFCPassportReader:
|
|
24
|
+
:path: "../.."
|
|
25
|
+
|
|
26
|
+
SPEC CHECKSUMS:
|
|
27
|
+
NFCPassportReader: 3a4b15d28c89a1f747c957f2bce1230c268dba25
|
|
28
|
+
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
|
|
29
|
+
QKMRZParser: 6b419b6f07d6bff6b50429b97de10846dc902c29
|
|
30
|
+
QKMRZScanner: cf2348fd6ce441e758328da4adf231ef2b51d769
|
|
31
|
+
SwiftyTesseract: 1f3d96668ae92dc2208d9842c8a59bea9fad2cbb
|
|
32
|
+
|
|
33
|
+
PODFILE CHECKSUM: b90c09d0214453ca8e10fa6c4bc0d09e4919d7a1
|
|
34
|
+
|
|
35
|
+
COCOAPODS: 1.11.3
|
package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/AppDelegate.swift
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//
|
|
2
|
+
// AppDelegate.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 06/06/2019.
|
|
6
|
+
// Copyright © 2019 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import UIKit
|
|
10
|
+
import CoreNFC
|
|
11
|
+
|
|
12
|
+
@UIApplicationMain
|
|
13
|
+
class AppDelegate: UIResponder, UIApplicationDelegate {
|
|
14
|
+
|
|
15
|
+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
func applicationWillTerminate(_ application: UIApplication) {
|
|
20
|
+
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// MARK: UISceneSession Lifecycle
|
|
24
|
+
|
|
25
|
+
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
|
26
|
+
// Called when a new scene session is being created.
|
|
27
|
+
// Use this method to select a configuration to create the new scene with.
|
|
28
|
+
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
|
32
|
+
// Called when the user discards a scene session.
|
|
33
|
+
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
|
34
|
+
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"info" : {
|
|
3
|
+
"author" : "xcode",
|
|
4
|
+
"version" : 1
|
|
5
|
+
},
|
|
6
|
+
"images" : [
|
|
7
|
+
{
|
|
8
|
+
"size" : "40x40",
|
|
9
|
+
"filename" : "icon-40.png",
|
|
10
|
+
"idiom" : "ipad",
|
|
11
|
+
"scale" : "1x"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"size" : "40x40",
|
|
15
|
+
"idiom" : "ipad",
|
|
16
|
+
"scale" : "2x",
|
|
17
|
+
"filename" : "icon-40@2x.png"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idiom" : "iphone",
|
|
21
|
+
"size" : "60x60",
|
|
22
|
+
"scale" : "2x",
|
|
23
|
+
"filename" : "icon-60@2x.png"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"idiom" : "ipad",
|
|
27
|
+
"filename" : "icon-72.png",
|
|
28
|
+
"size" : "72x72",
|
|
29
|
+
"scale" : "1x"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"scale" : "2x",
|
|
33
|
+
"idiom" : "ipad",
|
|
34
|
+
"size" : "72x72",
|
|
35
|
+
"filename" : "icon-72@2x.png"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"idiom" : "ipad",
|
|
39
|
+
"size" : "76x76",
|
|
40
|
+
"scale" : "1x",
|
|
41
|
+
"filename" : "icon-76.png"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"scale" : "2x",
|
|
45
|
+
"size" : "76x76",
|
|
46
|
+
"idiom" : "ipad",
|
|
47
|
+
"filename" : "icon-76@2x.png"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"idiom" : "ipad",
|
|
51
|
+
"size" : "50x50",
|
|
52
|
+
"filename" : "icon-small-50.png",
|
|
53
|
+
"scale" : "1x"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"scale" : "2x",
|
|
57
|
+
"filename" : "icon-small-50@2x.png",
|
|
58
|
+
"size" : "50x50",
|
|
59
|
+
"idiom" : "ipad"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"scale" : "1x",
|
|
63
|
+
"filename" : "icon-small.png",
|
|
64
|
+
"idiom" : "iphone",
|
|
65
|
+
"size" : "29x29"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"scale" : "2x",
|
|
69
|
+
"size" : "29x29",
|
|
70
|
+
"idiom" : "iphone",
|
|
71
|
+
"filename" : "icon-small@2x.png"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"filename" : "icon.png",
|
|
75
|
+
"idiom" : "iphone",
|
|
76
|
+
"size" : "57x57",
|
|
77
|
+
"scale" : "1x"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"scale" : "2x",
|
|
81
|
+
"size" : "57x57",
|
|
82
|
+
"idiom" : "iphone",
|
|
83
|
+
"filename" : "icon@2x.png"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"filename" : "icon-small@3x.png",
|
|
87
|
+
"size" : "29x29",
|
|
88
|
+
"idiom" : "iphone",
|
|
89
|
+
"scale" : "3x"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"size" : "40x40",
|
|
93
|
+
"scale" : "3x",
|
|
94
|
+
"idiom" : "iphone",
|
|
95
|
+
"filename" : "icon-40@3x.png"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"filename" : "icon-60@3x.png",
|
|
99
|
+
"scale" : "3x",
|
|
100
|
+
"idiom" : "iphone",
|
|
101
|
+
"size" : "60x60"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"size" : "40x40",
|
|
105
|
+
"filename" : "icon-40@2x.png",
|
|
106
|
+
"idiom" : "iphone",
|
|
107
|
+
"scale" : "2x"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"scale" : "1x",
|
|
111
|
+
"idiom" : "ipad",
|
|
112
|
+
"size" : "29x29",
|
|
113
|
+
"filename" : "icon-small.png"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"size" : "29x29",
|
|
117
|
+
"scale" : "2x",
|
|
118
|
+
"filename" : "icon-small@2x.png",
|
|
119
|
+
"idiom" : "ipad"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"idiom" : "ipad",
|
|
123
|
+
"filename" : "icon-83.5@2x.png",
|
|
124
|
+
"scale" : "2x",
|
|
125
|
+
"size" : "83.5x83.5"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"size" : "20x20",
|
|
129
|
+
"scale" : "2x",
|
|
130
|
+
"filename" : "notification-icon@2x.png",
|
|
131
|
+
"idiom" : "iphone"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"scale" : "3x",
|
|
135
|
+
"filename" : "notification-icon@3x.png",
|
|
136
|
+
"idiom" : "iphone",
|
|
137
|
+
"size" : "20x20"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"filename" : "notification-icon~ipad.png",
|
|
141
|
+
"idiom" : "ipad",
|
|
142
|
+
"size" : "20x20",
|
|
143
|
+
"scale" : "1x"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"filename" : "notification-icon~ipad@2x.png",
|
|
147
|
+
"size" : "20x20",
|
|
148
|
+
"scale" : "2x",
|
|
149
|
+
"idiom" : "ipad"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"filename" : "ios-marketing.png",
|
|
153
|
+
"size" : "1024x1024",
|
|
154
|
+
"idiom" : "ios-marketing",
|
|
155
|
+
"scale" : "1x"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"idiom" : "universal",
|
|
5
|
+
"filename" : "background.png",
|
|
6
|
+
"scale" : "1x"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idiom" : "universal",
|
|
14
|
+
"scale" : "3x"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"info" : {
|
|
18
|
+
"version" : 1,
|
|
19
|
+
"author" : "xcode"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"idiom" : "universal",
|
|
5
|
+
"filename" : "head.png",
|
|
6
|
+
"scale" : "1x"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idiom" : "universal",
|
|
14
|
+
"scale" : "3x"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"info" : {
|
|
18
|
+
"version" : 1,
|
|
19
|
+
"author" : "xcode"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
|
3
|
+
<dependencies>
|
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
|
5
|
+
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
|
6
|
+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
7
|
+
</dependencies>
|
|
8
|
+
<scenes>
|
|
9
|
+
<!--View Controller-->
|
|
10
|
+
<scene sceneID="EHf-IW-A2E">
|
|
11
|
+
<objects>
|
|
12
|
+
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
|
13
|
+
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
|
14
|
+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
|
15
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
16
|
+
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
|
17
|
+
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
|
18
|
+
</view>
|
|
19
|
+
</viewController>
|
|
20
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
|
21
|
+
</objects>
|
|
22
|
+
<point key="canvasLocation" x="53" y="375"/>
|
|
23
|
+
</scene>
|
|
24
|
+
</scenes>
|
|
25
|
+
</document>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//
|
|
2
|
+
// FileManagerExt.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 17/02/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import SwiftUI
|
|
10
|
+
|
|
11
|
+
extension FileManager {
|
|
12
|
+
static var cachesFolder : URL {
|
|
13
|
+
FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//
|
|
2
|
+
// StringExt.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 30/06/2019.
|
|
6
|
+
// Copyright © 2019 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
/// Some Utility methods for string - access characters by index
|
|
12
|
+
extension String {
|
|
13
|
+
subscript(_ i: Int) -> String {
|
|
14
|
+
let idx1 = index(startIndex, offsetBy: i)
|
|
15
|
+
let idx2 = index(idx1, offsetBy: 1)
|
|
16
|
+
return String(self[idx1..<idx2])
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
subscript (bounds: CountableRange<Int>) -> String {
|
|
20
|
+
let start = index(startIndex, offsetBy: bounds.lowerBound)
|
|
21
|
+
let end = index(startIndex, offsetBy: bounds.upperBound)
|
|
22
|
+
return String(self[start..<end])
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
subscript (bounds: CountableClosedRange<Int>) -> String {
|
|
26
|
+
let start = index(startIndex, offsetBy: bounds.lowerBound)
|
|
27
|
+
let end = index(startIndex, offsetBy: bounds.upperBound)
|
|
28
|
+
return String(self[start...end])
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
subscript (bounds: CountablePartialRangeFrom<Int>) -> String {
|
|
32
|
+
let start = index(startIndex, offsetBy: bounds.lowerBound)
|
|
33
|
+
return String(self[start...])
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
func strip() -> String {
|
|
37
|
+
let trimmed = self.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
38
|
+
return trimmed
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UIApplicationExt.swift
|
|
3
|
+
// NFCPassportReaderApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Andy Qua on 20/01/2021.
|
|
6
|
+
// Copyright © 2021 Andy Qua. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import UIKit
|
|
10
|
+
|
|
11
|
+
extension UIApplication {
|
|
12
|
+
static var release: String {
|
|
13
|
+
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String? ?? "x.x"
|
|
14
|
+
}
|
|
15
|
+
static var build: String {
|
|
16
|
+
return Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String? ?? "x"
|
|
17
|
+
}
|
|
18
|
+
static var version: String {
|
|
19
|
+
return "\(release).\(build)"
|
|
20
|
+
}
|
|
21
|
+
}
|