@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,224 @@
1
+ //
2
+ // ChipAuthenticationHandler.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 25/02/2021.
6
+ //
7
+
8
+ import Foundation
9
+ import OSLog
10
+ import OpenSSL
11
+
12
+ #if !os(macOS)
13
+ import CoreNFC
14
+ import CryptoKit
15
+
16
+ @available(iOS 15, *)
17
+ class ChipAuthenticationHandler {
18
+
19
+ private static let NO_PACE_KEY_REFERENCE : UInt8 = 0x00
20
+ private static let ENC_MODE : UInt8 = 0x1
21
+ private static let MAC_MODE : UInt8 = 0x2
22
+ private static let PACE_MODE : UInt8 = 0x3
23
+
24
+ private static let COMMAND_CHAINING_CHUNK_SIZE = 224
25
+
26
+ var tagReader : TagReader?
27
+ var gaSegments = [[UInt8]]()
28
+
29
+ var chipAuthInfos = [Int:ChipAuthenticationInfo]()
30
+ var chipAuthPublicKeyInfos = [ChipAuthenticationPublicKeyInfo]()
31
+
32
+ var isChipAuthenticationSupported : Bool = false
33
+
34
+ public init(dg14 : DataGroup14, tagReader: TagReader) {
35
+ self.tagReader = tagReader
36
+
37
+ for secInfo in dg14.securityInfos {
38
+ if let cai = secInfo as? ChipAuthenticationInfo {
39
+ let keyId = cai.getKeyId()
40
+ chipAuthInfos[keyId] = cai
41
+ } else if let capki = secInfo as? ChipAuthenticationPublicKeyInfo {
42
+ chipAuthPublicKeyInfos.append(capki)
43
+ }
44
+ }
45
+
46
+ if chipAuthPublicKeyInfos.count > 0 {
47
+ isChipAuthenticationSupported = true
48
+ }
49
+ }
50
+
51
+ public func doChipAuthentication() async throws {
52
+
53
+ Logger.chipAuth.info( "Performing Chip Authentication - number of public keys found - \(self.chipAuthPublicKeyInfos.count)" )
54
+ guard isChipAuthenticationSupported else {
55
+ throw NFCPassportReaderError.NotYetSupported( "ChipAuthentication not supported" )
56
+ }
57
+
58
+ var success = false
59
+ for pubKey in chipAuthPublicKeyInfos {
60
+ do {
61
+ success = try await self.doChipAuthentication( with: pubKey)
62
+ if success {
63
+ break
64
+ }
65
+ } catch {
66
+ // try next key
67
+ }
68
+ }
69
+
70
+ if !success {
71
+ throw NFCPassportReaderError.ChipAuthenticationFailed
72
+ }
73
+ }
74
+
75
+ private func doChipAuthentication( with chipAuthPublicKeyInfo : ChipAuthenticationPublicKeyInfo ) async throws -> Bool {
76
+
77
+ // So it turns out that some passports don't have ChipAuthInfo items.
78
+ // So if we do have a ChipAuthInfo the we take the keyId (if present) and OID from there,
79
+ // BUT if we don't then we will try to infer the OID from the public key
80
+ let keyId = chipAuthPublicKeyInfo.keyId
81
+ let chipAuthInfoOID : String
82
+ if let chipAuthInfo = chipAuthInfos[keyId ?? 0] {
83
+ chipAuthInfoOID = chipAuthInfo.oid
84
+ } else {
85
+ if let oid = inferOID( fromPublicKeyOID:chipAuthPublicKeyInfo.oid) {
86
+ chipAuthInfoOID = oid
87
+ } else {
88
+ return false
89
+ }
90
+ }
91
+
92
+ try await self.doCA( keyId: keyId, encryptionDetailsOID: chipAuthInfoOID, publicKey: chipAuthPublicKeyInfo.pubKey )
93
+ return true
94
+ }
95
+
96
+ /// Infer OID from public key type - Best guess seems to be to use 3DES_CBC_CBC for both ECDH and DH keys
97
+ /// Apparently works for French passports
98
+ private func inferOID(fromPublicKeyOID: String ) -> String? {
99
+ if fromPublicKeyOID == SecurityInfo.ID_PK_ECDH_OID {
100
+ Logger.chipAuth.warning("No ChipAuthenticationInfo - guessing its id-CA-ECDH-3DES-CBC-CBC");
101
+ return SecurityInfo.ID_CA_ECDH_3DES_CBC_CBC_OID
102
+ } else if fromPublicKeyOID == SecurityInfo.ID_PK_DH_OID {
103
+ Logger.chipAuth.warning("No ChipAuthenticationInfo - guessing its id-CA-DH-3DES-CBC-CBC");
104
+ return SecurityInfo.ID_CA_DH_3DES_CBC_CBC_OID
105
+ }
106
+
107
+ Logger.chipAuth.warning("No ChipAuthenticationInfo and unsupported ChipAuthenticationPublicKeyInfo public key OID \(fromPublicKeyOID)")
108
+ return nil;
109
+ }
110
+
111
+ private func doCA( keyId: Int?, encryptionDetailsOID oid: String, publicKey: OpaquePointer) async throws {
112
+
113
+ // Generate Ephemeral Keypair from parameters from DG14 Public key
114
+ // This should work for both EC and DH keys
115
+ var ephemeralKeyPair : OpaquePointer? = nil
116
+ let pctx = EVP_PKEY_CTX_new(publicKey, nil)
117
+ EVP_PKEY_keygen_init(pctx)
118
+ EVP_PKEY_keygen(pctx, &ephemeralKeyPair)
119
+ EVP_PKEY_CTX_free(pctx)
120
+
121
+ // Send the public key to the passport
122
+ try await sendPublicKey(oid: oid, keyId: keyId, pcdPublicKey: ephemeralKeyPair!)
123
+
124
+ Logger.chipAuth.debug( "Public Key successfully sent to passport!" )
125
+
126
+ // Use our ephemeral private key and the passports public key to generate a shared secret
127
+ // (the passport with do the same thing with their private key and our public key)
128
+ let sharedSecret = OpenSSLUtils.computeSharedSecret(privateKeyPair:ephemeralKeyPair!, publicKey:publicKey)
129
+
130
+ // Now try to restart Secure Messaging using the new shared secret and
131
+ try restartSecureMessaging( oid : oid, sharedSecret : sharedSecret, maxTranceiveLength : 1, shouldCheckMAC : true)
132
+ }
133
+
134
+ private func sendPublicKey(oid : String, keyId : Int?, pcdPublicKey : OpaquePointer) async throws {
135
+ let cipherAlg = try ChipAuthenticationInfo.toCipherAlgorithm(oid: oid)
136
+ guard let keyData = OpenSSLUtils.getPublicKeyData(from: pcdPublicKey) else {
137
+ throw NFCPassportReaderError.InvalidDataPassed("Unable to get public key data from public key" )
138
+ }
139
+
140
+ if cipherAlg.hasPrefix("DESede") {
141
+
142
+ var idData : [UInt8] = []
143
+ if let keyId = keyId {
144
+ idData = intToBytes( val:keyId, removePadding:true)
145
+ idData = wrapDO( b:0x84, arr:idData)
146
+ }
147
+ let wrappedKeyData = wrapDO( b:0x91, arr:keyData)
148
+ _ = try await self.tagReader?.sendMSEKAT(keyData: Data(wrappedKeyData), idData: Data(idData))
149
+ } else if cipherAlg.hasPrefix("AES") {
150
+ _ = try await self.tagReader?.sendMSESetATIntAuth(oid: oid, keyId: keyId)
151
+ let data = wrapDO(b: 0x80, arr:keyData)
152
+ gaSegments = self.chunk(data: data, segmentSize: ChipAuthenticationHandler.COMMAND_CHAINING_CHUNK_SIZE )
153
+ try await self.handleGeneralAuthentication()
154
+ } else {
155
+ throw NFCPassportReaderError.InvalidDataPassed("Cipher Algorithm \(cipherAlg) not supported")
156
+ }
157
+ }
158
+
159
+ private func handleGeneralAuthentication() async throws {
160
+ repeat {
161
+ // Pull next segment from list
162
+ let segment = gaSegments.removeFirst()
163
+ let isLast = gaSegments.isEmpty
164
+
165
+ // send it
166
+ _ = try await self.tagReader?.sendGeneralAuthenticate(data: segment, isLast: isLast)
167
+ } while ( !gaSegments.isEmpty )
168
+ }
169
+
170
+ private func restartSecureMessaging( oid : String, sharedSecret : [UInt8], maxTranceiveLength : Int, shouldCheckMAC : Bool) throws {
171
+ let cipherAlg = try ChipAuthenticationInfo.toCipherAlgorithm(oid: oid)
172
+ let keyLength = try ChipAuthenticationInfo.toKeyLength(oid: oid)
173
+
174
+ // Start secure messaging.
175
+ let smskg = SecureMessagingSessionKeyGenerator()
176
+ let ksEnc = try smskg.deriveKey(keySeed: sharedSecret, cipherAlgName: cipherAlg, keyLength: keyLength, mode: .ENC_MODE)
177
+ let ksMac = try smskg.deriveKey(keySeed: sharedSecret, cipherAlgName: cipherAlg, keyLength: keyLength, mode: .MAC_MODE)
178
+
179
+ let ssc = withUnsafeBytes(of: 0.bigEndian, Array.init)
180
+ if (cipherAlg.hasPrefix("DESede")) {
181
+ Logger.chipAuth.info( "Restarting secure messaging using DESede encryption")
182
+ let sm = SecureMessaging(encryptionAlgorithm: .DES, ksenc: ksEnc, ksmac: ksMac, ssc: ssc)
183
+ tagReader?.secureMessaging = sm
184
+ } else if (cipherAlg.hasPrefix("AES")) {
185
+ Logger.chipAuth.info( "Restarting secure messaging using AES encryption")
186
+ let sm = SecureMessaging(encryptionAlgorithm: .AES, ksenc: ksEnc, ksmac: ksMac, ssc: ssc)
187
+ tagReader?.secureMessaging = sm
188
+ } else {
189
+ Logger.chipAuth.error( "Not restarting secure messaging as unsupported cipher algorithm requested - \(cipherAlg)")
190
+ throw NFCPassportReaderError.InvalidDataPassed("Unsupported cipher algorithm \(cipherAlg)" )
191
+ }
192
+ }
193
+
194
+
195
+ func inferDigestAlgorithmFromCipherAlgorithmForKeyDerivation( cipherAlg : String, keyLength : Int) throws -> String {
196
+ if cipherAlg == "DESede" || cipherAlg == "AES-128" {
197
+ return "SHA1"
198
+ }
199
+ if cipherAlg == "AES" && keyLength == 128 {
200
+ return "SHA1"
201
+ }
202
+ if cipherAlg == "AES-256" || cipherAlg == "AES-192" {
203
+ return "SHA256"
204
+ }
205
+ if cipherAlg == "AES" && (keyLength == 192 || keyLength == 256) {
206
+ return "SHA256"
207
+ }
208
+
209
+ throw NFCPassportReaderError.InvalidDataPassed("Unsupported cipher algorithm or key length")
210
+ }
211
+
212
+ /// Chunks up a byte array into a number of segments of the given size,
213
+ /// and a final segment if there is a remainder.
214
+ /// - Parameter segmentSize the number of bytes per segment
215
+ /// - Parameter data the data to be partitioned
216
+ /// - Parameter a list with the segments
217
+ func chunk( data : [UInt8], segmentSize: Int ) -> [[UInt8]] {
218
+ return stride(from: 0, to: data.count, by: segmentSize).map {
219
+ Array(data[$0 ..< Swift.min($0 + segmentSize, data.count)])
220
+ }
221
+ }
222
+ }
223
+
224
+ #endif
@@ -0,0 +1,16 @@
1
+ //
2
+ // DataGroupHash.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 09/02/2021.
6
+ // Copyright © 2021 Andy Qua. All rights reserved.
7
+ //
8
+
9
+ @available(iOS 13, macOS 10.15, *)
10
+ public struct DataGroupHash {
11
+ public var id: String
12
+ public var sodHash: String
13
+ public var computedHash : String
14
+ public var match : Bool
15
+ }
16
+
@@ -0,0 +1,36 @@
1
+ //
2
+ // DataGroupParser.swift
3
+ //
4
+ // Created by Andy Qua on 14/06/2019.
5
+ //
6
+
7
+ import OpenSSL
8
+
9
+ @available(iOS 13, macOS 10.15, *)
10
+ class DataGroupParser {
11
+
12
+ static let dataGroupNames = ["Common", "DG1", "DG2", "DG3", "DG4", "DG5", "DG6", "DG7", "DG8", "DG9", "DG10", "DG11", "DG12", "DG13", "DG14", "DG15", "DG16", "SecurityData"]
13
+ static let tags : [UInt8] = [0x60, 0x61, 0x75, 0x63, 0x76, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x77]
14
+ static let classes : [DataGroup.Type] = [COM.self, DataGroup1.self, DataGroup2.self,
15
+ NotImplementedDG.self, NotImplementedDG.self, NotImplementedDG.self,
16
+ NotImplementedDG.self, DataGroup7.self, NotImplementedDG.self,
17
+ NotImplementedDG.self, NotImplementedDG.self, DataGroup11.self,
18
+ DataGroup12.self, NotImplementedDG.self, DataGroup14.self,
19
+ DataGroup15.self, NotImplementedDG.self, SOD.self]
20
+
21
+
22
+ func parseDG( data : [UInt8] ) throws -> DataGroup {
23
+
24
+ let header = data[0..<4]
25
+
26
+ let dg = try tagToDG(header[0])
27
+
28
+ return try dg.init(data)
29
+ }
30
+
31
+
32
+ func tagToDG( _ tag : UInt8 ) throws -> DataGroup.Type {
33
+ guard let index = DataGroupParser.tags.firstIndex(of: tag) else { throw NFCPassportReaderError.UnknownTag}
34
+ return DataGroupParser.classes[index]
35
+ }
36
+ }
@@ -0,0 +1,69 @@
1
+ //
2
+ // File.swift
3
+ //
4
+ //
5
+ // Created by Paul Philip Mitchell on 06/12/2021.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ @available(iOS 13, macOS 10.15, *)
11
+ public class ActiveAuthenticationInfo : SecurityInfo {
12
+
13
+ var oid : String
14
+ var version : Int
15
+ var signatureAlgorithmOID : String?
16
+
17
+ static func checkRequiredIdentifier(_ oid : String) -> Bool {
18
+ return ID_AA_OID == oid
19
+ }
20
+
21
+ init(oid: String, version: Int, signatureAlgorithmOID: String? = nil) {
22
+ self.oid = oid
23
+ self.version = version
24
+ self.signatureAlgorithmOID = signatureAlgorithmOID
25
+ }
26
+
27
+ public override func getObjectIdentifier() -> String {
28
+ return oid
29
+ }
30
+
31
+ public override func getProtocolOIDString() -> String {
32
+ return ActiveAuthenticationInfo.toProtocolOIDString(oid:oid)
33
+ }
34
+
35
+ public func getSignatureAlgorithmOIDString() -> String? {
36
+ return ActiveAuthenticationInfo.toSignatureAlgorithmOIDString(oid: signatureAlgorithmOID)
37
+ }
38
+
39
+ private static func toProtocolOIDString(oid : String) -> String {
40
+ if ID_AA_OID == oid {
41
+ return "id-AA"
42
+ }
43
+
44
+ return oid
45
+ }
46
+
47
+ private static func toSignatureAlgorithmOIDString(oid: String?) -> String? {
48
+ if (ECDSA_PLAIN_SHA1_OID == oid) {
49
+ return "ecdsa-plain-SHA1";
50
+ }
51
+ if (ECDSA_PLAIN_SHA224_OID == oid) {
52
+ return "ecdsa-plain-SHA224";
53
+ }
54
+ if (ECDSA_PLAIN_SHA256_OID == oid) {
55
+ return "ecdsa-plain-SHA256";
56
+ }
57
+ if (ECDSA_PLAIN_SHA384_OID == oid) {
58
+ return "ecdsa-plain-SHA384";
59
+ }
60
+ if (ECDSA_PLAIN_SHA512_OID == oid) {
61
+ return "ecdsa-plain-SHA512";
62
+ }
63
+ if (ECDSA_PLAIN_RIPEMD160_OID == oid) {
64
+ return "ecdsa-plain-RIPEMD160";
65
+ }
66
+
67
+ return nil
68
+ }
69
+ }
@@ -0,0 +1,61 @@
1
+ //
2
+ // COM.swift
3
+ //
4
+ // Created by Andy Qua on 01/02/2021.
5
+ //
6
+
7
+ import Foundation
8
+ import OSLog
9
+
10
+ @available(iOS 13, macOS 10.15, *)
11
+ public class COM : DataGroup {
12
+ public private(set) var version : String = "Unknown"
13
+ public private(set) var unicodeVersion : String = "Unknown"
14
+ public private(set) var dataGroupsPresent : [String] = []
15
+
16
+ public override var datagroupType: DataGroupId { .COM }
17
+
18
+ required init( _ data : [UInt8] ) throws {
19
+ try super.init(data)
20
+ }
21
+
22
+ override func parse(_ data: [UInt8]) throws {
23
+ var tag = try getNextTag()
24
+ try verifyTag(tag, equals: 0x5F01)
25
+
26
+ // Version is 4 bytes (ascii) - AABB
27
+ // AA is major number, BB is minor number
28
+ // e.g. 48 49 48 55 -> 01 07 -> 1.7
29
+ var versionBytes = try getNextValue()
30
+ if versionBytes.count == 4 {
31
+ let aa = Int( String(cString: Array(versionBytes[0..<2] + [0]) )) ?? -1
32
+ let bb = Int( String(cString: Array(versionBytes[2...] + [0])) ) ?? -1
33
+ if aa != -1 && bb != -1 {
34
+ version = "\(aa).\(bb)"
35
+ }
36
+ }
37
+ tag = try getNextTag()
38
+ try verifyTag(tag, equals: 0x5F36)
39
+
40
+ versionBytes = try getNextValue()
41
+ if versionBytes.count == 6 {
42
+ let aa = Int( String(cString: Array(versionBytes[0..<2] + [0])) ) ?? -1
43
+ let bb = Int( String(cString: Array(versionBytes[2..<4] + [0])) ) ?? -1
44
+ let cc = Int( String(cString: Array(versionBytes[4...]) + [0]) ) ?? -1
45
+ if aa != -1 && bb != -1 && cc != -1 {
46
+ unicodeVersion = "\(aa).\(bb).\(cc)"
47
+ }
48
+ }
49
+
50
+ tag = try getNextTag()
51
+ try verifyTag(tag, equals: 0x5C)
52
+
53
+ let vals = try getNextValue()
54
+ for v in vals {
55
+ if let index = DataGroupParser.tags.firstIndex(of: v) {
56
+ dataGroupsPresent.append( DataGroupParser.dataGroupNames[index] )
57
+ }
58
+ }
59
+ Logger.passportReader.debug( "DG Found - \(self.dataGroupsPresent)" )
60
+ }
61
+ }
@@ -0,0 +1,38 @@
1
+ //
2
+ // CardAccess.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 03/03/2021.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // SecurityInfos ::= SET of SecurityInfo
11
+ // SecurityInfo ::= SEQUENCE {
12
+ // protocol OBJECT IDENTIFIER,
13
+ // requiredData ANY DEFINED BY protocol,
14
+ // optionalData ANY DEFINED BY protocol OPTIONAL
15
+ @available(iOS 13, macOS 10.15, *)
16
+ public class CardAccess {
17
+ private var asn1 : ASN1Item!
18
+ public private(set) var securityInfos : [SecurityInfo] = [SecurityInfo]()
19
+
20
+ var paceInfo : PACEInfo? {
21
+ get {
22
+ return (securityInfos.filter { ($0 as? PACEInfo) != nil }).first as? PACEInfo
23
+ }
24
+ }
25
+
26
+ required init( _ data : [UInt8] ) throws {
27
+ let p = SimpleASN1DumpParser()
28
+ asn1 = try p.parse(data: Data(data))
29
+
30
+ // Bit of a hack at the moment - passing in the body - if we had a decent ASN1 parser then this would be better! ;)
31
+ for i in 0 ..< asn1.getNumberOfChildren() {
32
+ if let child = asn1.getChild(i),
33
+ let secInfo = SecurityInfo.getInstance( object:child, body : data ) {
34
+ securityInfos.append(secInfo)
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,135 @@
1
+ //
2
+ // ChipAuthenticationInfo.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 25/02/2021.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ @available(iOS 13, macOS 10.15, *)
11
+ public class ChipAuthenticationInfo : SecurityInfo {
12
+
13
+ var oid : String
14
+ var version : Int
15
+ var keyId : Int?
16
+
17
+ static func checkRequiredIdentifier(_ oid : String) -> Bool {
18
+ return ID_CA_DH_3DES_CBC_CBC_OID == oid
19
+ || ID_CA_ECDH_3DES_CBC_CBC_OID == oid
20
+ || ID_CA_DH_AES_CBC_CMAC_128_OID == oid
21
+ || ID_CA_DH_AES_CBC_CMAC_192_OID == oid
22
+ || ID_CA_DH_AES_CBC_CMAC_256_OID == oid
23
+ || ID_CA_ECDH_AES_CBC_CMAC_128_OID == oid
24
+ || ID_CA_ECDH_AES_CBC_CMAC_192_OID == oid
25
+ || ID_CA_ECDH_AES_CBC_CMAC_256_OID == oid
26
+ }
27
+
28
+ init(oid: String, version: Int, keyId: Int? = nil) {
29
+ self.oid = oid
30
+ self.version = version
31
+ self.keyId = keyId
32
+ }
33
+
34
+ public override func getObjectIdentifier() -> String {
35
+ return oid
36
+ }
37
+
38
+ public override func getProtocolOIDString() -> String {
39
+ return ChipAuthenticationInfo.toProtocolOIDString(oid:oid)
40
+ }
41
+
42
+ // The keyid refers to a specific key if there are multiple otherwise if not set, only one key is present so set to 0
43
+ public func getKeyId() -> Int {
44
+ return keyId ?? 0
45
+ }
46
+
47
+ /// Returns the key agreement algorithm - DH or ECDH for the given Chip Authentication oid
48
+ /// - Parameter oid: the object identifier
49
+ /// - Returns: key agreement algorithm
50
+ /// - Throws: InvalidDataPassed error if invalid oid specified
51
+ public static func toKeyAgreementAlgorithm( oid : String ) throws -> String {
52
+ if ID_CA_DH_3DES_CBC_CBC_OID == oid
53
+ || ID_CA_DH_AES_CBC_CMAC_128_OID == oid
54
+ || ID_CA_DH_AES_CBC_CMAC_192_OID == oid
55
+ || ID_CA_DH_AES_CBC_CMAC_256_OID == oid {
56
+ return "DH";
57
+ } else if ID_CA_ECDH_3DES_CBC_CBC_OID == oid
58
+ || ID_CA_ECDH_AES_CBC_CMAC_128_OID == oid
59
+ || ID_CA_ECDH_AES_CBC_CMAC_192_OID == oid
60
+ || ID_CA_ECDH_AES_CBC_CMAC_256_OID == oid {
61
+ return "ECDH";
62
+ }
63
+
64
+ throw NFCPassportReaderError.InvalidDataPassed( "Unable to lookup key agreement algorithm - invalid oid" )
65
+ }
66
+
67
+ /// Returns the cipher algorithm - DESede or AES for the given Chip Authentication oid
68
+ /// - Parameter oid: the object identifier
69
+ /// - Returns: the cipher algorithm type
70
+ /// - Throws: InvalidDataPassed error if invalid oid specified
71
+ public static func toCipherAlgorithm( oid : String ) throws -> String {
72
+ if ID_CA_DH_3DES_CBC_CBC_OID == oid
73
+ || ID_CA_ECDH_3DES_CBC_CBC_OID == oid {
74
+ return "DESede";
75
+ } else if ID_CA_DH_AES_CBC_CMAC_128_OID == oid
76
+ || ID_CA_DH_AES_CBC_CMAC_192_OID == oid
77
+ || ID_CA_DH_AES_CBC_CMAC_256_OID == oid
78
+ || ID_CA_ECDH_AES_CBC_CMAC_128_OID == oid
79
+ || ID_CA_ECDH_AES_CBC_CMAC_192_OID == oid
80
+ || ID_CA_ECDH_AES_CBC_CMAC_256_OID == oid {
81
+ return "AES";
82
+ }
83
+ throw NFCPassportReaderError.InvalidDataPassed( "Unable to lookup cipher algorithm - invalid oid" )
84
+ }
85
+
86
+ /// Returns the key length in bits (128, 192, or 256) for the given Chip Authentication oid
87
+ /// - Parameter oid: the object identifier
88
+ /// - Returns: the key length in bits
89
+ /// - Throws: InvalidDataPassed error if invalid oid specified
90
+ public static func toKeyLength( oid : String ) throws -> Int {
91
+ if ID_CA_DH_3DES_CBC_CBC_OID == oid
92
+ || ID_CA_ECDH_3DES_CBC_CBC_OID == oid
93
+ || ID_CA_DH_AES_CBC_CMAC_128_OID == oid
94
+ || ID_CA_ECDH_AES_CBC_CMAC_128_OID == oid {
95
+ return 128;
96
+ } else if ID_CA_DH_AES_CBC_CMAC_192_OID == oid
97
+ || ID_CA_ECDH_AES_CBC_CMAC_192_OID == oid {
98
+ return 192;
99
+ } else if ID_CA_DH_AES_CBC_CMAC_256_OID == oid
100
+ || ID_CA_ECDH_AES_CBC_CMAC_256_OID == oid {
101
+ return 256;
102
+ }
103
+
104
+ throw NFCPassportReaderError.InvalidDataPassed( "Unable to get key length - invalid oid" )
105
+ }
106
+
107
+ private static func toProtocolOIDString(oid : String) -> String {
108
+ if ID_CA_DH_3DES_CBC_CBC_OID == oid {
109
+ return "id-CA-DH-3DES-CBC-CBC"
110
+ }
111
+ if ID_CA_DH_AES_CBC_CMAC_128_OID == oid {
112
+ return "id-CA-DH-AES-CBC-CMAC-128"
113
+ }
114
+ if ID_CA_DH_AES_CBC_CMAC_192_OID == oid {
115
+ return "id-CA-DH-AES-CBC-CMAC-192"
116
+ }
117
+ if ID_CA_DH_AES_CBC_CMAC_256_OID == oid {
118
+ return "id-CA-DH-AES-CBC-CMAC-256"
119
+ }
120
+ if ID_CA_ECDH_3DES_CBC_CBC_OID == oid {
121
+ return "id-CA-ECDH-3DES-CBC-CBC"
122
+ }
123
+ if ID_CA_ECDH_AES_CBC_CMAC_128_OID == oid {
124
+ return "id-CA-ECDH-AES-CBC-CMAC-128"
125
+ }
126
+ if ID_CA_ECDH_AES_CBC_CMAC_192_OID == oid {
127
+ return "id-CA-ECDH-AES-CBC-CMAC-192"
128
+ }
129
+ if ID_CA_ECDH_AES_CBC_CMAC_256_OID == oid {
130
+ return "id-CA-ECDH-AES-CBC-CMAC-256"
131
+ }
132
+
133
+ return oid
134
+ }
135
+ }
@@ -0,0 +1,53 @@
1
+ //
2
+ // ChipAuthenticationPublicKeyInfo.swift
3
+ // NFCPassportReader
4
+ //
5
+ // Created by Andy Qua on 25/02/2021.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ @available(iOS 13, macOS 10.15, *)
11
+ public class ChipAuthenticationPublicKeyInfo : SecurityInfo {
12
+ var oid : String
13
+ var pubKey : OpaquePointer
14
+ var keyId : Int?
15
+
16
+
17
+ static func checkRequiredIdentifier(_ oid : String) -> Bool {
18
+ return ID_PK_DH_OID == oid
19
+ || ID_PK_ECDH_OID == oid
20
+ }
21
+
22
+ init(oid:String, pubKey:OpaquePointer, keyId: Int? = nil) {
23
+ self.oid = oid
24
+ self.pubKey = pubKey
25
+ self.keyId = keyId
26
+ }
27
+
28
+ public override func getObjectIdentifier() -> String {
29
+ return oid
30
+ }
31
+
32
+ public override func getProtocolOIDString() -> String {
33
+ return ChipAuthenticationPublicKeyInfo.toProtocolOIDString(oid:oid)
34
+ }
35
+
36
+ // The keyid refers to a specific key if there are multiple otherwise if not set, only one key is present so set to 0
37
+ public func getKeyId() -> Int {
38
+ return keyId ?? 0
39
+ }
40
+
41
+
42
+ private static func toProtocolOIDString(oid : String) -> String {
43
+ if ID_PK_DH_OID == oid {
44
+ return "id-PK-DH"
45
+ }
46
+ if ID_PK_ECDH_OID == oid {
47
+ return "id-PK-ECDH"
48
+ }
49
+
50
+ return oid
51
+ }
52
+
53
+ }