@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,106 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Scheme
3
+ LastUpgradeVersion = "1300"
4
+ version = "1.3">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "YES"
13
+ buildForArchiving = "YES"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "A16EB22C22A9E9E10008F53F"
18
+ BuildableName = "NFCPassportReaderApp.app"
19
+ BlueprintName = "NFCPassportReaderApp"
20
+ ReferencedContainer = "container:NFCPassportReaderApp.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES">
30
+ <Testables>
31
+ <TestableReference
32
+ skipped = "NO">
33
+ <BuildableReference
34
+ BuildableIdentifier = "primary"
35
+ BlueprintIdentifier = "NFCPassportReaderTests"
36
+ BuildableName = "NFCPassportReaderTests"
37
+ BlueprintName = "NFCPassportReaderTests"
38
+ ReferencedContainer = "container:..">
39
+ </BuildableReference>
40
+ </TestableReference>
41
+ <TestableReference
42
+ skipped = "NO">
43
+ <BuildableReference
44
+ BuildableIdentifier = "primary"
45
+ BlueprintIdentifier = "A1EBC50C2370B88D004DD19E"
46
+ BuildableName = "NFCPassportReaderAppTests.xctest"
47
+ BlueprintName = "NFCPassportReaderAppTests"
48
+ ReferencedContainer = "container:NFCPassportReaderApp.xcodeproj">
49
+ </BuildableReference>
50
+ </TestableReference>
51
+ </Testables>
52
+ </TestAction>
53
+ <LaunchAction
54
+ buildConfiguration = "Debug"
55
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
56
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
57
+ disableMainThreadChecker = "YES"
58
+ launchStyle = "0"
59
+ useCustomWorkingDirectory = "NO"
60
+ ignoresPersistentStateOnLaunch = "NO"
61
+ debugDocumentVersioning = "YES"
62
+ debugServiceExtension = "internal"
63
+ allowLocationSimulation = "YES">
64
+ <BuildableProductRunnable
65
+ runnableDebuggingMode = "0">
66
+ <BuildableReference
67
+ BuildableIdentifier = "primary"
68
+ BlueprintIdentifier = "A16EB22C22A9E9E10008F53F"
69
+ BuildableName = "NFCPassportReaderApp.app"
70
+ BlueprintName = "NFCPassportReaderApp"
71
+ ReferencedContainer = "container:NFCPassportReaderApp.xcodeproj">
72
+ </BuildableReference>
73
+ </BuildableProductRunnable>
74
+ <EnvironmentVariables>
75
+ <EnvironmentVariable
76
+ key = "OS_ACTIVITY_MODE"
77
+ value = "disable"
78
+ isEnabled = "YES">
79
+ </EnvironmentVariable>
80
+ </EnvironmentVariables>
81
+ </LaunchAction>
82
+ <ProfileAction
83
+ buildConfiguration = "Release"
84
+ shouldUseLaunchSchemeArgsEnv = "YES"
85
+ savedToolIdentifier = ""
86
+ useCustomWorkingDirectory = "NO"
87
+ debugDocumentVersioning = "YES">
88
+ <BuildableProductRunnable
89
+ runnableDebuggingMode = "0">
90
+ <BuildableReference
91
+ BuildableIdentifier = "primary"
92
+ BlueprintIdentifier = "A16EB22C22A9E9E10008F53F"
93
+ BuildableName = "NFCPassportReaderApp.app"
94
+ BlueprintName = "NFCPassportReaderApp"
95
+ ReferencedContainer = "container:NFCPassportReaderApp.xcodeproj">
96
+ </BuildableReference>
97
+ </BuildableProductRunnable>
98
+ </ProfileAction>
99
+ <AnalyzeAction
100
+ buildConfiguration = "Debug">
101
+ </AnalyzeAction>
102
+ <ArchiveAction
103
+ buildConfiguration = "Release"
104
+ revealArchiveInOrganizer = "YES">
105
+ </ArchiveAction>
106
+ </Scheme>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "group:NFCPassportReaderApp.xcodeproj">
6
+ </FileRef>
7
+ <FileRef
8
+ location = "group:Pods/Pods.xcodeproj">
9
+ </FileRef>
10
+ </Workspace>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>PreviewsEnabled</key>
6
+ <false/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,189 @@
1
+ //
2
+ // DataGroupParsingTests.swift
3
+ //
4
+ //
5
+ // Created by Andy Qua on 15/06/2019.
6
+ //
7
+
8
+ import Foundation
9
+ import XCTest
10
+ import OpenSSL
11
+
12
+ @testable import NFCPassportReader
13
+
14
+
15
+ final class DataGroupParsingTests: XCTestCase {
16
+ func testDatagroup1Parsing() {
17
+
18
+ // Random generated test MRZ
19
+ let mrz = "P<GBRTHATCHER<<BOB<<<<<<<<<<<<<<<<<<<<<<<<<<7125143269GBR3906022M1601013<<<<<<<<<<<<<<08"
20
+ let mrzBin = [UInt8](mrz.data(using: .utf8)!)
21
+ let tag = try! [0x5F,0x1F] + toAsn1Length(mrzBin.count) + mrzBin
22
+ let dg1 = try! [0x61] + toAsn1Length(tag.count) + tag
23
+
24
+ let dgp = DataGroupParser()
25
+ XCTAssertNoThrow(try dgp.parseDG(data: dg1)) { dg in
26
+ XCTAssertNotNil(dg)
27
+ XCTAssertTrue( dg is DataGroup1 )
28
+ }
29
+ }
30
+
31
+ func testDatagroup2ParsingJPEG2000() {
32
+
33
+ // This is a cut down version of the DG2 record. It contains everything up to the end of the image header - no actuall image data as its way too big to include here
34
+ // I've also adjusted the record lengths accordingly
35
+
36
+ let dg2 = hexRepToBin("75617F61570201017F6082203FA1128002010081010282010087020101880200085F2E38464143003031300000002026000100002018000000000000000000010000000000000001000000000000000000000000000C6A5020200D0A")
37
+
38
+ let dgp = DataGroupParser()
39
+ XCTAssertNoThrow(try dgp.parseDG(data: dg2)) { dg in
40
+ XCTAssertNotNil(dg)
41
+ XCTAssertTrue( dg is DataGroup2 )
42
+ }
43
+
44
+ }
45
+
46
+ func testDatagroup2ParsingJPEG() {
47
+
48
+ // This is a cut down version of the DG2 record. It contains everything up to the begininnig of what would be the image data - no actual image data as its way too big to include here
49
+ // I've also adjusted the record lengths accordingly
50
+
51
+ let dg2 = hexRepToBin("75617F618220470201017F6082203FA1128002010081010282010087020101880200085F2E3846414300303130000000202600010000201800000000000000000001000000000000000100000000000000000000FFD8FFE000104A464946")
52
+ let dgp = DataGroupParser()
53
+ XCTAssertNoThrow(try dgp.parseDG(data: dg2)) { dg in
54
+ XCTAssertNotNil(dg)
55
+ XCTAssertTrue( dg is DataGroup2 )
56
+ }
57
+ }
58
+
59
+ func testDatagroup7ParsingJPEG() {
60
+
61
+ // This is a cut down version of the DG7 record. It contains everything up to the end of the image header - no actuall image data as its way too big to include here
62
+ // I've also adjusted the record lengths accordingly
63
+
64
+ let dg7 = hexRepToBin("678220060201015F4300")
65
+ let dgp = DataGroupParser()
66
+ XCTAssertNoThrow(try dgp.parseDG(data: dg7)) { dg in
67
+ XCTAssertNotNil(dg)
68
+ XCTAssertTrue( dg is DataGroup7 )
69
+ }
70
+ }
71
+
72
+ func testDatagroup11Parsing() {
73
+
74
+ // This is a cut down version of the DG7 record. It contains everything up to the end of the image header - no actuall image data as its way too big to include here
75
+ // I've also adjusted the record lengths accordingly
76
+
77
+ let dg11Val = hexRepToBin("6B305C065F0E5F2B5F115F0E0C546573743C3C5465737465725F2B0831393730313230315F110B4E6F727468616D70746F6E")
78
+ let dgp = DataGroupParser()
79
+
80
+ XCTAssertNoThrow(try dgp.parseDG(data: dg11Val)) { dg in
81
+ XCTAssertNotNil(dg)
82
+ XCTAssertTrue( dg is DataGroup11 )
83
+
84
+ let dg11 = dg as! DataGroup11
85
+ XCTAssertEqual(dg11.fullName, "Test<<Tester")
86
+ XCTAssertEqual(dg11.dateOfBirth, "19701201")
87
+ XCTAssertEqual(dg11.placeOfBirth, "Northampton")
88
+ }
89
+ }
90
+
91
+ func testDatagroup12Parsing() {
92
+
93
+ // This is a cut down version of the DG7 record. It contains everything up to the end of the image header - no actuall image data as its way too big to include here
94
+ // I've also adjusted the record lengths accordingly
95
+
96
+ let dg12Val = hexRepToBin("6C1A5C045F265F195F260832303138303332365F1906544553544552")
97
+ let dgp = DataGroupParser()
98
+
99
+ XCTAssertNoThrow(try dgp.parseDG(data: dg12Val)) { dg in
100
+ XCTAssertNotNil(dg)
101
+ XCTAssertTrue( dg is DataGroup12 )
102
+
103
+ let dg12 = dg as! DataGroup12
104
+ XCTAssertEqual(dg12.issuingAuthority, "TESTER")
105
+ XCTAssertEqual(dg12.dateOfIssue, "20180326")
106
+ }
107
+ }
108
+
109
+ func testDatagroup15Parsing() {
110
+
111
+ // This is a cut down version of the DG7 record. It contains everything up to the end of the image header - no actuall image data as its way too big to include here
112
+ // I've also adjusted the record lengths accordingly
113
+
114
+ let dg15Val = hexRepToBin("6F820137308201333081EC06072A8648CE3D02013081E0020101302C06072A8648CE3D0101022100A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377304404207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9042026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B60441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997022100A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7020101034200049BD24313046EB43CC4652B6FC1AA00E76B5405F4E7016521E95BE53B9C5BAE5A1410F12CF3AE23F886EFCEDE89F7C63AD9CA9E5C6C05DE902DB70F2EB2341F9D")
115
+ let dgp = DataGroupParser()
116
+
117
+ XCTAssertNoThrow(try dgp.parseDG(data: dg15Val)) { dg in
118
+ XCTAssertNotNil(dg)
119
+ XCTAssertTrue( dg is DataGroup15 )
120
+
121
+ let dg15 = dg as? DataGroup15
122
+ XCTAssertTrue( dg15?.ecdsaPublicKey != nil || dg15?.rsaPublicKey != nil )
123
+ }
124
+ }
125
+
126
+
127
+ func testCOMDatagroupParsing() {
128
+ let com = hexRepToBin("601A5F0104303130375F36063034303030305C08617563676B6C6E6F")
129
+ let dgp = DataGroupParser()
130
+ XCTAssertNoThrow(try dgp.parseDG(data: com)) { dg in
131
+ XCTAssertNotNil(dg)
132
+ XCTAssertTrue( dg is COM )
133
+ guard let com = dg as? COM else { XCTFail(); return }
134
+
135
+ // Version should be 0x30313037 or [0x30, 0x31, 0x30, 0x37]
136
+ XCTAssertEqual( com.version, "1.7")
137
+
138
+ // Unicode version should be 0x303430303030 or [0x30, 0x34, 0x30, 0x30, 0x30, 0x30]
139
+ XCTAssertEqual( com.unicodeVersion, "4.0.0")
140
+
141
+ // Datagroups present are COM, DG1, DG2, DG3, DG7, DG11, DG12, DG14, DG15
142
+ XCTAssertEqual( com.dataGroupsPresent,["DG1", "DG2", "DG3", "DG7", "DG11", "DG12", "DG14", "DG15"])
143
+
144
+ }
145
+ }
146
+
147
+ func testItShouldThrowAnErrorWhenActualTagDoesNotMatchExpectedTag() throws {
148
+ let sut = try DataGroup([1, 2])
149
+ let expected = 1
150
+ let actual = 2
151
+
152
+ XCTAssertThrowsError(try sut.verifyTag(actual, equals: expected)) { error in
153
+ XCTAssertEqual("InvalidResponse in Unknown. Expected: 01 Actual: 02", error.localizedDescription)
154
+ }
155
+ }
156
+
157
+ func testItShouldNotThrowAnErrorWhenActualTagMatchesExpectedTag() throws {
158
+ let sut = try DataGroup([1, 2])
159
+ let expected = 1
160
+ let actual = 1
161
+
162
+ XCTAssertNoThrow(try sut.verifyTag(actual, equals: expected))
163
+ }
164
+
165
+ func testItShouldThrowAnErrorWhenActualTagIsNotAnExpectedTag() throws {
166
+ let sut = try DataGroup([1, 2])
167
+ let expected = [1, 3]
168
+ let actual = 2
169
+
170
+ XCTAssertThrowsError(try sut.verifyTag(actual, oneOf: expected)) { error in
171
+ XCTAssertEqual("InvalidResponse in Unknown. Expected: 01 Actual: 02", error.localizedDescription)
172
+ }
173
+ }
174
+
175
+ func testItShouldNotThrowAnErrorWhenActualTagIsAnExpectedTag() throws {
176
+ let sut = try DataGroup([1, 2])
177
+ let expected = [1, 3]
178
+ let actual = 3
179
+
180
+ XCTAssertNoThrow(try sut.verifyTag(actual, oneOf: expected))
181
+ }
182
+
183
+ static var allTests = [
184
+ ("testDatagroup1Parsing", testDatagroup1Parsing),
185
+ ("testDatagroup2Parsing", testDatagroup2ParsingJPEG2000),
186
+ ("testDatagroup2ParsingJPEG", testDatagroup2ParsingJPEG),
187
+ ("testCOMDatagroupParsing", testCOMDatagroupParsing)
188
+ ]
189
+ }
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>$(EXECUTABLE_NAME)</string>
9
+ <key>CFBundleIdentifier</key>
10
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+ <key>CFBundleInfoDictionaryVersion</key>
12
+ <string>6.0</string>
13
+ <key>CFBundleName</key>
14
+ <string>$(PRODUCT_NAME)</string>
15
+ <key>CFBundlePackageType</key>
16
+ <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
17
+ <key>CFBundleShortVersionString</key>
18
+ <string>1.0</string>
19
+ <key>CFBundleVersion</key>
20
+ <string>1</string>
21
+ </dict>
22
+ </plist>
@@ -0,0 +1,260 @@
1
+ import XCTest
2
+ import CoreNFC
3
+ import OpenSSL
4
+
5
+ @testable import NFCPassportReader
6
+
7
+ public func XCTAssertNoThrow<T>(_ expression: @autoclosure () throws -> T, _ message: String = "", file: StaticString = #file, line: UInt = #line, also validateResult: (T) -> Void) {
8
+ func executeAndAssignResult(_ expression: @autoclosure () throws -> T, to: inout T?) rethrows {
9
+ to = try expression()
10
+ }
11
+ var result: T?
12
+ XCTAssertNoThrow(try executeAndAssignResult(expression(), to: &result), message, file: file, line: line)
13
+ if let r = result {
14
+ validateResult(r)
15
+ }
16
+ }
17
+
18
+
19
+ final class NFCPassportReaderTests: XCTestCase {
20
+
21
+ func testBinToHexRep() {
22
+ let val : [UInt8] = [0x12, 0x24, 0x55, 0x77]
23
+ XCTAssertEqual( binToHexRep(val), "12245577" )
24
+ }
25
+
26
+ func testHexRepToBin() {
27
+ let val : [UInt8] = [0x12, 0x24, 0x55, 0x77]
28
+ XCTAssertEqual( hexRepToBin("12245577"), val )
29
+ }
30
+
31
+ func testAsn1Length() {
32
+ // Test < 127
33
+ XCTAssertNoThrow(try asn1Length([0x32])) { (len, offset) in
34
+ XCTAssertEqual(len, 0x32)
35
+ XCTAssertEqual(offset, 1)
36
+ }
37
+
38
+ // Test 127
39
+ XCTAssertNoThrow(try asn1Length([0x7f])) { (len, offset) in
40
+ XCTAssertEqual(len, 0x7f)
41
+ XCTAssertEqual(offset, 1)
42
+ }
43
+
44
+ // Test 128
45
+ XCTAssertNoThrow(try asn1Length([0x81, 0x80])) { (len, offset) in
46
+ XCTAssertEqual(len, 128)
47
+ XCTAssertEqual(offset, 2)
48
+ }
49
+
50
+ // Test 255
51
+ XCTAssertNoThrow(try asn1Length([0x81, 0xFF])) { (len, offset) in
52
+ XCTAssertEqual(len, 255)
53
+ XCTAssertEqual(offset, 2)
54
+ }
55
+
56
+ // Test 256
57
+ XCTAssertNoThrow(try asn1Length([0x82, 0x01,0x00])) { (len, offset) in
58
+ XCTAssertEqual(len, 256)
59
+ XCTAssertEqual(offset, 3)
60
+ }
61
+
62
+ // Test 1000
63
+ XCTAssertNoThrow(try asn1Length([0x82, 0x03, 0xE8])) { (len, offset) in
64
+ XCTAssertEqual(len, 1000)
65
+ XCTAssertEqual(offset, 3)
66
+ }
67
+
68
+ // Test Max value - 65535
69
+ XCTAssertNoThrow(try asn1Length([0x82, 0xff, 0xff])) { (len, offset) in
70
+ XCTAssertEqual(len, 65535)
71
+ XCTAssertEqual(offset, 3)
72
+ }
73
+
74
+ // Test Too Big
75
+ XCTAssertThrowsError(try toAsn1Length(65536))
76
+ }
77
+
78
+ func testToASNLength() {
79
+ // Test < 127
80
+ XCTAssertNoThrow(try toAsn1Length(50)) { data in
81
+ XCTAssertEqual(data.count, 1)
82
+ XCTAssertEqual(data[0], 0x32)
83
+ }
84
+
85
+ // Test 127
86
+ XCTAssertNoThrow(try toAsn1Length(127)) { data in
87
+ XCTAssertEqual(data.count, 1)
88
+ XCTAssertEqual(data[0], 0x7f)
89
+ }
90
+
91
+ // Test 128
92
+ XCTAssertNoThrow(try toAsn1Length(128)) { data in
93
+ XCTAssertEqual(data.count, 2)
94
+ XCTAssertEqual(data[0], 0x81)
95
+ XCTAssertEqual(data[1], 0x80)
96
+ }
97
+
98
+ // Test 255
99
+ XCTAssertNoThrow(try toAsn1Length(255)) { data in
100
+ XCTAssertEqual(data.count, 2)
101
+ XCTAssertEqual(data[0], 0x81)
102
+ XCTAssertEqual(data[1], 0xff)
103
+ }
104
+
105
+ // Test 256
106
+ XCTAssertNoThrow(try toAsn1Length(256)) { data in
107
+ XCTAssertEqual(data.count, 3)
108
+ XCTAssertEqual(data[0], 0x82)
109
+ XCTAssertEqual(data[1], 0x01)
110
+ XCTAssertEqual(data[2], 0x00)
111
+ }
112
+
113
+ // Test 1000
114
+ XCTAssertNoThrow(try toAsn1Length(1000)) { data in
115
+ XCTAssertEqual(data.count, 3)
116
+ XCTAssertEqual(data[0], 0x82)
117
+ XCTAssertEqual(data[1], 0x03)
118
+ XCTAssertEqual(data[2], 0xE8)
119
+ }
120
+
121
+ // Test Max value - 65535
122
+ XCTAssertNoThrow(try toAsn1Length(65535)) { data in
123
+ XCTAssertEqual(data.count, 3)
124
+ XCTAssertEqual(data[0], 0x82)
125
+ XCTAssertEqual(data[1], 0xff)
126
+ XCTAssertEqual(data[2], 0xff)
127
+ }
128
+
129
+ // Test Too Big
130
+ XCTAssertThrowsError(try toAsn1Length(65536))
131
+ }
132
+
133
+
134
+ func testDES3Encryption() {
135
+ let msg = [UInt8]("maryhadalittlelambaaaaaa".data(using: .utf8)!)
136
+ let iv : [UInt8] = [0, 0, 0, 0, 0, 0, 0, 0]
137
+ let key : [UInt8] = [191, 73, 56, 112, 158, 148, 146, 127, 157, 76, 117, 8, 239, 128, 87, 42]
138
+ let enc = tripleDESEncrypt(key: key, message: msg, iv: iv)
139
+ Log.debug("KEY: \(binToHexRep(key))")
140
+ Log.debug("MSG: \(binToHexRep(msg))")
141
+ Log.debug("ENC: \(binToHexRep(enc))")
142
+
143
+ XCTAssertEqual( binToHexRep(enc), "4DAF068AB358BC9E8F5E916D3DEDE750D92315370E44D9B3" )
144
+ }
145
+
146
+ func testDES3Decryption() {
147
+ let enc = hexRepToBin("4DAF068AB358BC9E8F5E916D3DEDE750D92315370E44D9B3")
148
+ let iv : [UInt8] = [0, 0, 0, 0, 0, 0, 0, 0]
149
+ let key : [UInt8] = [191, 73, 56, 112, 158, 148, 146, 127, 157, 76, 117, 8, 239, 128, 87, 42]
150
+ let dec = tripleDESDecrypt(key: key, message: enc, iv: iv)
151
+ Log.debug("KEY: \(binToHexRep(key))")
152
+ Log.debug("ENC: \(binToHexRep(enc))")
153
+ Log.debug("DEC: \(binToHexRep(dec))")
154
+
155
+ let val = String(data:Data(dec), encoding:.utf8)
156
+ XCTAssertEqual( val, "maryhadalittlelambaaaaaa" )
157
+ }
158
+
159
+ func testSecureMessagingProtect() {
160
+
161
+ let KSenc = hexRepToBin("8FDCFE759E40A4DF4575160B3BFB79FB")
162
+ let KSmac = hexRepToBin("2AE92531E55707D9C4CEF8C2D6E5AD70")
163
+ let ssc = hexRepToBin("73061884A0E57AA7")
164
+
165
+ let sm = SecureMessaging(ksenc: KSenc, ksmac: KSmac, ssc: ssc)
166
+
167
+ let data : [UInt8] = [0x00, 0xA4, 0x02, 0x0C, 0x02, 0x01, 0x01, 0x00]
168
+ let apdu = NFCISO7816APDU(data:Data(data))!
169
+ let protApdu = try! sm.protect( apdu: apdu )
170
+
171
+ XCTAssertNotNil(protApdu.data )
172
+ XCTAssertEqual( protApdu.instructionClass, 0x0c )
173
+ XCTAssertEqual( protApdu.instructionCode, 0xA4 )
174
+ XCTAssertEqual( protApdu.p1Parameter, 0x02 )
175
+ XCTAssertEqual( protApdu.p2Parameter, 0x0c )
176
+
177
+ let hexDataRep = binToHexRep( [UInt8](protApdu.data!))
178
+ XCTAssertEqual( hexDataRep, "870901CC69089F8F1AB4698E08B6334B3ABD5A9E09" )
179
+ XCTAssertEqual( protApdu.expectedResponseLength, 0 )
180
+ }
181
+
182
+ func testSecureMessagingUnprotectNoData() {
183
+
184
+ // Note - same keys as above but SSC incremented by 1 as per spec
185
+ let KSenc = hexRepToBin("8FDCFE759E40A4DF4575160B3BFB79FB")
186
+ let KSmac = hexRepToBin("2AE92531E55707D9C4CEF8C2D6E5AD70")
187
+ let ssc = hexRepToBin("73061884A0E57AA8")
188
+
189
+ let sm = SecureMessaging(ksenc: KSenc, ksmac: KSmac, ssc: ssc)
190
+
191
+ let data : [UInt8] = hexRepToBin("990290008E08C61E440E5DD415469000")
192
+ let protRespApdu = ResponseAPDU(data: data, sw1: 0x90, sw2: 0x00)
193
+
194
+ XCTAssertNoThrow(try sm.unprotect( rapdu: protRespApdu )) { rapdu in
195
+ XCTAssertEqual(binToHexRep(rapdu.data), "")
196
+ XCTAssertEqual( rapdu.sw1, 0x90 )
197
+ XCTAssertEqual( rapdu.sw2, 0x00 )
198
+ }
199
+ }
200
+
201
+ func testSecureMessagingUnprotectWithData() {
202
+
203
+ let KSenc = hexRepToBin("8FDCFE759E40A4DF4575160B3BFB79FB")
204
+ let KSmac = hexRepToBin("2AE92531E55707D9C4CEF8C2D6E5AD70")
205
+ let ssc = hexRepToBin("73061884A0E57AAA")
206
+
207
+ let sm = SecureMessaging(ksenc: KSenc, ksmac: KSmac, ssc: ssc)
208
+
209
+ let data : [UInt8] = hexRepToBin("87090156D0EFCC887F8973990290008E08D6B9C0DA21DC965F9000")
210
+ let protRespApdu = ResponseAPDU(data: data, sw1: 0x90, sw2: 0x00)
211
+
212
+ XCTAssertNoThrow(try sm.unprotect( rapdu: protRespApdu )) { rapdu in
213
+ XCTAssertEqual(binToHexRep(rapdu.data), "615B5F1F")
214
+ XCTAssertEqual( rapdu.sw1, 0x90 )
215
+ XCTAssertEqual( rapdu.sw2, 0x00 )
216
+
217
+ }
218
+ }
219
+
220
+
221
+ func testConvertECDSAPlainTODer() {
222
+ let sigText = "67e147aac644325792dfa0b1615956dc4ed54e8cd859341571db98003431936e0651e9a3cdbcea3c8accd75a6f6bf07eb6bcf9ad1728e21aa854049e634e6fbf"
223
+ let sig = hexRepToBin(sigText)
224
+
225
+ let ecsig = ECDSA_SIG_new()
226
+ defer { ECDSA_SIG_free(ecsig) }
227
+ sig.withUnsafeBufferPointer { (unsafeBufPtr) in
228
+ let unsafePointer = unsafeBufPtr.baseAddress!
229
+ let r = BN_bin2bn(unsafePointer, 32, nil)
230
+ let s = BN_bin2bn(unsafePointer + 32, 32, nil)
231
+ ECDSA_SIG_set0(ecsig, r, s)
232
+ }
233
+
234
+ //print( "Sig - \(ecsig)" )
235
+
236
+ var derEncodedSignature: UnsafeMutablePointer<UInt8>? = nil
237
+ let derLength = i2d_ECDSA_SIG(ecsig, &derEncodedSignature)
238
+
239
+ var derBytes = [UInt8](repeating: 0, count: Int(derLength))
240
+ for b in 0..<Int(derLength) {
241
+ derBytes[b] = derEncodedSignature![b]
242
+ }
243
+
244
+ XCTAssertNoThrow(try OpenSSLUtils.ASN1Parse(data: Data(derBytes)), "Successfully parsed" )
245
+
246
+ }
247
+
248
+
249
+ static var allTests = [
250
+ ("testBinToHexRep", testBinToHexRep),
251
+ ("testHexRepToBin", testHexRepToBin),
252
+ ("testAsn1Length", testAsn1Length),
253
+ ("testToASNLength", testToASNLength),
254
+ ("testDES3Encryption", testDES3Encryption),
255
+ ("testDES3Decryption", testDES3Decryption),
256
+ ("testSecureMessagingProtect", testSecureMessagingProtect),
257
+ ("testSecureMessagingUnprotectNoData", testSecureMessagingUnprotectNoData),
258
+ ("testSecureMessagingUnprotectWithData", testSecureMessagingUnprotectWithData),
259
+ ]
260
+ }